第七章:Servlet

7.5HttpServletRequest类

7.5.1HttpServletRequest 类有什么作用

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。

7.5.2HttpServletRequest 类的常用方法

1、getRequestURI() 获取请求的资源路径;
2、getRequestURL() 获取请求的统一资源定位符(绝对路径);
3、getRemoteHost() 获取客户端的 ip 地址;
4、getHeader() 获取请求头;
5、getParameter() 获取请求的参数;
6、getParameterValues() 获取请求的参数(多个值的时候使用);
7、getMethod() 获取请求的方式 GET 或 POST;
8、setAttribute(key, value) 设置域数据;
9、getAttribute(key) 获取域数据;
10、getRequestDispatcher() 获取请求转发对象。

1.	public class RequestAPIServlet extends HttpServlet {  
2.	@Override  
3.	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,  
4.	IOException {  
5.	// i.getRequestURI() 获取请求的资源路径  
6.	System.out.println("URI => " + req.getRequestURI());  
7.	// ii.getRequestURL() 获取请求的统一资源定位符(绝对路径)  
8.	System.out.println("URL => " + req.getRequestURL());  
9.	// iii.getRemoteHost() 获取客户端的 ip 地址  
10.	/** 
11.	* 在 IDEA 中,使用 localhost 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1<br/> 
12.	* 在 IDEA 中,使用 127.0.0.1 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1<br/> 
13.	* 在 IDEA 中,使用 真实 ip 访问时,得到的客户端 ip 地址是 ===>>> 真实的客户端 ip 地址<br/> 
14.	*/  
15.	System.out.println("客户端 ip 地址 => " + req.getRemoteHost());  
16.	// iv.getHeader() 获取请求头  
17.	System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));  
18.	// vii.getMethod() 获取请求的方式 GET 或 POST  
19.	System.out.println( "请求的方式 ==>> " + req.getMethod() );  
20.	}  21.	}  

7.5.3获取请求参数

表单代码:

1.	<body>  
2.	<form action="http://localhost:8080/07_servlet/parameterServlet" method="get">  
3.	用户名:<input type="text" name="username"><br/>  
4.	密码:<input type="password" name="password"><br/>  
5.	兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++  
6.	<input type="checkbox" name="hobby" value="java">Java  
7.	<input type="checkbox" name="hobby" value="js">JavaScript<br/>  
8.	<input type="submit">  
9.	</form>  
10.	</body>  

获取请求参数代码

1.	public class ParameterServlet extends HttpServlet {  
2.	@Override  
3.	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,  
4.	IOException {  
5.	// 获取请求参数  
6.	String username = req.getParameter("username");  
7.	String password = req.getParameter("password");  
8.	String[] hobby = req.getParameterValues("hobby");  
9.	System.out.println("用户名:" + username);  
10.	System.out.println("密码:" + password);  
11.	System.out.println("兴趣爱好:" + Arrays.asList(hobby));  
12.	}  13.	}  

7.5.4get请求的中文乱码问题解决

1.	// 获取请求参数  
2.	String username = req.getParameter("username");  
3.	//1 先以 iso8859-1 进行编码  
4.	//2 再以 utf-8 进行解码  
5.	username = new String(username.getBytes("iso-8859-1"), "UTF-8")  

7.5.5post请求的中文乱码问题解决

1.	@Override  
2.	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,  
3.	IOException {  
4.	// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题  
5.	req.setCharacterEncoding("UTF-8");  
6.	System.out.println("-------------doPost------------");  
7.	// 获取请求参数  
8.	String username = req.getParameter("username");  
9.	String password = req.getParameter("password");  
10.	String[] hobby = req.getParameterValues("hobby");  
11.	System.out.println("用户名:" + username);  
12.	System.out.println("密码:" + password);  
13.	System.out.println("兴趣爱好:" + Arrays.asList(hobby));  14.	}  

7.5.6请求的转发

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
第七章:Servlet
Servlet1中的代码:

1.	public class Servlet1 extends HttpServlet {  
2.	@Override  
3.	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,  
4.	IOException {  
5.	// 获取请求的参数(办事的材料)查看  
6.	String username = req.getParameter("username");  
7.	System.out.println("在 Servlet1(柜台 1)中查看参数(材料):" + username);  
8.	// 给材料 盖一个章,并传递到 Servlet2(柜台 2)去查看  
9.	req.setAttribute("key1","柜台 1 的章");  
10.	// 问路:Servlet2(柜台 2)怎么走  
11.	/** 
12.	* 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录 
13.	<br/> 
14.	* 
15.	*/  
16.	RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");  
17.	// RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");  
18.	// 走向 Sevlet2(柜台 2)  
19.	requestDispatcher.forward(req,resp);  
20.	}  21.	}  

Servlet2中的代码:

1.	public class Servlet2 extends HttpServlet {  
2.	@Override  
3.	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,  
4.	IOException {  
5.	// 获取请求的参数(办事的材料)查看  
6.	String username = req.getParameter("username");  
7.	System.out.println("在 Servlet2(柜台 2)中查看参数(材料):" + username);  
8.	// 查看 柜台 1 是否有盖章  
9.	Object key1 = req.getAttribute("key1");  
10.	System.out.println("柜台 1 是否有章:" + key1);  
11.	// 处理自己的业务  
12.	System.out.println("Servlet2 处理自己的业务 ");  
13.	}  14.	}

7.5.7base标签

第七章:Servlet

1.	<!DOCTYPE html>  
2.	<html lang="zh_CN">  
3.	<head>  
4.	<meta charset="UTF-8">  
5.	<title>Title</title>  
6.	<!--base 标签设置页面相对路径工作时参照的地址  
7.	href 属性就是参数的地址值  
8.	-->  
9.	<base href="http://localhost:8080/07_servlet/a/b/">  
10.	</head>  
11.	<body>  
12.	这是 a 下的 b 下的 c.html 页面<br/>  
13.	<a href="../../index.html">跳回首页</a><br/>  
14.	</body>  
15.	</html>  

7.5.8Web中的绝对路径和相对路径

绝对路径:http://ip:port/工程路径/资源路径
相对路径:
1、. 表示当前目录;
2、… 表示上一级目录;
3、资源名 表示当前目录下的资源。
注意:在实际开发中,路径都使用绝对路径,而不简单的使用相对路径,或者是使用base+相对路径。

7.5.9Web中/(斜杠)的不同含义

在Web中,/(斜杠)是一种绝对路径。
/(斜杠)如果被浏览器解析,得到的地址是:http://ip:port/;
/(斜杠)如果被服务器解析,得到的地址是:http://ip:port/工程路径;

上一篇:前端JavaScript基础


下一篇:带图片的登录