一、开发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 }