Serlvet 中获取请求信息:ServletRequest(封装请求信息)和ServletResponse(封装响应信息)

如何在 Serlvet 中获取请求信息:

1.Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法

public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException
			
//ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
//ServletResponse: 封装了响应信息, 如果想给用户什么响应, 均可以使用该接口的方法实现. 

这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.

2.ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

①. 获取请求参数:

1. 只能获取参数的第一个值。

	>String getParameter(String name): 根据请求参数的名字, 返回参数值. 
	若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值. 

例如在login.html页面中设计参数的多个值

		interesting:
		<input type="checkbox" name="interesting" value="reading"/>Reading
		<input type="checkbox" name="interesting" value="game"/>Game
		<input type="checkbox" name="interesting" value="party"/>Party

		<input type="submit" value="Submit"/>

在LoginServlet.java文件中来获取参数的值,那么在服务器上运行login.html文件后参数的值只能获取到第一个提交的值。

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		
	String interesting = request.getParameter("insteresting");
	System.out.println("insteresting");
}

控制台输出结果为:interesting
2. 能获取到参数对应的字符串数组

	>String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组. 

同样在login.html文件中设置参数的多个值,在LoginServlet.java文件中来获取参数的值,那么在服务器上运行login.html文件后参数的值能获取到参数对应的字符串数组。

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		
	String[] interestings = request.getParameterValues("interesting");
	for(String interest:interestings) {
		System.out.println("---> "+interest);
	}
}

控制台输出结果如下:
1.2
3.获取参数名对应的 Enumeration 对象

	> Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象, 
	类似于 ServletConfig(或 ServletContext)getInitParameterNames() 方法. 

具体实现代码如下:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		Enumeration<String> names = request.getParameterNames();
		while(names.hasMoreElements()) {
			String name = names.nextElement();
			String val = request.getParameter(name);
			
			System.out.println(name + ": "+val);
		}
	}

控制台输出结果如下:
1.3
4.获取参数的键值对

扫描二维码关注公众号,回复: 11114493 查看本文章
> Map getParameterMap(): 返回请求参数的键值对: key: 参数名,  value: 参数值, String 数组类型. 

具体实现代码如下:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		Map<String, String[]> map = request.getParameterMap();
		for(Map.Entry<String, String[]> entry: map.entrySet()){
			System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));  
		}	
	}

控制台输出结果如下:
1.4

②. 获取请求的 URI:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		
		String requestURI = httpServletRequest.getRequestURI();
		System.out.println(requestURI);
		}
	}

控制台输出结果如下:
2

③. 获取请求方式:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		
		String method = httpServletRequest.getMethod();
		System.out.println(method);
		}
	}

控制台输出结果为:GET

④. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		
		String queryString = httpServletRequest.getQueryString();
		System.out.println(queryString); 
		}
	}

控制台输出结果如下:
3

⑤. 获取请求的 Serlvet 的映射路径
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		
		String servletPath = httpServletRequest.getServletPath();
   		System.out.println(servletPath); 
		}
	}

控制台输出结果如下:
4

⑥. 和 attribute 相关的几个方法:
  1. HttpServletRequest:是ServletRequest的子接口,针对于http请求所定义,里面包含了大量获取http请求的相关方法;
  2. ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现;
    ①getWriter():返回PrintWriter对象,调用该对象的print方法,将会把print()方法的参数直接打印到客户的浏览器上;
    ②设置响应的内容类型,response.setContentType(“application/msword”);
    ③httpServletResponse.sendRedirect("") 请求的重定向,(此方法为HttpServletResponse中定义的)

3.HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.

4.ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.

①. *getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		out.println("helloword..."); //将会打印到客户的浏览器上
		}
	}

②. 设置响应的内容类型: response.setContentType(“application/msword”);

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		
		response.setContentType("application/msword");
		
		PrintWriter out = response.getWriter();
		out.println("helloword..."); //将会打印到客户的浏览器上
		}
	}

当在客户的浏览器上提交时,服务器会做出响应从而可以下载word文档。
③. void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

发布了54 篇原创文章 · 获赞 17 · 访问量 2424

猜你喜欢

转载自blog.csdn.net/qq_44096670/article/details/105183864