之前两篇学习了用Java写servlet接口及一些需要细节。

本片主要是加强对HttpRequest 的相关用法的理解及使用。

一、写个新的Servlet 

1、先在web目录下新建register.html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="register" method="post">
用户名:<input type="text" name="name">
密码:<input type="text" name="password"><br/>
注册领域:美食<input type="checkbox" name=territoy value="food">
运动<input type="checkbox" name="territoy" value="motivtion">
画画<input type="checkbox" name="territoy" value="plaint"><br>

<input type="submit" value="注册"> 


</form>
</body>
</html>

 

2、在web.xml里新加一个<servlet>

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

3、新建Register.java 类

二、HttpRequest 说明

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

在RegisterSerlvet类里验证:

public class RegisterServlet  extends HttpServlet{
	
	public void service(HttpServletRequest request,HttpServletResponse response) throws 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(): 用于获取具有多值的参数,比如注册时候提交的 "hobits",可以是多选的。
request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。

修改类:

		String name = request.getParameter("name");
        String password = request.getParameter("password");

		String[] territorys = request.getParameterValues("territoy");
		Map <String,String[]> territorymap = request.getParameterMap();  //获取value的值
		Set<String> set = territorymap.keySet();  //key值
		for(String param:set) {
			String[] value = territorymap.get(param);
			System.out.println(param +":"+Arrays.asList(value));
		}

验证:

 

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

我们可以从浏览器获取到的头信息:
host: 主机地址
user-agent: 浏览器基本资料
accept: 表示浏览器接受的数据类型
accept-language: 表示浏览器接受的语言
accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
connection: 是否保持连接
cache-control: 缓存时限

验证:

        System.out.println(request.getHeader("accept-encoding"));
        System.out.println(request.getHeader("accept-language"));
        System.out.println(request.getHeader("user-agent"));
        Enumeration<String> enume = request.getHeaderNames();	
        while(enume.hasMoreElements()) {
        	String key = enume.nextElement();
        	String value = request.getHeader(key);
        	System.out.println(key + ":" + value);
        }

结果:

 

还有很多关于request的方法,比如getCookies 、getSession...

 

 

 

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐