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 }
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 }
温壶月光当茶饮


浙公网安备 33010602011771号