【发布时间】:2015-09-21 18:50:59
【问题描述】:
问题在于,当我在 deleteData 中的 userNotes.jsp 测试函数中单击 DELETE 按钮时 - out.println(value) 有效 - 它向我显示了按钮上单击的当前值,但是没有其他的。它不会从数据库中删除数据,也不会在响应中发送重定向,我需要做什么?
userNotes.jsp
<table id="notes" border="2">
<tr>
<td>note name</td>
<td>note</td>
</tr>
<%
PrintWriter writer = response.getWriter();
int id = Integer.parseInt(request.getParameter("r"));
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/evernoteDB",
"evernoteDB", "0633739768z");
Statement st = con.createStatement();
ResultSet rs;
rs = st.executeQuery("SELECT * FROM note");
while (rs.next())
{
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getString(2) %></td>
<td>
<a href=deleteData?id=<%=rs.getString(1) %>> Delete </a>
</td>
</tr>
<%
}
rs.close();
st.close();
con.close();
}
catch(ClassNotFoundException e)
{
writer.println("Couldn't load database driver: " + e.getMessage());
}
catch(SQLException e)
{
writer.println("SQLException caught: " + e.getMessage());
}
catch (Exception e)
{
writer.println(e);
}
%>
</table>
deleteData - servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.*;
import java.sql.*;
@WebServlet("/deleteData")
public class deleteData extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String value = request.getParameter("id");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/evernoteDB",
"evernoteDB", "0633739768z");
Statement st = conn.createStatement();
st.executeUpdate("DELETE FROM note WHERE noteName=" + value);
out.print(value);
response.sendRedirect("http://localhost:8080/userNotes.jsp");
conn.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
将您的业务逻辑保留在 Java 类/EJB 中,并且仅将 JSP 用于视图层
-
从技术上讲,你可以这样做,我们甚至可以用上面的代码解决问题。但是,原则上,我认为从 JSP 访问数据库并不正确。数据库操作应该不在网页上实现,因为它们属于服务器端。