2、案例:Servlet版CRUD;
第 6 节6-案例:增删改查需求说明
第 7 节7-案例:人员列表
第 8 节8-案例:新增和保存
第 9 节9-案例:修改和保存
第 10 节10-案例:删除以及总结
第 11 节11-HttpServlet与Servlet接口
第 6 节6-案例:增删改查需求说明
第 7 节7-案例:人员列表
第 8 节8-案例:新增和保存
第 9 节9-案例:修改和保存
第 10 节10-案例:删除以及总结
使用已经做完的演示几个动作:查询列表;新增;新增保存;编辑;编辑保存;删除。
如果每个动作一个Servlet太麻烦,因此通过一个action参数来分辨。
因为新增保存、编辑保存都是Post,其他是Get,因此让doPost调用doGet,这样共享同样的逻辑,也就是不区别Get还是Post。
使用JDBCUtils访问数据库。
【步骤】
在数据库myweb1中新建表T_Persons
设置字段Id name age
设置web.xml
【Person2Servlet.java】
package com.rupeng.test1;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.spi.DirStateFactory.Result;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Persons2Servlet extends HttpServlet {
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
//第一次请求Servletd的时候init方法被调用
System.out.println("Persons2Servlet初始化");
//Servlet默认是:在服务器中只创建一个对象
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
System.out.println("Persons2Servlet销毁");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String xing = getServletConfig().getInitParameter("xing");
String ming = getServletConfig().getInitParameter("ming");
System.out.println(xing);
System.out.println(ming);
//persons2?action=list 显示所有的人员
//persons2?action=addnew 显示新增页面
//persons2?action=edt&id=2 编辑id为2的人员
//persons2?action=addnewSubmit&name=yzk&age=18
//persons2?action=editSubmit&id=2&name=yzk&age=18
//persons2?action=delete&id=2;
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter writer = resp.getWriter();
String action = req.getParameter("action");
if(action.equals("list"))
{
writer.println("<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'</head>");
writer.println("<body>");
writer.println("<p><a href='Persons2?action=addnew'>新增</a></p>");
writer.println("<table>");
writer.println("<thead><tr><td>Id</td><td>姓名</td><td>年龄</td><td>修改</td><td>删除</td></tr></thead>");
writer.println("<tbody>");
ResultSet rs = null;
try {
rs = JdbcUtils2.executeQuery("select * from T_Persons");
while(rs.next())
{
int id = rs.getInt("Id");
String name = rs.getString("Name");
int age = rs.getInt("Age");
writer.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"
+age+"</td><td><a href='Persons2?action=edit&id="
+id+"'>修改</a></td><td><a οnclick='return confirm(\"确认要删除则条纪录吗?\")' href='Persons2?action=delete&id="
+id+"'>删除</a></td></tr>");
}
} catch (SQLException e) {
writer.print("查询数据出错");
writer.print(e);
e.printStackTrace();
}
finally
{
JdbcUtils2.closeAll(rs);
}
writer.println("</tbody>");
writer.println("</table>");
writer.println("</body></html>");
}
else if(action.equals("addnew"))
{
writer.println("<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'</head>");
writer.println("<body>");
writer.println("<form action='Persons2' method='post'>");
//隐藏在界面中看不到但是表单提交的时候是能够提交到服务器的
writer.println("<input type='hidden' name='action' value='addnewSubmit' />");
writer.println("姓名:<input type='text' name='name' />");
writer.println("年龄:<input type='text' name='age' />");
writer.println("<input type='submit' value='保存' />");
writer.println("</form>");
writer.println("</body></html>");
}
else if(action.equals("edit"))
{
int id = Integer.parseInt(req.getParameter("id"));
ResultSet rs = null;
try {
rs = JdbcUtils2.executeQuery("select * from T_Persons where Id=?",id);
if(rs.next())//如果第一次调用next()就返回false,就说明一行数据都没有,不存在id
{
String name = rs.getString("name");
int age = rs.getInt("Age");
writer.println("<form action='Persons2' method='post'>");
writer.println("<input type='hidden' name='action' value='editSubmit'/>");
writer.println("<input type='hidden' name='id' value='"+id+"'/>");//让服务器知道要修改谁
writer.println("姓名:<input type='text' name='name' value='"+name+"' />");
writer.println("年龄:<input type='text' name='age' value='"+age+"' />");
writer.println("<input type='submit' value='保存' />");
writer.println("</form>");
}
else
{
writer.println("没有找到id="+id+"的人");
}
} catch (SQLException e) {
writer.println("查询出错");
e.printStackTrace();
}
finally
{
JdbcUtils.closeAll(rs);
}
}
else if(action.equals("addnewSubmit"))
{
String name = RuPengUtils.getParameter(req, "name");
int age = Integer.parseInt(req.getParameter("age"));
try
{
JdbcUtils2.executeUpdate("Insert into T_Persons(Name,Age) values(?,?)", name,age);
resp.sendRedirect("Persons2?action=list");//保存成功后重定向到查询页面,这样就可以立即看到新增的数据
}
catch(SQLException e)
{
writer.print("新增保存出错");
e.printStackTrace();
}
}
else if(action.equals("editSubmit"))
{
int id = Integer.parseInt(req.getParameter("id"));
String name = RuPengUtils.getParameter(req, "name");
int age = Integer.parseInt(req.getParameter("age"));
try {
JdbcUtils2.executeUpdate("update T_Persons set name=?,age=? where id=?",
name,age,id);
} catch (SQLException e) {
writer.println("修改保存出错");
e.printStackTrace();
}
resp.sendRedirect("Persons2?action=list");
}
else if(action.equals("delete"))
{
int id = Integer.parseInt(req.getParameter("id"));
try {
JdbcUtils2.executeUpdate("delete from T_Persons where Id=?", id);
resp.sendRedirect("Persons2?action=list");
}
catch (SQLException e) {
writer.print("删除出错");
e.printStackTrace();
}
}
else
{
writer.println("未知的action");
}
}
}
第 11 节11-HttpServlet与Servlet接口
Servlet必须实现Servlet接口,HttpServlet是实现了Servlet接口的一个抽象类,基于HttpServlet编写简单很多。
Servlet的方法:
init初始化时候被调用;
destroy销毁时被调用;
getServletConfig获得web.xml中当前servlet下通过<init-param>配置的参数值,可以配置多组<init-param>
String xing =getServletConfig().getInitParameter("Xing");
无论是get、post还是其他请求,都会调用service方法
反编译HttpServlet.class GenericServlet.class Servlet.class