jsp内置对象【03】request详解【02】

 关于request对象的方法有很多,在jsp内置对象【03】request详解【01】中,我们一起学习了request对象中的参数接受问题,那么现在再来看一下request的其他方法:

乱码解决( setCharacterEncoding())

    乱码可是WEB开发中的问题老大哥了,我相信有不少接触过这个东西的人都对其相当的头疼。

 什么是乱码?

  在运行程序的时候,本来应该显示的中文竟然变成了莫名其妙的其他看不懂的字符,那我们说就碰到乱码了。我们以下面的程序为例:

  
  
  
  
  1. Request_01.jsp  
  2.    <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  3.   <html>  
  4.   <head>  
  5.   <title>web开发</title>  
  6.   </head>  
  7.   <body>  
  8.   <form action="request_02.jsp" method="post">  
  9.       请输入信息:<input type="text" name="info">  
  10.       <input type="submit" value="提交">  
  11.   </form>  
  12.   </body>  
  13.   </html>  
  14.  
  15.   Request_02.jsp  
  16.  
  17.   <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  18.   <html>  
  19.   <head>  
  20.   <title>web开发</title>  
  21.   </head>  
  22.   <body>  
  23.   <
  24.       String content=request.getParameter("info");  
  25.   %>  
  26. <h2><%=content%></h2>  
  27.  </body>  
  28.   </html> 

   不用我多说,大家运行一下就可以发现,输入英文和数字都能够正常显示,但是输入中文却显示一串看不懂的字符。这就是乱码了。由于现在的request属于接受客户端的参数,所以必然有其默认的语言编码,之所以会出现上述的乱码,主要是由于浏览器的默认编码是UTF-8,而中文编码是GBK,这两种编码是不一样的,所以就造成了乱码。

      要解决乱码就用到了request中的一种方法:

 void setCharacterEncoding(String env) 

                            throws UnsupportedEncodingException 

 将上述的request_02.jsp改成如下:

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  2.    <html>  
  3.    <head>   
  4.    <title>web开发</title>  
  5.    </head>   
  6.    <body>   
  7.    <%  
  8.         request.setCharacterEncoding("gbk");   //设置编码方式  
  9.         String content=request.getParameter("info");  
  10.    %>  
  11.    <h2><%=content%></h2>  
  12.    </body>   
  13.    </html> 

 运行一下,就能显示中文了。

 处理乱码的方式有很多种,如果上述方法不行的话,还有一种方法:

 将request_02.jsp页面改成如下:

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  2.   <html>  
  3.   <head>  
  4.   <title>web开发</title>   
  5.   </head>   
  6.   <body>   
  7.   <%    
  8.    String content=new String(request.getParameter("info").getBytes("ISO-8859-1"));   
  9.   %>   
  10.   <h2><%=content%></h2>   
  11.   </body>   
  12.   </html>  

     这种方式也是可以的,但是我不推荐大家使用这种方法,首先应该使用第一种,如果第一种不行的话,再使用这一种,关于乱码的问题,大家了解这些就够了,造成乱码的原因哟很多,解决的途径也有很多,之后我们还会学到监听器和过滤器,不过那属于我们后续的学习了。

 显示头信息(简单了解)

 关于头信息

 java的WEB开发使用的是HTTP协议,主要的操作就是基于请求和回应,但是在请求和回应的同时也会包含一些其他的信息(例如:客户端的IP、Cookie、语言等),那么这些信息就成为头信息。 

 取得头信息

 要想取得头信息的名称可以直接通过request内置对象的getHeaderNames(),而要想取出每一个头信息的内容,则需要使用getHeader()方法。

 下面看一个取头信息的例子,看看结果取出来的是什么东西。

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>   
  2.    <%@ page import="java.util.*" %>   
  3.    <html>  
  4.    <head>   
  5.    <title>web开发</title>   
  6.    </head>   
  7.    <body>   
  8.    <%   
  9.        Enumeration enu=request.getHeaderNames();//取得全部的头信息   
  10.         while(enu.hasMoreElements()){   
  11.            String headerName=(String)enu.nextElement();   
  12.            String headerValue=request.getHeader(headerName);   
  13.    %>   
  14.        <h5><%=headerName%> -->  <%=headerValue%></h5>   
  15.    <%   
  16.    }   
  17.    %>  
  18.    </table>  
  19.    </body>   
  20.    </html> 

 运行一下结果如下;

  
  
  
  
  1. accept --> */*  
  2.   
  3.    accept-language --> zh-CN  
  4.   
  5.    accept-encoding --> gzip, deflate  
  6.   
  7.    user-agent --> Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MALN; Media Center PC 6.0)  
  8.   
  9.    host --> localhost:8080  
  10.   
  11.    connection --> Keep-Alive  
  12.   
  13.    cookie --> JSESSIONID=78635401F07163F4B4BEB36A9D5EEB60  

 关于头信息的操作就不多说了,大家知道有这么回事就可以了。

 其他操作

  通过request的方法还可以取得客户端的IP地址、请求方式、访问路径和上下文的名称等

 一个程序实例:

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  2.    <%@ page import="java.util.*" %>  
  3.    <html>  
  4.    <head>  
  5.    <title>web开发</title>  
  6.    </head>  
  7.    <body>  
  8.    <%  
  9.        String method=request.getMethod();  
  10.        String ip=request.getRemoteAddr();  
  11.        String path=request.getServletPath();  
  12.        String contextPath=request.getContextPath();  
  13.    %>  
  14.    <h1>请求方式: <%=method %></h1> 
  15.    <h1>IP地址: <%=ip %></h1>  
  16.    <h1>访问路径: <%=path %></h1>  
  17.    <h1>上下文名称: <%=contextPath %></h1>  
  18.    </table>  
  19.    </body>  
  20.    </html> 

 运行一下结果如下:

 请求方式: GET 

  IP地址: 0:0:0:0:0:0:0:1 

  访问路径: /jsp/request_06.jsp 

  上下文名称: /test51cto 

 从结果可以看出,这些方法能够取得请求方式、IP地址等。

 其中getContextPath()方法是一个非常重要的方法,这个方法可以解决路径的跳转问题。

 如下程序是一个访问图片的程序。按照我们以前学习过的HTML来做的话如下:

 (假设我的图片文件夹名称是images,图片的名字为4.jpg) 

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>   
  2.    <%@ page import="java.util.*" %>  
  3.    <html>   
  4.    <head>   
  5.    <title>web开发</title>   
  6.    </head>    
  7.    <body>    
  8.      <img src="../images/4.jpg">    
  9.    </table>    
  10.    </body>    
  11.    </html>  

 但是通过我们getContextPath()方法如下:

   
   
   
   
  1. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>  
  2.  <%@ page import="java.util.*" %>  
  3.  <html>  
  4.  <head>  
  5.  <title>web开发</title>  
  6.  </head>  
  7.  <body>  
  8.     <%=request.getContextPath()%>/images/4.jpg    //这是为了让大家能够看清楚路径的来源 
  9.    <img src="<%=request.getContextPath()%>/images/4.jpg">  
  10.  </table>  
  11.  </body>  
  12.  </html>  

 运行一下如下:

 看一下图片旁边的地址可以发现,图片是从根目录中找到的图片,对于以后定义根目录有着非常重要的帮助。这种路径方式在高端开发中会学到。

 关于request,我和大家就学到这个地方,对于上述的讲解,不要只看着运行结果很好,一定要找到代码中的有关方法,体会request中的各种方法的名称和作用。其中参数的接受和乱码处理是一个重点内容。

  

 注意:

     这儿说一个同学们可能会产生的问题:

     到底什么时候该使用getAttribute()什么时候该使用getParameter()

 如果要使用getAttribute()则之前一定会存在setAttribute()的设置操作,否则无法取得。

 如果是使用getParameter()则表示接受参数,那么参数的来源有以下几种:

    表单提交

    地址重写

    通过<jsp:include>、<jsp:forward>传递而来的参数。

 getParameter()是无法接受setAttribute()设置的内容的

 

你可能感兴趣的:(request,图片上传,乱码处理,头信息,jsp内置对象, )