MVC设计模式
MVC设计模式,并不是代码上写法的设计模式,和单例模式、工厂模式是不一样的
是一种应用的模型分类
MVC 模式将应用分为模型、视图和控制器三个部分:
-
视图(View):数据的展现。 页面的显示jsp只是一个模板引擎
视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。 -
模型(Model):应用对象。 模型pojo实体类
模型是应用程序的主体部分。 模型代表了业务数据和业务逻辑; 当数据发生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。 -
控制器(Controller):逻辑处理、控制实体数据在视图上展示、调用模型处理业务请求。 Servlet
当 Web 用户单击 Web 页面中的提交按钮来发送 HTML 表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
MVC设计模式是什么?
要求我们去遵循一个规则,所有的请求都必须通过servlet,然后在访问页面。
例如,web-inf路径下不能被直接访问,但是可以通过servlet转发访问到。
怎么遵循,就出现了一个web-inf的文件夹了,所以使用web-inf存放jsp页面,就可以严格遵循mvc设计模式了。
WebContent:是可以直接访问页面的(jsp放在WebContent地下的话,可以直接访问)
WEB-INF:不能直接访问页面、可以通过servlet转发来访问
package day47;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/WebServletTest")
public class WebServletTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp);
}
}
Cookie介绍
cookie就是一段文本,它存储在客户端(通常来说是浏览器)。
你可以把cookie当作一个map,里边是键值对,每个键值对有 过期时间、域、路径、脚本可否访问等描述信息;
描述信息存储在客户端,客户端请求时,默认会带上cookie的名称和值,不会带描述信息,通过http请求报文header中的cookie项进行传输;
服务器响应时,可以设置cookie信息,就在http响应报文的header中Set-Cookie项;
- 特點
- cookie是保存在浏览器(本地)
- cookie每次请求都会带上
- cookie分类 会话cookie 和持久cookie
- cookie设置方式
前端依赖js维护。
后端通过响应维护。
Cookie分类
- 会话cookie http是一个无状态请求吗
如果不设置过期时间,则表示这个 cookie 生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie 就消失了,因为丢失了jsessionid - 持久cookie
如果设置过期时间,则表示这个 cookie 生命周期按照过期时间而过期
7天免登陆
1、把session时效设置为7天、
2、把jsessionid从会话cookie改为持久化cookie,持久化cookie时效是7天
cP1:
package day47;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/PersistenceCookie")
public class PersistenceCookie extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 持久化cookie
// 后端通过响应维护
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(30);// 设置Cookie的有效期//你要设置一个持久化的cookie就要设置有效期/单位:seconds 秒
// 设置cookie的使用路径,页面访问的使用路径
// cookie.setPath("/day47");//可在同一应用服务器内共享方法:设置cookie.setPath("/");
//cookie.setdomain();//相同域名下共享cookie
resp.addCookie(cookie);// 向浏览器返回cookie信息
}
}
cP2:
package day47;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Test1Servlet")
public class Test1Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//用于读取cookie的信息
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
}
}