Java服务器端小应用Day_03

MVC分层开发

原因代码量越来越大,将所有的代码都写在main方法中,会造成代码的阅读性比较差,代码的可重用性比较差。

MVC分层开发模式的使用

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

特点:

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

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

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

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

概念:

  • M:Model模型(service+dao+pojo)。

  • V:View视图(HTML页面+JSP页面)。

  • C:Controller控制器(Servlet)。

- com.zqwl.controller		   编写Servlet代码
- com.zqwl.service				编写业务层的接口
- com.zqwl.service.impl	   编写业务层的实现类
- com.zqwl.dao		              编写持久层的接口
- com.zqwl.dao.impl             编写持久层的接口实现类
- com.zqwl.pojo			         编写实体类

请求转发和请求重定向

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

例如:访问AServlet处理请求,AServlet处理完成后,还需要BServlet处理请求,由BServlet向浏览器响应。此时就需要多个Servlet配合完成某一项功能.

我们可以在A Servlet的service方法中调用B Servlet的service方法接着进行业务的处理。 ​但是Servlet对象是由服务器创建的,service方法也是由服务器进行调用的。所以,我们不能自己去调用。 ​应该在A Servlet的service方法中写一行特殊的代码,告诉tomcat服务器,让服务器去调用B Servlet的service方法接着进行请求的处理(​在Servlet的service方法中完成其他Servlet的调用。 )

 浏览器发起请求访问服务器,服务器接收到请求,解析请求,创建请求和响应对象,执行Servlet中service方法时, 将请求和响应对象传递给service方法中。

创建:请求到达服务器,执行servlet的service执行
销毁:响应回到浏览器
 特点:
 1.一次请求有效(请求过来和响应回去)
 2.存储数据:req.setAttribute(String key, Object value);
 3.获取数据:req.getAttribute(String key);
 4.删除存储的数据: req.removeAttribute(String key);


//请求对象中存储数据
        req.setAttribute("aa", "AServlet");
        //请求转发
//1.获取请求转发器  参数为转发的路径
        RequestDispatcher rp = req.getRequestDispatcher("/login.html");
//2.完成转发(使用相同的请求和响应对象)
        rp.forward(req, resp);
            //简单理解:调用BServlet中的service(req, resp)

 总结:请求转发可以实现在后端Servlet之间的相互调用,一个请求由一个Servlet处理,转变为了多个Servlet的协同处理。

4. 请求重定向

当浏览器向Tomcat服务器发送请求时,由于一个Servlet1类无法完成所有请求响应工作,这时候Servlet1类会通知浏览器重新定向到另一个Servlet2类的请求。浏览器会再次发送请求访问Servlet2,来获得Servlet2的响应.

请求重定向到DServlet

特点:
访问CServlet,CServlet执行,CServlet中重定向到DServlet
1.CServlet以302状态响应回到浏览器。请求和响应对象 销毁了。
2.浏览器接收到重定向的响应后,重新发送请求到DServlet
3.DServlet接收到请求,处理请求,完成响应
地址栏改变,多次一次请求

通过方法获取项目名
String contextPath = req.getContextPath();
System.out.println(contextPath);  // /Servlet_Day03_war_exploded
重定向时,1./指定项目名/资源名    2.url http://ip:port/指定项目名/资源名
resp.sendRedirect(contextPath + "/login.html");

Cookie对象

如果浏览器又发送了请求,而且本次请求需要用到上次请求传递过的数据,那么本次请求又要重新带上上次请求传递的数据。这样效率不高,而且用户体验度也差!

总结:

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

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

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

特点

Cookie是浏览器端的数据存储技术。是字符串存储数据。Cookie使用Key与Value结构存储数据。不安全,不适合存储重要的数据到浏览器端。   Cookie一个单个的存储数据大小限制在4097个字节。Cookie存储的数据中不支持中文,但Servlet4.0中支持。Cookie分为持久化Cooke与状态Cookie。Cookie对象保存在客户端浏览器内存或系统磁盘中。浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同  。浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。Cookie是与域名绑定所以不支持跨一级域名访问。

Cookie的使用

创建Cookie,Cookie中保存的数据是键值对的方式
Cookie cookie = new Cookie("username", "root");

将创建好的Cookie添加到响应中,这样浏览器就会将Cookie中的信息保存起来了
resp.addCookie(cookie);

Cookie中存放的只能是字符串。


Cookie数据的获取

Cookie[] cookies = req.getCookies();
if(cookies != null){
    for (Cookie cookie : cookies) {
        String name = cookie.getName();
        String value = cookie.getValue();
        System.out.println(name + ":" + value);
    }
}

 存活时间:MaxAge
 1.默认:浏览器的本次回话,浏览器不关闭,Cookie不销毁。浏览器关闭,Cookie销毁。 状态Cookie
 2.设置存活时间:
正数:指定秒数后销毁  持久化Cookie
负数(默认):浏览器关闭销毁
 0:立刻销毁
- 正数:表示在指定的秒数后过期
- 负数:表示浏览器一关,Cookie就会被删除(默认是-1)
- 零:表示马上删除Cookie


cookie2.setMaxAge(60*2);
cookie3.setMaxAge(0);

设置哪些资源可以使用Cookie:Path
1. /部署的项目名(默认):该项目中所有资源都可以使用
2. / :当前tomcat中部署的所有项目都可以使用
3. /部署项目名/资源名 :只有该资源可以使用

设置哪些域名可以使用Cookie:DoMain
1.默认:访问时的域名。
2.允许二级域名跨域。.zqwl.com -> www.zqwl.com aaa.zqwl.com
 3.不允许一级域名跨域。www.zqwl.com -> www.baidu.com(不允许)
注意事项:
localhost 和 127.0.0.1 为跨域。
访问时的端口号不一样也属于跨域。

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值