心得11--案例分析request.getparameter()方法的用法及请求乱码处理、分配器方法

1.一个案例具体分析:request.getparameter()方法的用法及请求乱码处理

packagecom.request;

 

importjava.io.IOException;

importjava.io.UnsupportedEncodingException;

importjava.util.Enumeration;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

publicclass Request3 extends HttpServlet {

   public void doGet(HttpServletRequest request,HttpServletResponse response)

        throws ServletException, IOException {

      /*超链接乱码问题:如果是jsp文件中的超链接可以直接用java中的URLEncoder.eccoding()类解决,

       * 但是html中的职能用解决get请求方式的方法解决。

       */

      System.out.println(newString(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"));

   }

   public void test2(HttpServletRequest request)

        throws UnsupportedEncodingException {

      /*请求方式是get的乱码解决,请求方式为get方法的比较麻烦,需要手动解决,

       * tomact服务器默认的编码是ISO-8859-1,所以需要手动修改编码。你也可以去修改tomcat安装路径中的conf中的server.xml文件

       */

      String name =request.getParameter("name");

      name = newString(name.getBytes("ISO-8859-1"),"UTF-8");

      String password = newString(request.getParameter("password").getBytes("ISO-8859-1"),"UTF-8");

      System.out.println(name+"----"+password);

   }

    //表单中form的请求方式是post

   public void test1(HttpServletRequest request){

      //post请求方式的乱码解决,只对post起作用

      try {

        request.setCharacterEncoding("UTF-8");

      } catch (UnsupportedEncodingException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

      }

      String name =request.getParameter("username");

      String password =request.getParameter("password");

      String sex =request.getParameter("sex");

      String city =request.getParameter("city");

      String[] likes =request.getParameterValues("likes");

      String l = "";

      for(inti=0;l!=null&&i<likes.length;i++){

        String like = likes[i];

        l = l+"   "+like;

      }

      String mome =request.getParameter("mome");

      System.out.println("用户名:"+name);

      System.out.println("密    码:"+password);

      System.out.println("性    别:"+sex);

      System.out.println("城    市:"+city);

      System.out.println("简    历:"+mome);

      System.out.println("爱    好:"+l);

   }

   public void doPost(HttpServletRequestrequest, HttpServletResponse response)

        throws ServletException, IOException {

      doGet(request, response);

   }

}

2. 防盗链技术案例分析

packagecom.request;

 

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclass Request4 extends HttpServlet {

 

   public void doGet(HttpServletRequest request,HttpServletResponse response)

        throws ServletException, IOException {

      //解决响应的乱码,其实响应乱码就是从这个servlet类获取的汉字,请求乱码是从html或jsp界面请求过来的汉字

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

      //获取请求头中的referer(参照,即防盗参数)

      String referer =request.getHeader("referer");

      //进行判断,如果查到的referer参数是空值或不是我要求的格式就重定向到我指定的界面,这里或者一定要是非。

      if(referer==null ||!referer.startsWith("http://localhost")){

        response.sendRedirect("/WebDemo/index.jsp");

        return;

      }

      String value = "秘密!!!";

      response.getWriter().write(value);

   }

   public void doPost(HttpServletRequestrequest, HttpServletResponse response)

        throws ServletException, IOException {

      doGet(request, response);

   }

}

3.Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:

•       public voidforward(ServletRequest request, ServletResponse response)

•      public void include(ServletRequest request, ServletResponseresponse)

获取RequestDispatcher实例的方式主要有两种:

•      调用ServletContext接口提供的getRequestDispatcher(Stringurl)方法。

•      调用ServletRequest接口提供的getRequestDispatcher(Stringurl)方法。

•      include方法:

RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能。被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略。

l    请求转发的应用场景:MVC设计模式(下篇具体介绍)

l    request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

l    request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

ü    setAttribute方法

ü    getAttribute方法 

ü    removeAttribute方法

ü    getAttributeNames方法

例子

packagecom.request;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclass Request5 extends HttpServlet {

 

   public void doGet(HttpServletRequest request,HttpServletResponse response)

        throws ServletException, IOException {

   request.getRequestDispatcher("/header.html").include(request,response);

   response.getOutputStream().write("aaaaaaaaaa".getBytes());

   request.getRequestDispatcher("/fooder.html").include(request,response);

   }

   public void doPost(HttpServletRequestrequest, HttpServletResponse response)

        throws ServletException, IOException {

      doGet(request, response);

   }

}

posted @ 2012-10-25 20:34  yangkai_keven  阅读(410)  评论(0编辑  收藏  举报