DispatcherServlet程序类
MVC的本质含义:
- 所有用户的请求使用Servlet统一进行处理
- 处理后的结果发给JSP进行显示
- 同时使用EL+JSTL简化Scriptlet
- 任何的一次提交都不要直接到jsp页面,必须经过Servlet
MVC模式中将请求交给Servlet处理的原因
1. Servlet可以实现数据的验证处理
2. 可以对数据进行一些先期的处理
3. Servlet是纯粹的Java程序,可以使用更多的可重用设计,简化代码
4. Servlet可以使用request属性,传递显示内容到JSP页面(请求转发)
多业务支持
概念:是指一个Servlet可以处理不同的用户操作
1. 不管程序使用了多少开发技术,要进行WEB的请求处理,只能使用Servlet中的doGet(), doPost(),两个方法实现
2. 要实现多业务的操作处理,最简单方案是在每次发送请求的时候设置一个请求标志位
初步实现
@WebServlet(urlPatterns="/empservlet")
//列表操作:http://localhost:8080/myproject/empservlet?status=list
//修改操作:http://localhost:8080/myproject/empservlet?status=edit
//增加操作:http://localhost:8080/myproject/empservlet?status=add
public class EmpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String urlPage = "/errors.jsp";
String status = req.getParameter("status");
if(status!=null && "".equals(status)){
if("add".equals(status)){//有状态码,区分不同的用户请求
urlPage = this.add(req,resp);
}else if("edit".equals(status)){
urlPage = this.edit(req,resp);
}else if("list".equals(status)){
urlPage = this.list(req,resp);
}
}
req.getRequestDispatcher(urlPage).forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{
this.doGet(req,resp);
}
public String list(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
System.out.println("*****【Servlet输出】列表雇员信息");
return "/emp_list.jsp";
}
public String add(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
System.out.println("*****【Servlet增加】列表雇员信息");
return "/forward.jsp";
}
public String edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
System.out.println("*****【Servlet修改】列表雇员信息");
return "/forward.jsp";
}
}
不能使用?的形式完成的原因
1. 如果使用了地址重写处理参数,那么这个"?"对于整个程序的设计非常致命
2. 如果使用了表单提交,意味着还需要传递一个隐藏域表示状态