HttpServlet
前提导入Servlet所需要的的jar包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
常见应用
-
获取前端请求的参数
-
请求转发
代码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置前端数据,避免后台接收乱码
req.setCharacterEncoding("utf-8");
//获取前端参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbies = req.getParameterValues("hobbies");
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbies));
//请求转发
req.getRequestDispatcher("/success.html").forward(req, resp);
}
请求转发和重定向的区别
-
请求转发的特点(req.getRequestDispatcher("/success.html").forward(req, resp))
- 访问地址栏不变化
- 一次请求
- 只能访问当前服务器的资源,可以使用request对象共享数据
-
重定向的特点(response.sendRedirect("/day15/responseDemo2"))
- 访问地址栏变化
- 两次请求
- 可以访问其他服务器的资源,不可以使用request对象共享数据
路径的写法
-
绝对路径:可以确定唯一资源,比如http://localhost/day15/responseDemo2, /day15/responseDemo2
-
相对路径:不能确定唯一资源
-
使用规则:资源给谁用? 请求是从哪来的?
-
如果是给浏览器用的需要加虚拟目录(项目的访问目录)可以动态获取 getContextPath(),比如 ,,重定向
-
如果是给服务器自己使用,不需要加虚拟目录,比如请求转发
-