Java基础学习总结(9)——response和request

来源:互联网 发布:淘宝刷单新规则影响 编辑:程序博客网 时间:2024/06/01 13:45

response作用:

1.可以操作状态码  setStatus()
 2.可以操作响应头  setHeader()
 3.可以操作响应正文  通过流  getOutputStream()    getWriter()

1、通过response实现重定向

重定时,可以访问站内资源,也可以访问站外资源。    

开发中要想重定向   respons.sendRedirect(String location);

2、设置缓存

发送http头,控制浏览器禁止缓存当前文档内容,只需要在服务器端设置这三项就可能,控制缓存。

在开发中要想禁用缓存,都是在显示页面上操作.也就是jsp上。
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="-1">    
        
        如果要在servlet上禁用缓存
        response.setHeader("pragma","no-cache");
        response.setHeader("cache-control", "no-cache");
        response.setDateHeader("expires", -1);

3、设置相应正文

响应正文是在浏览器上真正显示的内容。
    在servlet中要想操作响应正文,需要通过response对象获取输出流来操作。
    
    getWriter()  字符流                   --ServletOutputStream
    getOutputStream(); 字节流.   --PrintWriter

如果是纯文本使用字符流,如果二进制文件,使用字节流。
 如果只是得到信息,原样不动,不进行修改操作,这时就使用字节流。
如果要操作的是自定义信息,这时使用字符流。

关于响应信息乱码问题:
        response.setCharacterEncoding(String code);它不能通知浏览器解析时使用什么编码。只能设置响应正文编码。response.setCharacterEncoding("utf-8");
        
        response.setContentType(String mimeType);它不仅设置响应编码,也通知浏览器怎样解析。

建议使用:response.setContentType("text/html;charset=utf-8");

request

1 get方法

  1.          String locale = request.getLocalName();//传输协议  
  2.          String url = request.getRequestURL().toString();//请求的地址  --http://localhost:8080/day8_2/login
  3.          String uri = request.getRequestURI();//没有主机名的地址     ---/day8_2/login
  4.          String protocol = request.getProtocol();//获取协议  
  5.          String  add = request.getRemoteAddr();//客户端IP  
  6.          String host = request.getRemoteHost();//客户端主机名  
  7.          String port = request.getRemotePort()+"";//客户端端口号  
  8.          String method = request.getMethod();//客户端的请求方式  
  9.          String localAddr = request.getLocalAddr();//获取服务器地址  
  10.          String username = request.getParameter("username");//地址后面?请求的参数  
  11.          String serverPort = request.getServerPort()+"";//服务器端口号  
  12.          String serverName = request.getServerName();//服务器名
  13.          String msg = request.getQueryString();           获取get请求时的参数  --username=hh$age=7
  14.          request.getContextPath(); 获取虚拟目录名称.(就是工程名)
  15.         String userAgent = request.getHeader("User-Agent");  获取浏览器信息         

2 获取客户端请求头

String getHeader(String name); 获取一个请求头信息
Enumeration getHeaders(); 获取多个请求头信息


3 获取请求参数

public String getParameter(String name);

public String[] getParameterValues(String name);

public Enumeration getParameterNames();
                        它获取的是表单中所有的name值.值可能不是一个

public Map<String,String[]> getParameterMap();
                    它将请求参数的name做为了key,以输入的值或选定的值做为value。

// 获取所有的name值
 Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
System.out.println(names.nextElement());
}

// getParameterMap
Map<String, String[]> map = request.getParameterMap();
 for (String key : map.keySet()) {
      System.out.println(key + "------ " + Arrays.toString(map.get(key)));
        }

4 解决请求参数的中文乱码

乱码出现的原因:页面上使用的是utf-8进行编码,而tomcat使用了iso8859-1进行了解码。

get方式:先按照原编码得到原始字节码,然后再重新编码。如:name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

处理方式是:先进行iso8859-1编码,然后在进行utf-8解码

post方式:我们可以通过  request.setCharacterEncoding(String charsetname);    来解决乱码问题.

请求转发与重定向区别

1.请求转发它是服务器内部跳转,只有一次请求,一次响应。
              重定向它是两次请求,两次响应。
              
            2.请求转发,是服务器内部操作,它不会影响到地址的路径。
                          重定向是两次请求,地址栏会变化。
            
            3.请求转发只能在当前站点内跳转。
              重定向可以跳出站内。
              
            4.请求转发是由request发起的。  request.getRequestDispatcher("").forward();
              重定向  response.sendRedirect();
            
            5.请求转发时,它的路径  "/" 代表的是当前工程.  服务器端路径
              重定向 它的路径  "/" 代表的是服务器要目录。  客户端路径.
              
              request.getRequestDispatcher("/").forward();
             这时的/相当于当前虚拟目录名称   http://localhost:8080/day8_2
               response.sendRedirect("/");它相当于是  http://localhost:8080
            6.请求转发中存在request域.
              重定向它不存在request域。

路径的写法

a、绝对路径写法:ServeltContext都必须用绝对路径。“/”开始 (如ServletContext.getRequestDispatcher("path") path必须是绝对路径)

b、相对路径:其他情况都可以使用相对路径,也可以使用绝对路径

c、在使用绝对路径时,要不要加"/"或者是项目名:如果是服务器调用的,不用加项目名,用“/”就可以代表了当前应用根目录如果是客户端调用的,必须加上项目名 

1、转发:request.getRequestDispather(String url) -----------------绝对路径:url    /servlet/ServletDemo

2、重定向:response.sendRedirect(String url)--------------绝对路径:url    /day05/servlet/ServletDemo<br>

3、超链接:<a href="url"/>                          ------- -------------绝对路径:url  /day05/servlet/ServletDemo<br> 

4、类加载文件的路径----------------web应用中只能用相对路径,相对于classes目录的

5、<fomr action="url"/>           ------------------------绝对路径:/day05/servlet/ServletDemo

6、ServletContext.getRealPath(url)       --------------绝对路径:url    /servlet/ServletDemo

0 0
原创粉丝点击