作用: 将代码根据不同的功能进行分层开发(分层也就是不同的包)。
特点:
降低代码的冗余,提高代码的重用性。
提高了代码的阅读性。
便于后期的维护升级。
降低代码之间的耦合度。
概念:
M:Model模型(service+dao+pojo)。
V:View视图(HTML页面+JSP页面)。
C:Controller控制器(Servlet)。
使用: MVC分层开发落地的使用,也就是创建不同的包,然后在不同的包中写功能不同的代码。具体的包结构如下:
com.zqwl.controller 编写Servlet代码
com.zqwl.service 编写业务层的接口
com.zqwl.service.impl 编写业务层的实现类
com.zqwl.dao 编写持久层的接口
com.zqwl.dao.impl 编写持久层的接口实现类
com.zqwl.pojo 编写实体类
javaBean:一种类的规格编写规范
javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后提供获取属性和设置属性的get/set方法。
JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。
以entity,domain,vo,pojo命名的包,包中的类都满足javaBean的规范。
Entity
在entity包下面的实体类中所有的属性和数据库表中的字段,数据类型逐一对应。
如数据库中字段是user_id,user_name;Java中也只有这两个属性(和数据库表中字段保持一致)。
domain
domain包下实体类中的属性不仅会包含数据库中的字段,还会包含其他自定义属性。
如数据库中字段是user_id,user_name;Java中不仅有这两个属性,且还有其它属性。pojo(Plain Old Java Objects,普通 Java 对象)
pojo包下面的实体类并没有严格定义。
vo(view object)
vo包下面的实体类的属性与数据库并没有关系,而是服务器与页面交互的视图数据(后台和前端进行交互的数据类)。
分层后各个层的作用及代码调用情况:
在一个项目中我们可以写多个Servlet去处理不同的请求。由于业务需求,可能会出现多个Servlet配合完成某一项功能。这就需要用到请求转发
public class AServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("AServlet执行了");
//请求对象中存储数据
req.setAttribute("aa","123");
//请求转发
//1.获取请求转发器,参数为转发的路径
RequestDispatcher rd = req.getRequestDispatcher("/b");
//2.完成转发,(使用同一个请求和响应对象)
rd.forward(req,resp);
}
}
浏览器发起请求访问服务器,服务器接收到请求,解析请求,创建请求和响应对象,执行Servlet中service方法时,
将请求和响应对象传递给service方法中。
req:
创建:请求到达服务器,执行servlet的service执行
销毁:响应回到浏览器
请求转发是一次请求,地址栏地址不变。
请求转发是一次请求(共享请求和响应对象),所以转发内的各个Servlet共享一个request对象。
请求转发是Tomcat服务器内部的行为,用户是看不到的。
可以使用req.setAttribute(key,value)和getAttribute(key)实现请求转发内的Servlet的数据的流转。
注意:在学习的请求转发后,每个Servlet的访问方式就会有两种:
浏览器直接发起请求访问。
其他Servlet通过请求转发访问。
请求转发因为地址栏不会改变,可能会造成多次重复提交的问题
请求重定向也可以实现多个Servlet配合完成某一项功能
public class CServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("CServlet执行了");
//请求对象存储数据
req.setAttribute("aa","123");
//请求重定向
//通过方法获取项目名称
String contextPath = req.getContextPath();
System.out.println(contextPath);
//重定向之前要拼接上项目名,否则找不到文件
resp.sendRedirect(contextPath+"/d");
}
}
重定向是两次请求,地址栏信息改变,地址从第一次请求的地址变成第二次请求的地址。
重定向的地址是浏览器收到第一次请求响应回来的地址,自动跳转的,用户不参与。以302状态响应回到浏览器。第一次的请求和响应对象都销毁了.
浏览器接收到重定向的响应后,重新发送请求到下一个Servlet对象,接收到请求后,处理请求,完成响应
重定向的两次请求,request对象是不同的。
区别 | 转发 | 重定向 |
---|---|---|
浏览器地址栏发生是否改变 | 否 | 是 |
请求与响应的次数 | 1次请求,1次响应 | 2次请求,2次响应 |
是否共享Request和Response对象 | 是 | 否 |
是否可以通过Request对象传递数据 | 是 | 否 |
速度 | 相对较快 | 相对较慢 |
行为类型 | 服务器内部行为 | 非服务器内部行为 |
如果你需要将A Servlet的处理结果通过请求对象带到B Servlet中去使用,那就使用请求转发。
如果A Servlet的处理结果不需要带到B Servlet中去使用,那就使用重定向。
http协议为无状态的,浏览器发起请求(请求中一般是需要携带数据的),服务器接收到请求后调用相关的后端代码去处理该请求,处理完后会响应浏览器。 本次请求与响应结束后,相关的请求与响应数据就会销毁。
当需求是让下次请求再次用到上次请求传递过的数据时,就不行了,所以要使用Cookie
客户端存储数据的技术。
服务器决定哪些数据是以后的请求也会用到的。
服务器以响应的方式告诉浏览器将常用的这些数据存储起来,存储在浏览器端。
浏览器以后每次发送请求的时候需要带上这些存储起来的数据。
Cookie是浏览器端的数据存储技术。
Cookie使用字符串存储数据。
Cookie使用Key与Value结构存储数据。
不安全,不适合存储重要的数据到浏览器端,因为会被看到(F12中的Cookie中可以看到)。
单个Cookie存储数据大小限制在4097个字节(4kb左右)。
Cookie存储的数据中不支持中文,Servlet4.0中支持。
Cookie分为持久化Cooke与状态Cookie。(通过设置存在时间MaxAge)
Cookie对象保存在客户端浏览器内存或系统磁盘中。
浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同,Chrome浏览器为50个
浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。
Cookie是与域名绑定所以不支持跨一级域名访问。
public class CookieServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.创建Cookie对象
// 参数为键值对
Cookie cookie1 = new Cookie("name","zs");
Cookie cookie2 = new Cookie("pwd","123");
Cookie cookie3 = new Cookie("hobby","sing");
//设置Cookie存活时间
//60秒*60 = 一个小时
cookie1.setMaxAge(60*60);
cookie2.setMaxAge(60*60);
cookie3.setMaxAge(60*60);
//设置哪些资源可以使用Cookie
cookie1.setPath("/");//Tomcat中所有项目都可以使用
cookie2.setPath("/_JavaEE_Day03_war_exploded");//_JavaEE_Day03_war_exploded下
cookie3.setPath("/_JavaEE_Day03_war_exploded/login.html");//只有_JavaEE_Day03_war_exploded工程下的login.html可以使用
//设置哪些域名可以访问
cookie3.setDomain("127.0.0.1");
//将Cookie添加到响应对象中
resp.addCookie(cookie1);
resp.addCookie(cookie2);
resp.addCookie(cookie3);
}
}
http协议为无状态协议 Cookie: 浏览器发起请求到服务器,服务器创建Cookie,在Cookie中存储数据,响应回到浏览器,浏览器会将Cookie存储在客户端 浏览器再次发送请求,会自动携带Cookie到服务器 存活时间的设置:MaxAge 1.默认:浏览器的本次会话,浏览器不关闭,Cookie不会销毁。 2.设置存活时间: 正数:指定秒数后销毁 持久化Cookie 负数:(默认) :浏览器关闭时销毁 0:立即销毁 设置哪些资源可以使用Cookie:Path 1./部署的项目名(默认的) :当前部署的项目中的所有资源可以使用 2./ :当前的Tomcat中部署的所有项目都可以使用 3./部署的项目名/资源名 :只有当前资源可以使用 设置哪些域名可以使用Cookie:DoMain 1.默认 :访问时的域名 2.允许二级域名跨域:.lsh.com -> www.lsh.com aaa.lsh.com 3.不允许一级域名跨域:www.lsh.com -> aaa.lsh.com 注意: localhost 和 127.0.0.1 也为跨域 访问时的端口号不同也为跨域 未完待续