一、开发web项目的步骤:
1:创建Web Project
2:导入第三方jar包,和数据库相应的脚本文件等
3:添加配置文件,db.properties
4:编写工具类,DBUtil等
5:根据Dao思想编写相应代码
包含:
实体类,接口,实现类
6:编写业务层的代码----(M层:model,包含持久层和业务层)
7:编写Servlet组件。(C层:controller,控制层)
8:配置web.xml文件
测试部分:
第一步:启动服务器tomcat
第二步: 将项目部署到服务器上(代码更新,需要重新部署)
第三步: 在浏览器上输入请求路径。
二、容器处理请求资源路径的问题:
1:什么是请求资源路径??
http://localhost:8088/appName/xx.html;
中 /appName/xx.html 是请求资源路径。
2:容器如何处理请求资源路径
(1)浏览器通过IP,Port向容器发送请求,建立连接。
(2)根据appName找到服务器内对应的应用程序,再根据 xx.html(里面action=“url")去匹配web.xml中的<url-pattern>的值。
匹配成功后,去执行对应的web组件。
3:精确匹配。
容器在处理请求资源路径时,先会严格精确 的找<url-pattern>的值,如 请求资源
路径为:appName/addEmp.html,会先 查找<url-pattern>的值有没有一个是addEmp.html;
如果有,就会执行相应的web组件
(即使此时有addEmp.html页面,也不会显示页面)
4:通配符匹配。
*:可以匹配n个任何字符,
如果<url-pattern>的值为 /*,表示任何请求资源路径
都会执行此web组件。
reg:
http://ip:port/appName/abc
http://ip:port/appName/abc.html
http://ip:port/appName/abc/abc.html
5:后缀匹配.
如果<url-pattern>的值为 *. 后缀,此时一定不能在*前添加 " / "。
当请求资源路径为此后缀的格式时,就会执行对 应的web组件
reg:
<url-pattern>*.do<url-pattern>
请求资源路径:
http://ip:port/appName/abc.do
http://ip:port/appName/abc/abc.do
6:无匹配的servlet处理
如果请求资源路径在web.xml中无任何匹配,那么就会查找
是否有此文件。如果有,将文件响应给浏览器,如果没有,
报404错误。
总结:三种匹配的优先级:
精确匹配>通配符匹配>后缀匹配
Servlet组件的合并问题
1:为什么要合并?
因为Servlet组件充当的是控制器的角色,通过分析资源路径,
用来分发不同的资源。所以,一个Servlet组件 就可以做到分发不同的资源。
2:如何合并?
request.getRequestURI():此方法返回的 是请求资源路径,我们可以使用分支结构来进行控制
资源的分发。
reg:
String path =request.getRequestURI();
if(path.equals("/appName/listEmp.do")){
//组件的内容
}else if(path.equals("/appName/deleteEmp.do")){
//组件内容
}
二、采用后缀匹配-------------- .emp
1 public class EmpServlet extends HttpServlet {
2 public void service(HttpServletRequest request, HttpServletResponse response)
3 throws ServletException, IOException {
4 //获取请求资源路径
5 request.setCharacterEncoding("utf-8");
6 response.setContentType("text/html;charset=utf-8");
7 PrintWriter pw = response.getWriter();
8 EmployeeDao dao = DaoFactory1.getInstance();
9
10 String path = request.getRequestURI();
11 if("/ServletDay05/listEmp.emp".equals(path)){
12 List<Employee> emps = dao.findAll();
13 pw.println("<table border='1px'>");
14 pw.println("<tr><td>编号</td><td>姓名</td><td>操作</td></tr>");
15 for(Employee e:emps){
16 pw.println("<tr><td>"+e.getId()+"</td><td>"+e.getName()+"</td><td><a href='toUpdate.emp?id="+e.getId() +"'>修改</a><a href='delete.emp?id="+e.getId()+"'>删除</a></td></tr>");
17 }
18 pw.println("</table>");
19 pw.println("<a href='addEmp.html'>添加员工</a>");
20 pw.close();
21 }else if("/ServletDay05/addEmp.emp".equals(path)){
22 String name = request.getParameter("name");
23 int age = Integer.parseInt(request.getParameter("age"));
24 double salary = Double.parseDouble(request.getParameter("salary"));
25 char gender = request.getParameter("gender").charAt(0);
26 String[] h1 = request.getParameterValues("hobby");
27 String hobby = "";
28 for(int i=0;i<h1.length;i++){
29 if(i<h1.length-1){
30 hobby+=h1[i]+",";
31 }else{
32 hobby+=h1[i];
33 }
34 }
35 String loc = request.getParameter("loc");
36 Employee e = new Employee(name, age, salary, gender, hobby, loc);
37 dao.addEmployee(e);
38 response.sendRedirect("listEmp.emp");
39 }else if("/ServletDay05/delete.emp".equals(path)){
40 int id = Integer.parseInt(request.getParameter("id"));
41 dao.deleteById(id);
42 response.sendRedirect("listEmp.emp");
43 }else if("/ServletDay05/toUpdate.emp".equals(path)){
44 int id = Integer.parseInt(request.getParameter("id"));
45 //通过ID查询此员工的所有信息
46 Employee e = dao.findById(id);
47 pw.println("<form action='save.emp?id="+e.getId()+"' method='post'>");
48 pw.println("id:"+e.getId());
49 pw.println("name:<input name='name' value='"+e.getName()+"'><br>");
50 pw.println("age:<input name='age' value='"+e.getAge()+"'><br>");
51 pw.println("salary:<input name='salary' value='"+e.getSalary()+"'><br>");
52 if(e.getGender()=='f'){
53 pw.println("gender:<input type='radio' checked name='gender' value='f'>女<br>");
54 pw.println("gender:<input type='radio' name='gender' value='m'>男<br>");
55 }else{
56 pw.println("gender:<input type='radio' name='gender' value='f'>女<br>");
57 pw.println("gender:<input type='radio' checked name='gender' value='m'>男<br>");
58 }
59 pw.println("hobby:");
60 if(e.getHobby().contains("1")){
61 pw.println("<input type='checkbox' checked name='hobby' value='1'/>读书 ");
62 }else{
63 pw.println("<input type='checkbox' name='hobby' value='1'/>读书 ");
64 }
65 if(e.getHobby().contains("2")){
66 pw.println("<input type='checkbox' checked name='hobby' value='2'/>音乐");
67 }else{
68 pw.println("<input type='checkbox' name='hobby' value='2'/>音乐 ");
69 }
70 if(e.getHobby().contains("3")){
71 pw.println("<input type='checkbox' checked name='hobby' value='3'/>电影 ");
72 }else{
73 pw.println("<input type='checkbox' name='hobby' value='3'/>电影");
74 }
75 pw.println("<br>");
76 pw.println("loc:<select name='loc'>");
77 if(e.getLoc().equals("cc")){
78 pw.println("<option selected value='cc'>长春</option>");
79 pw.println("<option value='wh'>武汉</option>");
80 pw.println("<option value='gx'>广西</option>");
81 }else if(e.getLoc().equals("wh")){
82 pw.println("<option value='cc'>长春</option>");
83 pw.println("<option selected value='wh'>武汉</option>");
84 pw.println("<option value='gx'>广西</option>");
85 }else{
86 pw.println("<option value='cc'>长春</option>");
87 pw.println("<option value='wh'>武汉</option>");
88 pw.println("<option selected value='gx'>广西</option>");
89 }
90 pw.println("</select>");
91 pw.println("<input type='submit' value='保存'>");
92 pw.println("</form>");
93 }else if("/ServletDay05/save.emp".equals(path)){
94 int id = Integer.parseInt(request.getParameter("id"));
95 String name = request.getParameter("name");
96 int age = Integer.parseInt(request.getParameter("age"));
97 double salary = Double.parseDouble(request.getParameter("salary"));
98 char gender = request.getParameter("gender").charAt(0);
99 String[] h1 = request.getParameterValues("hobby");
100 String hobby = "";
101 for(int i=0;i<h1.length;i++){
102 if(i<h1.length-1){
103 hobby+=h1[i]+",";
104 }else{
105 hobby+=h1[i];
106 }
107 }
108 String loc = request.getParameter("loc");
109 Employee e1 = new Employee(id, name, age, salary, gender, hobby, loc);
110
111 dao.modify(e1);
112 //重定向
113 response.sendRedirect("listEmp.emp");
114 }
115 }
116 }