简介
- 本文是2021/06/09整理的笔记
- 赘述可能有点多,还请各位朋友耐心阅读
- 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进
1.什么是 MVC
Model View Controller 模型视图控制器 软件架构的一种设计模式,最初用在桌面应用中
2.MVC 的作用
1.V:视图 提供用户交互页面
2.model 模型 封装数据 实现业务逻辑 返回结果给控制器
3.C:控制器 接收用户请求 调用模型处理数据 选择视图 显示给用户
3.MVC 的优势
1.耦合性低:视图层和业务层分离,耦合性降低,可以独立修改;
2.重用性高:可以用不同的视图访问模型部分,实现在不同终端上访问应用;
3.可维护性高:视图与业务分离,降低了维护成本;
如何实现 MVC 模式?
V:JSP
C:Servlet
M:Java 类
1.Service:业务层
2.Dao:数据访问层
3.Domain:实体类
视图和控制器之间如何共享数据?
Servlet 与 JSP 共享数据
请求/会话/上下文作用域 setAttribute 设置属性共享数据
原则:使用范围的作用域
好处:1.能够避免资源浪费
2.防止安全性降低
采用:请求作用域 request.setAttribute 设置属性共享数据 请求转发 jsp:request.getAttribute(name)
视图和控制器之间如何跳转?
3 种:
1.response.sendRedirect(location)响应重定向 2 次请求,不能从请求属性中共享数据
2.request.getRequestDispatcher(location).forward(request,response)请求转发 1 次请求 服务器内部
转发 同一个请求 能从请求属性共享数据 使用场景多
3.request.getRequestDispatcher(location).include(request,response)动态包含 1 次请求 服务器内部
转发 同一个请求 能从请求属性共享数据
1.解决重复提交
1.jsp
session.setAttribute("token",String.value(System.nanoTime()));
2.jsp
<input type="hidden" name="token" value="<%=session.getAttribute("token")%>"/>
3.servlet
//取出 hidden 的值
String token1=request.getParamenter("token");
//取出 session 的值
String token2=(String)request.getSession().getAttribute("token");
//比对
if(token1==null || token2==null || !token1.equals(token2)){
//重复提交
}
else{
request.getSession().removeAttribute("token");
//提交成功
}
2.使用单一控制器模式
1.新建 StudentServlet url-pattern:/StudentServlet/* 2.String uri=request.getRequestURI();
3.String op=uri.substring(uri.lastIndexOf("/")+1);
4.if(op.equals(“add”)){add(request,response)