HttpServletResponse与HttpServletRequest

  1. 编码问题的原则

    1. 英文字母不会出现乱码问题,所有的编码表都包含Unicode编码表
    2. 字符流=字节流+编码表 使用tomcat服务器时,默认使用tomcat默认编码表
    3. tomcat6.x tomcat7.x 默认全是ISO-8859-1 tomcat8.x默认使用UTF-8
    4. 在jsp编程中,getByte();默认使用ANSI 本地编码表GBK
    5. getByte()中有带有编码表的构造,可以指定字符通过什么编码返回byte数组
  2. HTTPServletResponse

    1. getOutputStream和getWriter()不能同时使用????

      这两个流不需要我们手动释放,Servlet会自动释放????

      response.getOutputStream().write("中文乱码".getBytes());

      response.getWriter().print("中文乱码");

    2. 常用标头

      1. 刷新 response.setHeader("Refresh", "1");一秒钟刷新一次
      2. 设置指定时间重定向 response.setHeader("Refresh", "3;URL=/index.jsp");URL可以省略

        转发: / 代表当前应用

  • 只有一次请求,共享请求
  • 需要共享request时使用转发
  • 地址栏不会变化
  • 服务器的内部行为
  • 只能转发内部地址

//通过得到上下文对象 实现页面跳转 /代表当前项目中 不能使用相对路径

getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);

//得到请求对象,实现页面跳转

request.getRequestDispatcher("/Test.html").forward(request, response);

重定向: / 代表tomcat 根目录

  • 会发出新的请求
  • 地址栏会发生变化
  • 可以转发内部地址,也可以访问外部资源
  • 不写/代表 相对路径

    //使用相对路径时 指向的就是当前class路径

    response.sendRedirect("myServlet_OutputStream");

    response.setHeader("Refresh", "3;URL=当前类空间中的class文件 ");

  1. 缓冲时间 response.setDateHeader("Expires",System.currenTimeMillis()+1*1000*60*60); /1 小时

    地址栏直接Enter键 是使用缓存 需要更新 需要刷新 才会更新页面

    静态的web资源是可以缓存的

    动态的web资源是不建议使用缓存的

    控制没有缓冲

//控制没有缓存

response.setHeader("expires","0");

response.setHeader("cache-control","no-cache");

response.setHeader("pragma","no-cache");

  1. 字节流乱码的解决办法

    1. 修改浏览解析编码
    2. 告诉浏览器,使用的是UTF-8,同时字节流输出的byte数组也为UTF-8(如下三种)
    3. 直接写出字符标签 response.getOutputStream().write();è不推荐使用

      response.getOutputStream().write("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">".getBytes());

      response.getOutputStream().write("中文乱码".getBytes("UTF-8"));

      头标签在使用时,有的浏览器会直接识别为字符串显示出来

    4. 通过设置头标签 response.setHeader();

      response.setHeader("Content-type", "text/html;charset=UTF-8");

      response.getOutputStream().write("中文乱码".getBytes("UTF-8"));

    5. 直接设置标签内的值 response.setContentType(); è推荐使用

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

      response.getOutputStream().write("中文乱码".getBytes("UTF-8"));

  2. 字符流乱码的解决办法

    a、
    直接写出标签在字符流中不能使用,剩下的都可以使用,推荐如下!

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

    response.getWriter().print("中文乱码d");

  1. HTTPServletRequest

    1. 请求的方法
  • java.lang.String getContextPath() 应用名称
  • ????java.lang.String getMethod() 获取请求方式,获取的是大写
  • ????java.lang.String getQueryStrin() 获取请求的数据
  • ????java.lang.StringBufferget RequestURL() 当前项目的访问路径,推荐使用ServletContext的getRealPath替代
  • ????java.lang.String getRequestURI() 获取不包括主机名端口号的访问路径
  • ????getRealPath() 获取绝对路径
  • ????getProtocol() 获取协议和版本
  • ????getRemoteAddr() 获取来访者的IP地址
  1. 获取表单数据(最常用的方法)

    1. 根据表单的name获取表单的value request.getParameter(""); 获取单个value
    2. 根据表单的name获取表单的value数组 request.getParameterValues("") 一般用于checkbox和radio
    3. 获取表单中的所有的name request.getParameterNames();
    4. 获取重复的表单name 只能获取到检索到的第一个value
    5. checkbox和radio如果不选择,客户端不发送数据到服务器
  2. 获取数据的內省机制(反射原理)

User user = new User();

????????//表单提交了多少数据过来?

????????Enumeration<String> e = request.getParameterNames();

????????while(e.hasMoreElements()) {

????????????//获取每一个表单的name

????????????String fieldName = e.nextElement();

????????????String fieldValue = request.getParameter(fieldName);

????????????

????????????try {

????????????????//内省

????????????????PropertyDescriptor pd = new PropertyDescriptor(fieldName,User.class);

????????????????Method m = pd.getWriteMethod();//得到指定字段的set方法

????????????????m.invoke(user, fieldValue);

????????????} catch (Exception e1) {

????????????????// TODO Auto-generated catch block

????????????????e1.printStackTrace();

????????????}

????????????

????}

  1. 一种简单的对象封装方法(使用Apache的开源类库)

    BeanUtils.populate(user, request.getParameterMap());

    import org.apache.commons.beanutils.BeanUtils;

    可以自动得到Key和value并封装到给定的对象之中,原理是內省

  2. 中文乱码问题

    post方式:request.setCharacterEncoding("UTF-8"); 获取数据前

    get方式: username=new String(username.getBytes("ISO-8859-1"),"UTF-8");使用打回原形的方式

    原因:get是直接在地址栏传递的,请求前已经编码过,默认认为中文是不安全的,默认ISO-8859-1

    所以需要打回原形实现码

    使用getInpuStream()时必须使用post,用于文件的上传!

  3. 跳转和包含

    //跳转request.getRequestDispatcher("/register.html").forward(request, response);

    //包含request.getRequestDispatcher("/register.html").include(request, response);

时间: 2024-11-08 14:13:14

HttpServletResponse与HttpServletRequest的相关文章

HttpServletResponse和HttpServletRequest详解

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

HttpServletRequest获取请求头信息 (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHeaders(String name) Enumeration<String> getHeaderNames() (2)获取具体类型客户机请求头 int  getIntHead(String name) long getDateHead(String name) 日期对应毫秒 (3)常见的请求头 re

HttpServletResponse和HttpServletRequest详解.RP

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

JavaWeb如何将后台数据传递到前台页面HttpServletResponse和HttpServletRequest

继续总结:Java经过Action后,怎么将action中返回的数据写到前台去 先了解下:HttpServletResponse对象 (1).Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest; (2).HttpServletResponse对象可以向客户端发送三种类型的数据:a.响应头b.状态码c.

14SpringMvc_在业务控制方法中写入HttpServletRequest,HttpServletResponse等传统web参数(这个知识点知道就好了,不推荐这么去做)

这篇文章解决的问题是怎么在业务方法里面引入我们熟悉的HttpServletRequest和HttpServletRespon? 答案:这种引入传统的web参数的做法不推荐去做,因为这么做会实行高度耦合. 但还是说一下这种做法: 在Action修改代码如下: package com.guigu.shen.Action7; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.se

HttpServletResponse工具类和HttpServletRequest工具类,前台参数接收方式和后台返回(JSON)数据格式

RequestUtils.java 操作类 package cn.utils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.util.UrlPathHelper; import javax.servlet.http.HttpServletRequest; import java

servlet和jsp学习指南(一)servlet

近期接触了些纯servlet与jsp的编程项目,顺便把<servlet和jsp学习指南>这本书拿出来看看,感悟良多.记下随笔,以便会议. 要编写一个servlet首先要实现Servlet或者继承HttpServlet package test.com.servlet; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet

Java 导出Excel

比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel,现在以前一种为例子做一个讲解,后一个感兴趣的可以去自己查下资料,楼主也会贴出代码,但是!没有跑过,不保证成功率··· Jakarta POI 1.首先下载poi-3.6-20091214.jar,下载地址如下: 官方主页http://poi.apache.org/index.html API文档http://poi.apache.org/apidocs/index.html Maven 依赖: <

cms-帖子内容实现2

package com.open1111.controller.admin; import java.io.File;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map; import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.h