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

      

       */

    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: request对象JavaWeb中的一个重要对象,它代表了客户端向服务器发送的HTTP请求。request对象包含了请求的各种信息,如请求的URL、请求的参数、请求的头部信息等等。通过request对象,我们可以获取客户端发送的请求信息,并且可以向客户端发送响应信息。在JavaWeb开发中,request对象是非常常用的一个对象,它可以帮助我们实现各种功能,如登录、注册、数据查询等等。 ### 回答2: Request对象是Java Web程序处理HTTP请求的主要方式之一。在基于Web的应用程序中,客户端向服务器发送HTTP请求。请求是客户端指示服务器要求某种操作的方式。 Request对象表示客户端请求的信息。当服务器接收到请求时,会创建一个Request对象来表示该请求。该对象包含有关请求的所有信息,例如,URL,HTTP方法,头信息等。开发人员可以使用Request对象从请求中获取所需的信息。这些信息可以是请求参数,请求头,服务器路径,URL等。 Request对象主要用于从客户端获取数据,例如,表单输入和URL查询字符串。Request对象还用于跟踪客户端会话状态,例如,在应用程序中保存用户信息和验证用户身份。 Request对象是HttpServletRequest接口的实例。HttpServletRequest接口提供各种方法来读取请求数据和元数据,例如getParameter,getAttribute和getRequestDispatcher等。 Request对象可以用于以下用途: 1.获取请求中的参数和头信息; 2.获取请求的HTTP方法和URI; 3.设置和获取请求属性; 4.获取客户端IP地址; 5.获取域名和服务端口号; 6.获取会话信息; 7.重定向和转发请求。 总之,Request对象是Java Web编程中的重要组成部分,可以使开发人员轻松地获取客户端请求的各种信息,并实现复杂的Web应用程序。 ### 回答3: JavaWeb中的Request对象指的是HttpServletRequest对象,是Web应用程序中用来接收和处理HTTP请求信息的重要组成部分。在Java中,HttpServletRequestServlet的一个子接口,可以通过Servlet API中提供的各种方法来获取请求信息。 Request对象中包含了客户端的请求信息,包括请求的URL、请求方法、请求参数、请求头信息以及上传的文件等等。通过调用HttpServletRequest中提供的各种方法,我们可以获取这些信息并进行相应的处理。例如,使用getParameter方法可以获取表单中的数据,使用getHeader方法可以获取请求头信息,使用getInputStream方法可以获取上传的文件流等等。 除了获取请求信息,HttpServletRequest还提供了其他的一些常用功能。例如,使用setAttribute方法可以在请求中设置属性,使用getSession方法可以获取当前会话的Session对象,使用getRequestDispatcher方法可以获取请求分发器等等。 需要注意的是,Request对象是由Servlet容器根据收到的请求创建的,并在请求处理完成之后销毁。因此,在使用Request对象时,需要尽量避免长时间保存和复用,以避免可能的内存泄露等问题。 综上所述,HttpServletRequest作为JavaWeb中的重要组成部分,通过封装和处理HTTP请求信息,为开发者提供了丰富的功能和灵活的扩展性。在Web应用程序中,合理地运用HttpServletRequest对象将极大提升程序的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值