J2EE之Servlet学习笔记(七):request常见方法

学习资料:http://how2j.cn/k/servlet/servlet-request/555.html#nowhere

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

1.常用
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 = "
登录成功
"; else html = "
登录失败
"; response.setContentType("text/html; charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.println(html); } }

J2EE之Servlet学习笔记(七):request常见方法_第1张图片

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

举栗:
注册页面register.html


 

 
账号 :
爱好 : LOL DOTA

服务端RegisterServlet.java

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 parameters = request.getParameterMap();
 
        Set paramNames = parameters.keySet();
        for (String param : paramNames) {
            String[] value = parameters.get(param);
            System.out.println(param + ":" + Arrays.asList(value));
        }
 
    }
 
}

web.xml



 
    
        HelloServlet
        HelloServlet
        10
    
 
    
        HelloServlet
        /hello
    
     
    
        LoginServlet
        LoginServlet
    
 
    
        LoginServlet
        /login
       
    
        RegisterServlet
        RegisterServlet
    
 
    
        RegisterServlet
        /register
       
 

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

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

举栗:修改HelloServlet.java

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

Hello Servlet!

"); response.getWriter().println(new Date().toLocaleString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

获得结果
J2EE之Servlet学习笔记(七):request常见方法_第2张图片
host: 主机地址
user-agent: 浏览器基本资料
accept: 表示浏览器接受的数据类型
accept-language: 表示浏览器接受的语言
accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
connection: 是否保持连接
cache-control: 缓存时限

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

你可能感兴趣的:(Java,Servlet,J2EE)