Request和Response

Request:获取请求数据

Response:设置响应数据

Request继承体系

        ServletRequest        Java提供的请求对象根接口

        HttpServletRequest        Java提供的对Http协议封装的请求对象接口

        RequestFacade        Tomcat定义的实现类

        1、Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中

        2、使用request对象,查阅JavaEE API文档的HttpServletRequest接口

请求数据分为3部分:

1、请求行:

        String getMethod():        获取请求方式

        String getContextPath():        获取虚拟目录(项目访问路径)

        StringBuffer getRequestURL():        获取URL(统一资源定位符)

        String getRequestURI():        获取URI(统一资源标识符)

        String getQueryString():        获取请求参数(GET方式)

2、请求头:

        String getHeader(String name):        根据请求头名称,获取值

3、请求体:

        ServletInputStream getInputStream():        获取字节输入流

        BufferedReader getReader():        获取字符输入流

通用获取参数方法:

        getParameterMap()        返回类型为Map<String, String[]>

        getParameterValues()        返回类型为String[]

        getParameter()        返回类型为String

快速创建Servlet:

如果点击new之后没有出现Servlet:

Request请求参数中文乱码处理:

        请求参数如果存在中文数据,则会乱码

        解决方案:

                POST:设置输入流的编码        req.setCharacterEncoding("UTF-8")

                GET:  byte[] bytes = username.getBytes(StandardCharasets.ISO_8859_1);

                          username = new String(bytes, StandardCharasets.UTF_8);

                                GET获取参数的方式:getQueryString

                                乱码原因:tomcat进行URL解码,默认的字符ISO_8859_1

        URL编码实现方式:

                编码:        URLEncoder.encode(str, "utf-8")

                解码:        URLDecoder.decode(str, "ISO-8859-1")

请求转发:一种在服务器内部的资源跳转方式

        实现方法:        req.getRequestDispatcher("资源B路径").forward(req, resp);

        请求转发资源间共享数据:使用Request对象

                void setAttribute(String name, Object o):        存储数据到request域中

                Object getAttribute(String name):        根据key,获取值

                void removeAttribute(String name):        根据key,删除该键值对

        请求转发特点:

                浏览器地址栏路径不发生变化

                只能转发到当前服务器的内部资源

                一次请求,可以再转发的资源间使用request共享数据

Response继承体系:

        ServletResponse:        Java提供的请求对象根接口

        HttpServletResponse:        Java提供的对Http协议封装的请求对象

        ResponseFacade:        Tomcat定义的实现类

Response设置响应数据功能介绍

        响应数据分为3部分:

                1、相应行:        void setStatus(int sc):设置响应状态码

                2、响应头:        void setHeader(String name, String value):        设置响应头键值对

                3、响应体:        PrintWriter getWriter():        获取字符输出流

                                            ServletOutputStream getOutputStream():        获取字节输出流

Response完成重定向:

        重定向(Redirect):一种资源跳转方式

        实现方式:        resp.setStatus(302);

                                  resp.setHeader("location", "资源B的路径");

                简化方式:        resp.sendRedirect("资源B的路径");

        重定向特点:

                浏览器地址栏路径发生变化

                可以重定向到任意位置的资源(服务器内部、外部均可)

                两次请求,不能在多个资源使用request共享数据

路径问题:

        明确路径谁使用?

                浏览器使用:需要加虚拟目录(项目访问路径)

                服务端使用:不需要加虚拟目录

Response响应字符数据

        使用:

                1、通过Response对象获取字符输出流:        PrintWriter writer = resp.getWriter();

                2、写数据:        writer.write("aaa");

        如果出现中文乱码问题:        resp.setContentType("text/html; charset=utf-8");

        注意:该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

Response响应字节数据

        使用:

                1、通过Response对象获取字节输出流:        ServletOutputStream outputStream = resp.getOutputStream();

                2、写数据:        outputStream.write(字节数据);

        IOUtils工具类使用

                1、导入坐标

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

                2、使用

                        IOUtils.copy(输入流, 输出流);

代码优化:

        创建SqlSessionFactory代码优化:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        问题:

                1、代码重复:工具类

                2、SqlSessionFactory工厂只创建一次,不要重复创建:静态代码块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值