javaweb开发入门-request对象

HttpServletRequest

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

request常用方法

l获得客户机信息

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

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

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

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

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

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

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

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

getMethod得到客户机请求方式

 

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

 

String url = 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(String name)方法

•getHeaderNames方法

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

•getParameter(name)方法

•getParameterValues(String name)方法

•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防盗链

String referer =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各种表单输入项数据的获取

•text、password、radio、checkbox、

•file、select、textarea、 hidden、

•image、button给js编程用

package cn.itcast.request;

 

import java.io.IOException;

import java.util.Arrays;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

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

public class 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表单:

 

<!DOCTYPE HTML 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

public classRequestDemo6 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;

 

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

public classRequestDemo7 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地址的编码

 

 

import java.io.IOException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

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

 

/*

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

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

 *

 */

public class 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">

      

       */

    }

你可能感兴趣的:(浏览器,servlet,String,服务器,url,input)