Servlet容器对路径的处理

Servlet容器对路径的处理

一.重定向

如何实现重定向:

  //重定向到查询页面:
  //建议浏览器自己去访问查询页面
  //当前:/EmpManager/addEmp.do
  //目标:/EmpManager/findEmp.do
  res.sendRedirect("findEmp.do");

二.访问路径

1.部署及路径的关系

2.如何获取路径

  • 项目名: getContextPath()
  • 访问路径(网名): getServletPath()
  • URI(绝对路径): getRequestURI()
  • URL(完整路径): getRequestURL()

3.URI和URL的区别

1)狭义的理解

  • 单纯的在Java项目中理解
  • URI: 绝对路径
  • URL: 完整路径

URL包含了URI

2)广义的理解(*)

  • 在所有的WEB项目中理解
  • URI: 资源的名称(刘苍松/苍老师/二蛋/松/cang#null)
  • URL: 资源的真名(刘苍松)
  • URI包含了URL

4.如何配置Servlet访问路径

4.1精确匹配(/abc)

  • 只有"/abc"可以访问该Servlet
  • 该Servlet只能处理这一个请求

适合请求总数很少的小项目

4.2通配符(/*)

  • 所有的路径都可以访问该Servlet
  • 该Servlet能处理所有的请求
  • 适合使用一个组件处理所有的请求
  • 通配符不能获得网名(getServletPath())

4.3后缀(*.emp)

  • 所有以emp为后缀的请求都可以访问该Servlet
  • 该Servlet能处理很多请求

适合使用多个组件处理所有的请求

5.如何使用一个Servlet处理多个请求

 1 package web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.List;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 import dao.EmpDao;
13 import entity.Emp;
14 
15 /**
16  * 路径规范:
17  * 查询员工: /findEmp.do
18  * 增加员工: /addEmp.do
19  */
20 public class MainServlet extends HttpServlet {
21 
22     @Override
23     protected void service(
24         HttpServletRequest req,
25         HttpServletResponse res)
26         throws IOException, ServletException{
27         //获取请求路径
28         String p = req.getServletPath();
29         //根据规范处理路径
30         if("/findEmp.do".equals(p)) {
31             findEmp(req,res);
32         } else if("/addEmp.do".equals(p)) {
33             addEmp(req,res);
34         } else {
35             throw new RuntimeException("查无此页");
36         }
37     }
38     
39     protected void findEmp(
40         HttpServletRequest req, 
41         HttpServletResponse res) throws ServletException, IOException {
42         //查询所有的员工
43         EmpDao dao = new EmpDao();
44         List<Emp> list = dao.findAll();
45         //向浏览器输出响应信息
46         res.setContentType(
47             "text/html;charset=utf-8");
48         PrintWriter out = res.getWriter();
49         //当前:/EmpManager/findEmp
50         //目标:/EmpManager/add_emp.html
51         out.println("<a href='add_emp.html'>增加</a>");
52         out.println("<table border='1' cellspacing='0' width='30%'>");
53         out.println("    <tr>");
54         out.println("        <td>编号</td>");
55         out.println("        <td>姓名</td>");
56         out.println("        <td>职位</td>");
57         out.println("        <td>薪资</td>");
58         out.println("    </tr>");
59         if(list != null) {
60             for(Emp e : list) {
61                 out.println("<tr>");
62                 out.println("    <td>"+e.getEmpno()+"</td>");
63                 out.println("    <td>"+e.getEname()+"</td>");
64                 out.println("    <td>"+e.getJob()+"</td>");
65                 out.println("    <td>"+e.getSal()+"</td>");
66                 out.println("</tr>");
67             }
68         }
69         out.println("</table>");
70         out.close();
71     }    
72     
73     protected void addEmp(
74         HttpServletRequest req, 
75         HttpServletResponse res) throws ServletException, IOException {
76         req.setCharacterEncoding("utf-8");
77         //接收浏览器传入的数据
78         String ename = req.getParameter("ename");
79         String job = req.getParameter("job");
80         String sal = req.getParameter("sal");
81         //增加保存这些数据
82         Emp e = new Emp();
83         e.setEname(ename);
84         e.setJob(job);
85         if(sal != null && !sal.equals("")) {
86             e.setSal(new Double(sal));
87         }
88         new EmpDao().save(e);
89         //重定向到查询页面:
90         //建议浏览器自己去访问查询页面
91         //当前:/EmpManager/addEmp.do
92         //目标:/EmpManager/findEmp.do
93         res.sendRedirect("findEmp.do");
94     }    
95     
96 }
View Code
 1 package web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.List;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 import dao.EmpDao;
13 import entity.Emp;
14 
15 public class FindEmpServlet extends HttpServlet {
16 
17     @Override
18     protected void service(
19         HttpServletRequest req, 
20         HttpServletResponse res) throws ServletException, IOException {
21         //查询所有的员工
22         EmpDao dao = new EmpDao();
23         List<Emp> list = dao.findAll();
24         //向浏览器输出响应信息
25         res.setContentType(
26             "text/html;charset=utf-8");
27         PrintWriter out = res.getWriter();
28         //当前:/EmpManager/findEmp
29         //目标:/EmpManager/add_emp.html
30         out.println("<a href='add_emp.html'>增加</a>");
31         out.println("<table border='1' cellspacing='0' width='30%'>");
32         out.println("    <tr>");
33         out.println("        <td>编号</td>");
34         out.println("        <td>姓名</td>");
35         out.println("        <td>职位</td>");
36         out.println("        <td>薪资</td>");
37         out.println("    </tr>");
38         if(list != null) {
39             for(Emp e : list) {
40                 out.println("<tr>");
41                 out.println("    <td>"+e.getEmpno()+"</td>");
42                 out.println("    <td>"+e.getEname()+"</td>");
43                 out.println("    <td>"+e.getJob()+"</td>");
44                 out.println("    <td>"+e.getSal()+"</td>");
45                 out.println("</tr>");
46             }
47         }
48         out.println("</table>");
49         out.close();
50     }
51 
52 }
View Code

 

posted @ 2017-04-24 14:49  等你,在雨中  阅读(298)  评论(0)    收藏  举报