Servlet 基础-request常见方法

request对象的类是HttpServletRequest,提供了很多有实用价值的方法

  • request的常见方法

    request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" + 
    request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" + 
    request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
    request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
    request.getRemoteHost(): 浏览器所处于的客户机的主机名
    request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
    request.getLocalAddr(): 服务器的IP地址
    request.getLocalName(): 服务器的主机名
    request.getMethod(): 得到客户机请求方式一般是GET或者POST


    import java.io.IOException;
    import java.io.PrintWriter;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class LoginServlet extends HttpServlet {
     
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String name = request.getParameter("name");
            String password = request.getParameter("password");
     
            System.out.println("浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有): " + request.getRequestURL());
            System.out.println("浏览器发出请求的资源名部分,去掉了协议和主机名: " + request.getRequestURI());
            System.out.println("请求行中的参数部分: " + request.getQueryString());
            System.out.println("浏览器所处于的客户机的IP地址: " + request.getRemoteAddr());
            System.out.println("浏览器所处于的客户机的主机名: " + request.getRemoteHost());
            System.out.println("浏览器所处于的客户机使用的网络端口: " + request.getRemotePort());
            System.out.println("服务器的IP地址: " + request.getLocalAddr());
            System.out.println("服务器的主机名: " + request.getLocalName());
            System.out.println("得到客户机请求方式: " + request.getMethod());
     
            String html = null;
     
            if ("admin".equals(name) && "123".equals(password))
                html = "<div style='color:green'>登录成功</div>";
            else
                html = "<div style='color:red'>登录失败</div>";
     
            response.setContentType("text/html; charset=UTF-8");
            PrintWriter pw = response.getWriter();
            pw.println(html);
     
        }
     
    }
  • 获取参数

    request.getParameter(): 是常见的方法,用于获取单值的参数
    request.getParameterValues(): 用于获取具有多值得参数,比如注册的时候提交的爱好,可以使多选的。
    request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。

    本例准备了一个注册的例子
    包括一个注册页面 register.html
    服务端的 RegisterServlet

    分别演示了获取单值参数,多值参数以及遍历所有的参数

    <!DOCTYPE html>
     
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     
    <form action="register" method="get">
        账号 : <input type="text" name="name"> <br>
        爱好 : LOL<input type="checkbox" name="hobits" value="lol">
            DOTA<input type="checkbox" name="hobits" value="dota"> <br>
           
             <input type="submit" value="注册">
    </form>
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.Map;
    import java.util.Set;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class RegisterServlet extends HttpServlet {
     
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
            System.out.println("获取单值参数name:" + request.getParameter("name"));
     
            String[] hobits = request.getParameterValues("hobits");
            System.out.println("获取具有多值的参数hobits: " + Arrays.asList(hobits));
     
            System.out.println("通过 getParameterMap 遍历所有的参数: ");
            Map<String, String[]> parameters = request.getParameterMap();
     
            Set<String> paramNames = parameters.keySet();
            for (String param : paramNames) {
                String[] value = parameters.get(param);
                System.out.println(param + ":" + Arrays.asList(value));
            }
     
        }
     
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
     
        <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>HelloServlet</servlet-class>
            <load-on-startup>10</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
         
        <servlet>
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>LoginServlet</servlet-class>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>   
        <servlet>
            <servlet-name>RegisterServlet</servlet-name>
            <servlet-class>RegisterServlet</servlet-class>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>RegisterServlet</servlet-name>
            <url-pattern>/register</url-pattern>
        </servlet-mapping>   
     
    </web-app>
  • 获取头信息

    request.getHeader() 获取浏览器传递过来的头信息。 
    比如getHeader("user-agent") 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
    request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息

    在本例,修改HelloServlet,使其获取头信息
    访问HelloServlet获取如下头信息:
    host: 主机地址
    user-agent: 浏览器基本资料
    accept: 表示浏览器接受的数据类型
    accept-language: 表示浏览器接受的语言
    accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
    connection: 是否保持连接
    cache-control: 缓存时限

    import java.io.IOException;
    import java.util.Date;
    import java.util.Enumeration;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class HelloServlet extends HttpServlet{
         
        public void init(ServletConfig config){
            System.out.println("init of Hello Servlet");
        }
     
        public void doGet(HttpServletRequest request, HttpServletResponse response){
         
            Enumeration<String> headerNames= request.getHeaderNames();
            while(headerNames.hasMoreElements()){
                String header = headerNames.nextElement();
                String value = request.getHeader(header);
                System.out.printf("%s\t%s%n",header,value);
            }
             
            try {
                response.getWriter().println("<h1>Hello Servlet!</h1>");
                response.getWriter().println(new Date().toLocaleString());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
         
    }
  • 服务端传参

    setAttribute和getAttribute可以用来在进行服务端跳转的时候,在不同的Servlet之间进行数据共享
    在MVC章节会提供更好实例帮助大家理解这两个方法的用途


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值