Servlet之Request、Response、三层结构、MVC

前言

了解HttpServletRequest和HttpServletResponse接口。

一、请求和响应

1、HttpServletRequest

A.作用

每一次请求过来,tomcat解析请求数据并将解析数据封装在HttpServletRequest中,然后传递到Service方法中,然后分流到doGet和doPost中。

B.常用方法

我们知道请求的所有信息都被解析并封装到了HttpServletRequest对象中,此时可用来获取请求信息。

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置解析数据流的解码格式
        req.setCharacterEncoding("utf-8");
        //super.doPost(req, resp);不能调用这个方法,这是用来发送doPost未实现的error
        //获取请求资源路径
        System.out.println(req.getRequestURI());
        //获取请求的统一资源定位符即绝对路径
        System.out.println(req.getRequestURL());
        //获取IP IP+port(Addr) Port
        System.out.println(req.getRemoteHost());
        System.out.println(req.getRemoteAddr());
        System.out.println(req.getRemotePort());
        //获取请求头
        System.out.println(req.getHeader("User-Agent"));
        //获取请求参数,单值或多值
        System.out.println(req.getParameter("user"));
        System.out.println(Arrays.toString(req.getParameterValues("interest")));
        //获取请求类型
        System.out.println(req.getMethod());
        //获取请求转发对象
        System.out.println(req.getRequestDispatcher("/hello"));
        //添加或取出一个请求域的key,vale
        req.setAttribute("status", "ok");
        //请求体中的数据获取不了,获取的是链接后带的参数
        System.out.println(req.getAttribute("status"));

    }

C.请求转发

用请求调度器将请求转发到另一个Servlet2处理,将请求延长,一次请求,JSP,Servlet1,Servlet2共享该请求域的所有参数.req.getRequestDispatcher("/hello").forward(req,resp);
为何如此做?
1)实现业务分离及合作。
2)能转发请求到受服务器保护的WEB-INF目录下,既能保护Servlet2又能使用其功能。
注:只能调度到该功能所拥有的资源处
在这里插入图片描述

2、Web中/的意义

1)对于浏览器
/被解析为http://ip:port/
2)对于服务器
/被解析为http://ip:port/工程路径
注:当response.sendRidrect(“/”),这是去让浏览器重定向,也就是浏览器去解析。

3、HttpServletResponse

A.作用

和request一样,每次请求由tomcat创建response对象然后传递给service使用,response可以处理响应相关信息。

B.响应流

1)字节流,常用于下载,二进制文件,如图片等。

resp.getOutputStream();

2)字符流,回传字符串。

resp.getWriter();

注:一次只能用一种流往回传,毕竟响应一次。

C.响应编码

resp.setCharacterEncoding("utf-8");

当然也可以设置浏览器的解码格式,就在响应头里。

resp.setHeader("Content-Type","text/html;charset=ISO-8895-1");

同时设置服务端和客户端的编码解码格式,统一起来

resp.setContentType("text/html;charset=UTF-8");

注:这个request解析数据的解码格式和response响应的编码格式都是默认的ISO-8859-1,一种国际化标准格式。毕竟tomcat又不是专门为中国开发的,所以需要设置能完美解析汉字的编码和解码格式。
请求时,用到浏览器编码为UTF-8,tomcat解码为ISO-8859-1;
响应时,tomcat编码为ISO-8859-1,浏览器解码为UTF-8;

D.请求重定向

服务器告诉浏览器去访问我给的新的地址,比如有的地址已经更新为其它地方了。
resp.sendRedirect("/book/newHello");/moudleName/资源路径
或者
resp.setStatus(302);resp.setHeader("Location","/book/newHello")
在这里插入图片描述

总结

1)HttpServletRequest
2)HttpServletResponse

参考文献

[1] Java Web 尚硅谷

附录

1、Java EE 三层架构

在这里插入图片描述

2、项目维护和升级

为了便于项目的维护和升级,就需要对代码之间进行解耦。
主要分出来的包如下:
在这里插入图片描述

3、MVC思想

MVC(Model,View,Controller)将web层的代码分成不同组件,实现解耦,以便于编程的协作、项目的维护和升级。(让代码合理分层,方便管理。
1)View 视图,只负责完整页面的展示和数据的填充。
2)Model 模型,将业务逻辑相关的数据封装到一个Bean/POJO类中,从此用一个对象代表所有业务逻辑数据。
3)Controller 控制器,View与Model的桥接器,用于处理View过来的请求和数据(封装到Model中),然后得到数据(封装到model中)并响应客户端。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值