一、开发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 Listemps = dao.findAll(); 13 pw.println(" "); 14 pw.println("
"); 19 pw.println(" 添加员工"); 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"); 15 for(Employee e:emps){ 16 pw.println(" 编号 姓名 操作 "); 17 } 18 pw.println(" "+e.getId()+" "+e.getName()+" 修改删除 "); 48 pw.println("id:"+e.getId()); 49 pw.println("name: "); 50 pw.println("age: "); 51 pw.println("salary: "); 52 if(e.getGender()=='f'){ 53 pw.println("gender: 女 "); 54 pw.println("gender: 男 "); 55 }else{ 56 pw.println("gender: 女 "); 57 pw.println("gender: 男 "); 58 } 59 pw.println("hobby:"); 60 if(e.getHobby().contains("1")){ 61 pw.println(" 读书 "); 62 }else{ 63 pw.println(" 读书 "); 64 } 65 if(e.getHobby().contains("2")){ 66 pw.println(" 音乐"); 67 }else{ 68 pw.println(" 音乐 "); 69 } 70 if(e.getHobby().contains("3")){ 71 pw.println(" 电影 "); 72 }else{ 73 pw.println(" 电影"); 74 } 75 pw.println(" "); 76 pw.println("loc: "); 91 pw.println(" "); 92 pw.println(""); 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