当前位置 : 主页 > 编程语言 > java >

jsp中request的常见使用方法

来源:互联网 收集:自由互联 发布时间:2021-06-25
HttpServletRequest HttpServletRequest 对象代表客户端的请求,当客户端通过 HTTP 协议访问服务器时, HTTP 请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客

HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息

request常用方法

l获得客户机信息

getRequestURL方法返回客户端发出请求时的完整URL

getRequestURI方法返回请求行中的资源名部分。

getQueryString 方法返回请求行中的参数部分。

getRemoteAddr方法返回发出请求的客户机的IP地址

getRemoteHost方法返回发出请求的客户机的完整主机名

getRemotePort方法返回客户机所使用的网络端口号

getLocalAddr方法返回WEB服务器的IP地址。

getLocalName方法返回WEB服务器的主机名

getMethod得到客户机请求方式

 

URLURI的关系:URIURL的父类,URI描述资源,URL描述互联网的资源

 

Stringurl = request.getRequestURL().toString();

       System.out.println(url);

       System.out.println(request.getRequestURI());

       

       System.out.println(request.getQueryString());

       

       System.out.println(request.getRemoteAddr());

       

       System.out.println(request.getRemoteHost());

       

       System.out.println(request.getRemotePort());

       

       System.out.println(request.getMethod());

 

Request常用方法

l获得客户机请求头

getHead(name)方法

•getHeaders(Stringname)方法

•getHeaderNames方法

l获得客户机请求参数(客户端提交的数据)

•getParameter(name)方法

•getParameterValuesStringname)方法

•getParameterNames方法

•getParameterMap方法 //

•getInputStream

 

获取客户机带过来的数据

 

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

       System.out.println(username);

      

       System.out.println("----------------------");

      

       Enumeration  e = request.getParameterNames();

       while(e.hasMoreElements()){

          String name =(String) e.nextElement();

          String value = request.getParameter(name);

          System.out.println(name+ "=" + value);

      }

      

       System.out.println("----------------------");

      

       String values[]=request.getParameterValues("username");

       for(int i=0;values!=null&&i<values.length;i++){

          System.out.println(values[i]);

      }

      

       System.out.println("----------------------");

      //http://localhost:8080/day05/servlet/RequestDemo3?username=aaa&username=bbb&password=123

       Map<String,String[]>map = request.getParameterMap();

       Set<Map.Entry<String,String[]>> set =map.entrySet();

       for(Map.Entry<String,String[]>entry : set){

          username =entry.getKey();

          values =entry.getValue();

          for(int i=0;values!=null&&i<values.length;i++){

              System.out.println(username+"=" + values[i]);

          }

      }

 

request常见应用1

l防盗链

Stringreferer =request.getHeader("referer");

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

          response.sendRedirect("/day05/index.html");

          return;

      }

       String data = "凤姐日记";

       response.setCharacterEncoding("UTF-8");

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

       response.getWriter().write(data);

 

l各种表单输入项数据的获取

•textpasswordradiocheckbox

•fileselecttextareahidden

•imagebuttonjs编程用

packagecn.itcast.request;

 

importjava.io.IOException;

importjava.util.Arrays;

 

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

//获取不同类型表单的数据(获取客户机表单提交的数据)

publicclass RequestDemo5 extends HttpServlet {

 

   publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

 

      System.out.println(request.getParameter("username"));

      System.out.println(request.getParameter("password"));

       System.out.println(request.getParameter("gender"));

      System.out.println(Arrays.asList(request.getParameterValues("like")==null?newString[]{}:request.getParameterValues("like")));

       System.out.println(request.getParameter("city"));

       System.out.println(request.getParameter("resume"));

       System.out.println(request.getParameter("xx"));

       

       

       String username=request.getParameter("username"); //"" null

       if(username==null ||username.trim().equals("")){

           System.out.println("您没有提交数据");

       }

       request.getParameter("gender");  //null

       request.getParameterValues("like");//null

   }

   publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       doGet(request, response);

   }

 

}

 

form表单:

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

 <head>

   <title>form.html</title>

   

   <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">

   <meta http-equiv="description"content="this is my page">

   <meta http-equiv="content-type"content="text/html; charset=UTF-8">

   

   <!--<link rel="stylesheet"type="text/css"href="./styles.css">-->

 

 </head>

 

 <body>

   <form action="/day05/servlet/RequestDemo5"method="post">

    用户名:<input type="text"name="username"><br/>

    密码:<input type="password"name="password"><br/>

    性别:<input type="radio"name="gender" value="male">

        <input type="radio"name="gender" value="female">

        <br/>

    爱好:<input type="checkbox"name="like" value="basketball">蓝球

        <input type="checkbox"name="like" value="football">足球

        <input type="checkbox"name="like" value="java">java

        <input type="checkbox"name="like" value=".net">.net

        <br/>

    所在地:<select name="city">

               <option value="bj">北京</option>

               <option value="sh">上海</option>

               <option value="cs">长沙</option>

          </select><br/>

        简历:<textarea rows="5"cols="60" name="resume"></textarea><br/>

        大头照:<input type="file" name="image"><br/>

        <input type="hidden"name="xx" value="yyy">

    <input type="submit"value="提交">

   </form>

   

   

   <form action="/day05/servlet/RequestDemo6"method="get">

    用户名:<input type="text"name="username"><br/>

    <input type="submit"value="提交">

   </form>

   

   

    <form action="/day05/servlet/RequestDemo7"method="post">

    用户名:<input type="text"name="username"><br/>

    <input type="submit"value="提交">

   </form>

   

   <!-- 超链接后面带中文数据一定要经过url编码-->

   <a href="/day05/servlet/RequestDemo8?name=方立勋">点点</a>

   

   

 </body>

</html>

 

如果都没有添或选择,输入项默认为空串“”,选择项为NUll

所以最好用这种方式进行比较判断:if(username==null||username.trim().equals("")){

l请求参数的中文乱码问题

 

importjava.io.IOException;

 

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

//request的乱码问题:get\post

publicclassRequestDemo6 extends HttpServlet {

 

   public void doGet(HttpServletRequest request, HttpServletResponseresponse)

           throwsServletException, IOException {

 

       //以下代码可以解决post提交的乱码

       request.setCharacterEncoding("UTF-8");  //只对post方式有效

       //String username1=request.getParameter("username");

       //System.out.println(username1);

       

       

       //以下代码可能解决get提交的乱码

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

       //username2 = newString(username2.getBytes("iso8859-1"),"UTF-8");

       System.out.println(username2);

       

   }

 

   public void doPost(HttpServletRequest request,HttpServletResponse response)

           throwsServletException, IOException {

       doGet(request,response);

   }

 

}

 

importjava.io.IOException;

 

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

//思考题:下面程序有乱码吗????

publicclassRequestDemo7 extends HttpServlet {

 

   public void doGet(HttpServletRequest request, HttpServletResponseresponse)

           throwsServletException, IOException {

       

       request.setCharacterEncoding("UTF-8");

       String username =request.getParameter("username");  //方立

       

       response.setCharacterEncoding("gb2312");

      response.setContentType("text/html;charset=gb2312");

       response.getWriter().write(username);

   }

 

   public void doPost(HttpServletRequest request,HttpServletResponse response)

           throwsServletException, IOException {

 

       doGet(request,response);

   }

 

}

 

 

lURL地址的编码

 

 

importjava.io.IOException;

 

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

//超链接提交中文数据 在服务器端获取的代码

 

/*

 *  <!-- 超链接后面带中文数据一定要经过url编码-->

   <ahref="/day05/servlet/RequestDemo8?name=方立勋">点点</a>

 *

 */

publicclass RequestDemo8 extendsHttpServlet {

 

      publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

                    throws ServletException, IOException {

 

             Stringname = request.getParameter("name");

             name= new String(name.getBytes("iso8859-1"),"UTF-8");

             System.out.println(name);

             

             

      }

 

      publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

                    throws ServletException, IOException {

 

             doGet(request, response);

      }

 

}

 

request常见应用2

lrequest对象实现请求转发:请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

l请求转发的应用场景:MVC设计模式

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

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

setAttribute方法

getAttribute方法 

removeAttribute方法

getAttributeNames方法

 

 *请求转发的特点:

 *1.请求转发对浏览器而言只发了一次请求,并且浏览器的地址栏不会发生变化

 *2.请求转发下,服务器只会创建一个request response

 *

 *请求转发应用场景mvc设计模式

 *mvc设计模式下,都是servlet处理请求,处理请求产生数据后,servlet会把数据存储request域,然后转发给jsp显示

 *

   String data = "aaaa";

       request.setAttribute("data", data);

      

       request.setAttribute("data", data);

       RequestDispatcher rd =request.getRequestDispatcher("/view.jsp");

       rd.forward(request, response);

 

请求转发的细节

lforward方法用于将请求转发到RequestDispatcher对象封装的资源。

l如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IllegalStateException异常。

l如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入到输出缓冲区中的内容将被清空,但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效

 

 

       String data = "aaa";

       response.getWriter().write(data);  //浏览器不会看到这个数据的输出

      

      

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

      

       String data2 = "bbb";

       response.getWriter().write(data2); //浏览器不会看到这个数据的输出

请求重定向和请求转发的区别

l一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。

l一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。

 

lRequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

l如果传递给HttpServletResponse.sendRedirect方法的相对URL“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL“/”开头,它是相对于当前WEB应用程序的根目录。

l调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

lHttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

lRequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

 

RequestDispatcher

linclude方法:

•RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能。

被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略

 

      //动态包含

       request.getRequestDispatcher("/servlet/HeadServlet").include(request,response);

      

       String data = "aaa<br/>";

       response.getWriter().write(data);

      

      request.getRequestDispatcher("/servlet/FootServlet").include(request,response);

      

 

工程中“\”的用法:

服务器端“\”代表Web应用,客户端代表整个网站

       this.getServletContext().getRealPath("/download/日本.jpg");

      

      

       this.getServletContext().getResourceAsStream("/download/日本.jpg");

      

      

       request.getRequestDispatcher("/login.html");

      

      

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

      

      /*

      

      <a href="/day05/message.jsp">点点</a>

      

      <form action="/day05/servlet/FootServlet">

      

       </form>

      

      <img src="/day05/download/日本纽.jpg">

      

      */

   }

网友评论