我创建了一个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!!");
}
答案 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架构的基础。它可以干净地分离责任,避免诸如你所做的那样的错误,以及其他好处。