servlet
oracle 数据库使用比较繁琐,以后可能会和mysql 一起混着用.
两个在连接的时候没有太大的区别.
数据库要支持中文,要设定正确的字符集 gbk utf-8
jdbc 驱动要进行正确的编码和解码
jdbc驱动在插入中文数据时 要做编码处理在查询中文数据时要做解码处理
mysql 的jdbc 驱动的某些版本 的 解码和编码有问题要添加
?useUnicode=true&characterEncoding=utf-8
确保可以正确的编码和解码 或者换一个jdbc驱动.
sun 公司定制的一种用来扩展web服务器功能的组件规范
扩展web 服务器功能
apache
tomcat
组件规范
符合一定规范 实现部分功能,需要部署到相应的容器上才能运行的软件模块
容器是 符合一定规范 为组件提供运行tomcat环境的程序
tomcat 安装 使用 可以参看我linux分类中的内容
1写一个java类,实现servlet接口或者继承HttpServlet 抽象类
2 编译
3打包
appname
WEB-INF
classes(字节码文件)
web.xml(部署描述文件)
lib(可选,jar文件)
4部署
将打包好的文件夹放到容器特定的文件夹下面
5启动容器
访问servlet
http://ip:port/appname/servlet-url
servlet
sun 公司定制的一种用来扩展web服务器功能的组件规范
扩展web 服务器功能
apache
tomcat
组件规范
符合一定规范 实现部分功能,需要部署到相应的容器上才能运行的软件模块
容器是 符合一定规范 为组件提供运行环境的程序
package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<div style=\"color:red\">HELLO! TOMCAT</div>"); out.close(); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>helloServlet</servlet-name> <!-- servlet 类名必须与实际类名完全一致 --> <servlet-class>web.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ public void service(HttpServletRequest requset, HttpServletResponse response)throws ServletException,IOException{ //getParameter 方法用来根据请求参数名 获得请求参数值 String name = requset.getParameter("name"); String msg = "<h1>hello " + name + "</h1>"; response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(msg); out.close(); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>helloServlet</servlet-name> <!-- servlet 类名必须与实际类名完全一致 --> <servlet-class>web.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
http://127.0.0.1:8080/web01/hello?name=lmdtx
http 中 ? 表示后面是请求参数 name 是请求参数名 jetty是请求参数值
浏览器与web 服务器之间的通信过程及数据格式 的规范
通信的过程
浏览器建立与web服务器之间的连接
浏览器将请求数据打包并发送给web服务器
服务器将响应数据打包并发送给浏览器
服务器关闭连接
如果浏览器要再次请求 必须重新建立一个新的连接
数据包的结构
请求数据包
a 请求行
get请求和 post请求
直接在浏览器地址栏输入某个地址 get
点击链接 get
表单默认的提交方式 get
设置 表单的method = "post" post
GET /web02/hello?name=zongxuan HTTP/1.1
请求方式(get/post) 请求资源路径(get方式会将请求参数名和路径放在一起) 协议的类型和版本
get请求的特点
请求参数会添加到请求资源路径的后面,只能添加少量的参数 只能存放2k的数据
post请求的特点
请求参数添加到实体内容里面,可以添加大量的参数
相对安全, 但是:post请求不会对请求参数进行加密
https 来保证数据的安全
b 消息头
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
是一个键值对 由w3c定义 可以由通信的双方彼此发送
c 实体内容
只有的那个请求的方式是post的时候
响应数据包
a 状态行
Content-Length: 25
b 消息头
Content-Type: text/html;charset=ISO-8859-1
Date: Sun, 25 Sep 2016 13:47:37 GMT
Server: Apache-Coyote/1.1
c 实体内容
程序处理完的结果
如何获得请求参数值
String request getParameter(String paraName); 如果paraName 对应的值不存在 返回NULL
String[] request getParameterValues(String paramName); 当有多个参数名相同的时候,用这个方法
package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ public void service(HttpServletRequest requset, HttpServletResponse response)throws ServletException,IOException{ //getParameter 方法用来根据请求参数名 获得请求参数值 String name = requset.getParameter("name"); String age = requset.getParameter("age"); String msg = "<h1>hello " + name+ age + "</h1>"; response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(msg); out.close(); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>helloServlet</servlet-name> <!-- servlet 类名必须与实际类名完全一致 --> <servlet-class>web.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
<html> <head> <title>MyHtml.html</title> </head> <body> <form action="hello" method="post"> <fieldset> <legend>hello</legend> name:<input name="name"/><br/> age:<input name="age"/><br/> <input type = "submit" value="ok"/> </fieldset> </form> </body> </html>
编码:
servlet 输出中文
setContentTYpe 中 charset=“utf-8”
支持中文就可以,utf-8 gbk
生成一个消息头 告诉浏览器 fuwuqi返回的数据类型和编码格式
也设置了out.printlnz在输出的时候使用的编码格式
表单中有中文参数
当表单提交时 浏览器会对表单中的中文使用
浏览器打开表单所在的页面时的编码格式进行编码
保证表单所在的页面按照指定的编码格式打开
<head>中
<meta http-equiv="content-type" content="text/html;charset=utf-8">
服务器按照指定的编码格式进行解码
request.setCharacterEncoding("utf-8");
只对post请求有效 get 的无效
或者
重定向
服务器发送应给302状态码,和一个Location 消息头
值是一个地址,创维重定向地址,当浏览器收到以后,会立刻向重定向的地址发请求
url:重定向地址
response.sendRedirect(String url);
重定向地址是任意的
重定向之后,浏览器地址栏的地址编程重定向地址
重定向之前,不能够调用out.close()方法
重定向之前,会先清空response上缓存的数据
package add; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class addEmpServlet extends HttpServlet{ public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String age = request.getParameter("age"); String sal = request.getParameter("sal"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("hi,"+name+"<br/>"); out.println("年龄:"+age+"<br/>"); out.println("工资:"+sal); Connection conn= null; PreparedStatement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot"); stmt = conn.prepareStatement("insert into emp(name,sal,age) values(?,?,?)"); stmt.setString(1, name); stmt.setDouble(2, Double.parseDouble(sal)); stmt.setInt(3, Integer.parseInt(age)); stmt.executeUpdate(); out.println(" <br/>OK"); String msg = "<input type=\"button\" name=\"Submit\" onclick=\"javascript:history.back(-1);\" value=\"返回上一页\">"; out.println(msg); response.sendRedirect("listEmpServlet"); } catch (Exception e) { e.printStackTrace(); out.println("系统繁忙,稍后再试"); }finally{ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { } } if(conn != null){ try { conn.close(); } catch (SQLException e) { } } } out.close(); } }
package del; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class delEmpServlet extends HttpServlet { public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); PrintWriter out = response.getWriter(); Connection con = null; PreparedStatement stmt = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot"); stmt = con.prepareStatement("delete from emp where id=?"); stmt.setInt(1, id); stmt.executeUpdate(); response.sendRedirect("listEmpServlet"); }catch(Exception e){ e.printStackTrace(); }finally{ if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } out.close(); } }
package show; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.sql.PreparedStatement; public class listEmpServlet extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse response ) throws ServletException,IOException{ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); Connection con = null; PreparedStatement stmt = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot"); stmt = con.prepareStatement("select * from emp"); ResultSet rs =stmt.executeQuery(); out.println("<table border=1>"); out.println("<tr><td>ID</td><td>NAME</td><td>SAL</td><td>AGE</td><td>操作</td></tr>"); while(rs.next()){ int id= rs.getInt("id"); String name = rs.getString("name"); double sal = rs.getDouble("sal"); int age = rs.getInt("age"); out.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"+sal+"</td><td>"+age+"</td><td><a href=\"delEmpServlet?id="+id+"\">删除</a><a href=\"loadEmpServlet?id="+id+"\"> 修改</a></td></tr>"); } out.println("</table>"); out.println("<a href=\"addEmp.html\">添加新员工</a>"); }catch(Exception e){ e.printStackTrace(); }finally{ if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } out.close(); } }
package show; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class loadEmpServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); PrintWriter out = response.getWriter(); Connection con = null; PreparedStatement stmt = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot"); stmt = con.prepareStatement("select id,name,sal,age from emp where id=?"); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if(rs.next()){ out.println("<form action=\"updateEmpServlet?id="+id+"\" method=\"post\">"); out.println("id:"+id+"<br/>"); String name = rs.getString("name"); double sal = rs.getDouble("sal"); int age = rs.getInt("age"); //out.println("<input type=\"hidden\">"); out.println("Name:<input type=\"text\" value="+name+" name=\"name\"/ ><br/>"); out.println("Sal:<input type=\"text\" value="+sal+" name=\"sal\" /><br/>"); out.println("Age:<input type=\"text\" value="+age+" name=\"age\" /><br/>"); out.println("<input type= \"submit\" value=\"修改\">"); out.println("</form>"); } }catch(Exception e){ e.printStackTrace(); }finally{ if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } out.close(); } }
package update; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class updateEmpServlet extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); String name = request.getParameter("name"); double sal = Double.parseDouble(request.getParameter("sal")); int age = Integer.parseInt(request.getParameter("age")); PrintWriter out = response.getWriter(); Connection con = null; PreparedStatement stmt = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot"); stmt = con.prepareStatement("update emp set name=?,sal=?,age=? where id=?"); stmt.setString(1, name); stmt.setDouble(2, sal); stmt.setInt(3, age); stmt.setInt(4, id); stmt.executeUpdate(); response.sendRedirect("listEmpServlet"); }catch(Exception e){ e.printStackTrace(); }finally{ if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } out.close(); } }
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <form action="addEmpServlet" method="post"> <fieldset> <legend>基本信息</legend> 姓名:<input type="text" name = "name" /><br/> 年龄:<input type="text" name = "age" /><br/> <!-- 性别:<input type="checkbox" name="sex" value="M" /> <label for="r1">男</label> <input type="checkbox" name="sex" value="F"/> <label for="c1">女</label><br/> --> 工资:<input type="text" name = "sal" /><br/> <input type= "submit" value="提交"> </fieldset> <input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页"> </form> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <form action="listEmpServlet" > <input type="submit" value="查询所有信息"/> </form> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>addEmpServlet</servlet-name> <servlet-class>add.addEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>addEmpServlet</servlet-name> <url-pattern>/addEmpServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>listEmpServlet</servlet-name> <servlet-class>show.listEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>listEmpServlet</servlet-name> <url-pattern>/listEmpServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>delEmpServlet</servlet-name> <servlet-class>del.delEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>delEmpServlet</servlet-name> <url-pattern>/delEmpServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>loadEmpServlet</servlet-name> <servlet-class>show.loadEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loadEmpServlet</servlet-name> <url-pattern>/loadEmpServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>updateEmpServlet</servlet-name> <servlet-class>update.updateEmpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>updateEmpServlet</servlet-name> <url-pattern>/updateEmpServlet</url-pattern> </servlet-mapping> </web-app>
改进版:
servlet 容器如何处理请求资源路径
http://127.0.0.1:8080/web03/listEmpServlet.html
容器要依据请求资源路径找到应用所在的文件夹,
容器会 认为访问的是一个servlet 然后去在web.xml 文件中和他匹配的servlet
匹配方式: 精确匹配 web.xml 当中 必须
<url-pattern>/listEmpServlet.html</url-pattern>
通配符匹配 会用*匹配任务的0个 1个 多个字符
<url-pattern>/*</url-pattern>
<url-pattern>/abc</url-pattern>
后缀匹配 使用”*.“开头,后接上任意的1个或者多个字符
<url-pattern>*.action</url-pattern>
匹配所有以“.action” 结尾的请求
如果以上都不匹配 容器会查找相应的文件如果找到,返回,找不到,返回404.
如何让一个servlet 处理多种请求
使用后缀匹配模式
分析请求资源路径
servlet 生命周期
servlet容器如何创建servlet对象 如何初始化,如何调用servlet 对象的方法处理请求,以及如何销毁servlet 想的整个过程
四个阶段
实例化
容器调用servlet 的构造器创建一个servlet对象,在默认情况下,不管有多少个请求,容器只会创建一个servlet对象
默认情况小 容器在收到请求的之后,才会创建servlet对象
容器在启动的时候就将某些servlet对象创建好,servlet 必须配置一个参数 web.xml中
<load-on-startup> 大于等于0的整数</load-on-startup>
参数:大于等于0的整数
值越小,优先级越高
初始化
容器创建好servlet对象之后,会立即调用init方法
一般情况下,不需要写init 方法,因为GenericServlet已经实现了init方法
将容器创建的ServletConfig方法来获得该对象
调用一个空的init方法 该init方法用于子类去覆盖
如果要实现自己的初始化处理逻辑只要覆盖init()方法
初始化方法只会执行一次
ServletConfig对象可以用来访问servlet的初始化参数
就绪
servlet 容器收到请求之后,会调用servlet 对象的service 方法来处理请求
处理逻辑:
1、override HttpServlet 的service 方法
HttpServlet的service方法的实现
依据请求类型调用doGet 或者doPost方法 但是 这两个方法只是简单的抛出一个异常
2、overide HttpServlet的doGet和doPost方法(建议使用这个)
销毁
容器依据自身的算法 决定是否销毁servlet对象 容器在销毁servlet对象之前会调用servlet对象的destroy方法
destroy方法只会执行一次
也可以override
例如 释放一些资源,连接
servlet 生命周期相关的接口和类
1、HttpServlet 抽象类 有一个父类 GengericServlet 抽象类
2、ServletRequest接口是HttpServletRequest接口的父接口
ServletREspone接口是HttpSerlvetResponse的父接口
3、ServletConfig接口
使用ServletConfig config = getServletConfig();
String name = config.getInitParameter("name")
可以获取 web.xml中的配置
4 、 Servlet 接口
intit(ServletConfig config)
service(ServletRequest request ServletResponse response)
destroy()
5 、GengericServlet 抽象类 实现了 Servlet 中的部分方法(init 和destroy)
6、 HttpServlet抽象类 继承了GenericServlet 实现了service 方法
Servlet 接口有三个方法 其中 init(ServletConfig config) 需要一个参数 所以 依赖ServletConfig这个接口 service(ServletRequest request ServletResponse response) 方法中有两个参数 ServletResopn 和ServletRequest 所以他依赖 ServletResopn 和ServletRequest 这两个接口,GenericServlet 抽象类实现了init 和destroy 方法 HttpServlet 继承了GenericServlet 实现了service(HttpServletRequest request,HttpServletResponse response)方法 他有两个参数HttpServletRequest request,HttpServletResponse response 这个两个参数 分别继承 ServletResopn 和ServletRequest
我们编写的方法 继承了 HttpServlet 所以 可以重写 service方法 或者doGet和doPost方法
package action; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.Emp; import dao.EmpDAO; import dao.Factory; public class actionServlet extends HttpServlet { public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ String uri = request.getRequestURI(); if("/web04/addEmpServlet.action".equals(uri)){ request.setCharacterEncoding("utf-8"); Emp emp = new Emp(); emp.setName(request.getParameter("name")); emp.setSalary(Double.parseDouble(request.getParameter("sal"))); emp.setAge(Integer.parseInt(request.getParameter("age"))); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); try { EmpDAO dao = (EmpDAO)Factory.GetInstance("EmpDAO"); dao.save(emp); response.sendRedirect("listEmpServlet.action"); } catch (Exception e) { e.printStackTrace(); out.println("系统繁忙,稍后再试"); } out.close(); }else if("/web04/delEmpServlet.action".equals(uri)){ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); PrintWriter out = response.getWriter(); try{ EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO"); dao.del(id); response.sendRedirect("listEmpServlet.action"); }catch(Exception e){ e.printStackTrace(); }finally{ } out.close(); }else if("/web04/listEmpServlet.action".equals(uri)){ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); try{ out.println("<table border=1>"); out.println("<tr><td>ID</td><td>NAME</td><td>SAL</td><td>AGE</td><td>操作</td></tr>"); EmpDAO dao = (EmpDAO)Factory.GetInstance("EmpDAO"); List<Emp> emps = dao.findAll(); for(int i=0;i<emps.size();i++){ Emp emp = emps.get(i); int id =emp.getId(); String name = emp.getName(); double sal = emp.getSalary(); int age = emp.getAge(); out.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"+sal+"</td><td>"+age+"</td><td><a href=\"delEmpServlet.action?id="+id+"\">删除</a><a href=\"loadEmpServlet.action?id="+id+"\"> 修改</a></td></tr>"); } out.println("</table>"); out.println("<a href=\"addEmp.html\">添加新员工</a>"); }catch(Exception e){ e.printStackTrace(); } out.close(); }else if("/web04/loadEmpServlet.action".equals(uri)){ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); PrintWriter out = response.getWriter(); try{ EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO"); Emp emp = dao.findById(id); if(emp != null){ out.println("<form action=\"updateEmpServlet.action?id="+id+"\" method=\"post\">"); out.println("id:"+id+"<br/>"); String name = emp.getName(); double sal = emp.getSalary(); int age = emp.getAge(); out.println("Name:<input type=\"text\" value="+name+" name=\"name\"/ ><br/>"); out.println("Sal:<input type=\"text\" value="+sal+" name=\"sal\" /><br/>"); out.println("Age:<input type=\"text\" value="+age+" name=\"age\" /><br/>"); out.println("<input type= \"submit\" value=\"修改\">"); out.println("</form>"); } }catch(Exception e){ e.printStackTrace(); } out.close(); }else if("/web04/updateEmpServlet.action".equals(uri)){ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); String name = request.getParameter("name"); double salary = Double.parseDouble(request.getParameter("sal")); int age = Integer.parseInt(request.getParameter("age")); PrintWriter out = response.getWriter(); Emp e = new Emp(); try{ EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO"); e.setId(id); e.setName(name); e.setSalary(salary); e.setAge(age); dao.update(e); response.sendRedirect("listEmpServlet.action"); }catch(Exception ex){ ex.printStackTrace(); } out.close(); } } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>action</servlet-name> <servlet-class>action.actionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <form action="addEmpServlet.action" method="post"> <fieldset> <legend>基本信息</legend> 姓名:<input type="text" name = "name" /><br/> 年龄:<input type="text" name = "age" /><br/> <!-- 性别:<input type="checkbox" name="sex" value="M" /> <label for="r1">男</label> <input type="checkbox" name="sex" value="F"/> <label for="c1">女</label><br/> --> 工资:<input type="text" name = "sal" /><br/> <input type= "submit" value="提交"> </fieldset> <input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页"> </form> </body> </html>