阶段四-JavaEE-Day03

一、MVC分层开发

2. MVC分层开发模式的使用

作用: 将代码根据不同的功能进行分层开发(分层也就是不同的包)。

特点:

  1. 降低代码的冗余,提高代码的重用性。

  2. 提高了代码的阅读性。

  3. 便于后期的维护升级。

  4. 降低代码之间的耦合度。

概念:

  • 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 编写实体类

  1. javaBean:一种类的规格编写规范

    javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后提供获取属性和设置属性的get/set方法。

    JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。

    以entity,domain,vo,pojo命名的包,包中的类都满足javaBean的规范。

  2. Entity

    在entity包下面的实体类中所有的属性和数据库表中的字段,数据类型逐一对应。

    如数据库中字段是user_id,user_name;Java中也只有这两个属性(和数据库表中字段保持一致)。

  3. domain

    domain包下实体类中的属性不仅会包含数据库中的字段,还会包含其他自定义属性。

    如数据库中字段是user_id,user_name;Java中不仅有这两个属性,且还有其它属性。pojo(Plain Old Java Objects,普通 Java 对象)

  4. pojo包下面的实体类并没有严格定义。

  5. vo(view object)

vo包下面的实体类的属性与数据库并没有关系,而是服务器与页面交互的视图数据(后台和前端进行交互的数据类)。

 分层后各个层的作用及代码调用情况:

阶段四-JavaEE-Day03_第1张图片

二、请求转发和请求重定向

1. 请求转发

 在一个项目中我们可以写多个Servlet去处理不同的请求。由于业务需求,可能会出现多个Servlet配合完成某一项功能。这就需要用到请求转发

阶段四-JavaEE-Day03_第2张图片

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执行
         销毁:响应回到浏览器

2. 请求转发的特点

  1. 请求转发是一次请求,地址栏地址不变

  2. 请求转发是一次请求共享请求和响应对象),所以转发内的各个Servlet共享一个request对象。

  3. 请求转发是Tomcat服务器内部行为用户是看不到的。

  4. 可以使用req.setAttribute(key,value)和getAttribute(key)实现请求转发内的Servlet的数据的流转

  5. 注意:在学习的请求转发后,每个Servlet的访问方式就会有两种:

    1. 浏览器直接发起请求访问

    2. 其他Servlet通过请求转发访问

3. 请求重定向

请求转发因为地址栏不会改变,可能会造成多次重复提交的问题

请求重定向也可以实现多个Servlet配合完成某一项功能

阶段四-JavaEE-Day03_第3张图片

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");
    }
}

4. 请求重定向的特点

  1. 重定向是两次请求地址栏信息改变,地址从第一次请求的地址变成第二次请求的地址。

  2. 重定向的地址是浏览器收到第一次请求响应回来的地址,自动跳转的,用户不参与。以302状态响应回到浏览器。第一次的请求和响应对象都销毁了.

  3. 浏览器接收到重定向的响应后,重新发送请求到下一个Servlet对象,接收到请求后,处理请求,完成响应

  4. 重定向的两次请求,request对象是不同的。

5.请求转发与请求重定向的总结

区别 转发 重定向
浏览器地址栏发生是否改变
请求与响应的次数 1次请求,1次响应 2次请求,2次响应
是否共享Request和Response对象
是否可以通过Request对象传递数据
速度 相对较快 相对较慢
行为类型 服务器内部行为 非服务器内部行为

如果你需要将A Servlet的处理结果通过请求对象带到B Servlet中去使用,那就使用请求转发。

如果A Servlet的处理结果不需要带到B Servlet中去使用,那就使用重定向。

三、Cookie对象

1. Cookie的引入

http协议为无状态的,浏览器发起请求(请求中一般是需要携带数据的),服务器接收到请求后调用相关的后端代码去处理该请求,处理完后会响应浏览器。 本次请求与响应结束后,相关的请求与响应数据就会销毁。
当需求是让下次请求再次用到上次请求传递过的数据时,就不行了,所以要使用Cookie 

2.Cookie使用特点:

  1. 客户端存储数据的技术。

  2. 服务器决定哪些数据是以后的请求也会用到的。

  3. 服务器响应的方式告诉浏览器将常用的这些数据存储起来,存储在浏览器端。

  4. 浏览器以后每次发送请求的时候需要带上这些存储起来的数据

3. Cookie本身特点

  1. Cookie是浏览器端的数据存储技术。

  2. Cookie使用字符串存储数据。

  3. Cookie使用Key与Value结构存储数据。

  4. 不安全,不适合存储重要的数据到浏览器端,因为会被看到(F12中的Cookie中可以看到)。

  5. 单个Cookie存储数据大小限制在4097个字节(4kb左右)。

  6. Cookie存储的数据中不支持中文,Servlet4.0中支持。

  7. Cookie分为持久化Cooke状态Cookie。(通过设置存在时间MaxAge)

  8. Cookie对象保存在客户端浏览器内存或系统磁盘中。

  9. 浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同,Chrome浏览器为50个

  10. 浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端

  11. Cookie是与域名绑定所以支持跨一级域名访问。

4. 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 也为跨域
           访问时的端口号不同也为跨域


未完待续

你可能感兴趣的:(java学习之路,java-ee,java)