您的位置:首页 > 产品设计 > UI/UE

Servlet 基础-request常见方法

2018-01-24 16:58 288 查看
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
4000
;
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章节会提供更好实例帮助大家理解这两个方法的用途
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: