在没有数据的情况下刷新页面时,空数据被插入到数据库中

时间:2015-02-23 20:14:24

标签: jsp

我创建了一个JSP页面来将数据插入数据库。这是它应该服务的唯一目的,但是当我刷新页面时,它会将空数据插入到数据库中。我通过给出条件来解决它,以便在没有插入数据时显示消息。但是在刷新时显示这样的消息看起来不合适。另外我想知道我是否可以使用DAO来执行任务或单独的servlet。请指教!

<form method="post">
Ticket Number:<input type="text" name=ticketNumber autocomplete="on">
<br>
Ticket type:<select name="type">
<option value="Old">Old</option>
<option value="New">New</option>
</select>

Ticket status:
<select name="status">

<option value="Transferred">Transferred</option>
<option value="Pending">Pending</option>
<option value="Strike 1">Strike 1</option>
<option value="Strike 2">Strike 2</option>
<option value="Strike 3">Strike 3</option>
<option value="Call back">Call back</option>

</select>


<br>

<input type="submit" value="submit"> 
<%
String ticketNumber= request.getParameter("ticketNumber");
System.out.println(""+ticketNumber);
String ticketType= request.getParameter("type");
System.out.println(""+ticketType);
String status= request.getParameter("status");
System.out.println(""+status);

if(ticketNumber != null || ticketType != null || status !=null)

{   
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connectionconn=DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","great123");
PreparedStatement ps=
conn.prepareStatement
("insert into ticketdb   (tnumber,ttype,tstatus)   values (?,?,?)");

ps.setString(1, ticketNumber);
ps.setString(2, ticketType);
ps.setString(3, status);
ps.executeUpdate();
}catch (Exception ex)
{
    ex.printStackTrace();
}
}

else
{
    out.print("You missed something!!");
}

1 个答案:

答案 0 :(得分:0)

您不应该在JSP中使用Java代码。 JSP是一个视图组件。它唯一的责任是使用JSP EL,JSTL和其他taglib生成HTML,并从存储在请求属性中的Java Bean中获取数据。

访问数据库应该使用Java从一个从控制器调用的DAO(作为servlet实现)完成。

你在这里混合了两件非常不同的东西: 1.显示表格 2.处理在数据库中创建数据的表单提交。

第一个应该由对servlet的GET请求处理。 servlet的doGet()方法应该获取数据以显示表单,将其存储在请求属性中,并转发到显示表单的JSP。

然后应该使用POST将表单操作提交给servlet(相同或另一个servlet)。此servlet的doPost()方法应该从参数中获取值,验证它们,如果有效,则将数据插入数据库,并重定向到另一个servlet,通常显示刚刚插入的数据,或者列出表格中的数据。

这是MVC架构的基础。它可以干净地分离责任,避免诸如你所做的那样的错误,以及其他好处。