web.xml文件的配置为:
<servlet> <servlet-name>ManagerEmpServlet</servlet-name> <servlet-class>emp.ManagerEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ManagerEmpServlet</servlet-name> <url-pattern>*.do</url-pattern>
WebRoot下有一个addEmp.jsp文件,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'addEmp.jsp' starting page</title> </head> <body> <h3>add employee</h3> <form action="add.do" method="post"> name:<input type="text" name="name"><br> salary:<input type="text" name="salary"><br> <input type="submit" value="confirm"> </form> </body> </html>
数据库为exercise,表名为emp,表仅含有三个字段,id int,name varchar(20),salary double.
ManagerEmpServlet的源代码如下:
public class ManagerEmpServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri=request.getRequestURI(); //System.out.println(uri); String path=uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf(".")); Connection conn=null; PrintWriter pw=response.getWriter(); if(path.equals("/list")){ try { conn=DBUtil.getConnection(); Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select id,name,salary from emp"); pw.println("<table border='1'>"); pw.println("<tr><td>id</td><td>name</td><td>salary</td>" + "<td>operation</td></tr>"); while(rs.next()){ pw.println("<tr><td>"+rs.getLong("id")+"</td>"+ "<td>"+rs.getString("name")+"</td>" +"<td>"+rs.getDouble("salary")+"</td>"+ "<td><a href='delete.do?id="+rs.getLong("id")+"'>delete</a>"+ " <a href='load.do?id="+rs.getLong("id")+"'>modify</a>" + "</td></tr>"); } pw.println("</table>"); pw.println("<a href='addEmp.jsp'>add employee</a>"); pw.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(conn); } }else if(path.equals("/add")){ String name=request.getParameter("name"); double salary=Double.parseDouble(request.getParameter("salary")); try { conn=DBUtil.getConnection(); PreparedStatement pstmt=conn.prepareStatement ("insert into emp(name,salary) values(?,?)"); pstmt.setString(1,name); pstmt.setDouble(2,salary); pstmt.executeUpdate(); response.sendRedirect("list.do"); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(conn); } }else if(path.equals("/delete")){ try { Long id=Long.parseLong(request.getParameter("id")); conn=DBUtil.getConnection(); PreparedStatement pstmt=conn.prepareStatement("delete from emp where id=?"); pstmt.setLong(1,id); pstmt.executeUpdate(); response.sendRedirect("list.do"); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(conn); } }else if(path.equals("/update")){ String id=request.getParameter("id"); String name=request.getParameter("name"); String salary=request.getParameter("salary"); conn=DBUtil.getConnection(); try { PreparedStatement pstmt=conn.prepareStatement( "update emp set name=?,salary=? where id=?"); pstmt.setString(1,name); pstmt.setDouble(2,Double.parseDouble(salary)); pstmt.setLong(3,Long.parseLong(id)); pstmt.executeUpdate(); response.sendRedirect("list.do"); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(conn); } }else if(path.equals("/load")){ String id=request.getParameter("id"); conn=DBUtil.getConnection(); try { PreparedStatement pstmt=conn.prepareStatement( "select * from emp where id=?"); pstmt.setLong(1,Long.parseLong(id)); ResultSet rs=pstmt.executeQuery(); rs.next(); pw.println("<form action='update.do?id="+id+"' method='post'>"); pw.println("name:<input type='text' name='name' " + "value='"+rs.getString("name")+"'/><br>"); pw.println("salary:<input type='text' name='salary' " + "value='"+rs.getDouble("salary")+"'/><br>"); pw.println("<input type='submit' value='confirm'/>"); pw.println("</form>"); pw.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.close(conn); } } } }
DBUtil是个工具类,包含getConnection()和close(Connection conn)两个方法,比较简单,此处就不贴出来了。
部署完毕,在浏览器地址栏输入:http://localhost:8080/web02_demo/list.do,回车即可。