前情提要:
- Servlet是服务器内部的Java程序,为用户提供服务
- 创建Servlet的三种方式:
- 实现Servlet接口
- 继承GenericServlet的抽象类,重写service
- 继承HttpServlet类,重写doGet/doPost方法
- 注册Servlet的两种方式
- 在web.xml注册<servlet><servlet-mapping>
- 使用@WebServlet注解
Servlet是单实例多线程模型,尽量不要砸Servlet中定义成员变量,会存在线程安全问题
Servlet的service可以为用户提供服务,包含两个参数:
- HttpServletRequest 请求
- HttpServletResponse 响应
请求对象
HttpServletRequest的主要方法
方法 | 说明 |
String getParameter("参数名") | 获得请求参数 |
setCharacterEncoding("编码") | 设置请求编码 |
getRequestURL() | 获得请求的URL |
getRequestDispatcher("URL") | 获得请求转发器 |
setAttribute("名称",值) | 保存键值对数据 |
Object getAttribute("名称") | 获得保存的数据 |
响应对象
HttpServletResponse对象,用于向客户端返回数据
主要方法
方法名 | 说明 |
setCharacterEncoding | 设置编码 |
setContentType("类型") | 设置内容类型 |
PrintWriter getWriter() | 获得输出流 |
sendRedirect("URL") | 重定向 |
Servlet的跳转方式
跳转方式有两种:
1. 请求转发
2. 重定向
区别:
1. 跳转方式,请求转发是服务器内部跳转,重定向是服务器外部跳转
2. 请求次数,请求转发是一次请求,重定向是两次请求
3. 速度,请求转发快于重定向
4. 地址栏,请求转发地址栏不会改变,重定向地址栏会改变
5. 数据传递,请求转发可以传递请求中的数据,重定向不能传递
req和resp的作用及常用方法 实用案例
一、作用
二、常用方法
1、req
- req.setCharacterEncoding() 设置对客户端请求和数据库取值时的编码,对post请求有效。
// 解决post请求乱码问题
req.setCharacterEncoding("UTF-8");
- req.getParameter() 用于获取单值的参数。
String username = req.getParameter("username");
String password= req.getParameter("password");
String session= req.getParameter("session");
- req.setAttribute() 在request域中存储数据
//在请求中添加新的数据
req.setAttribute("name",name);
req.setAttribute("age",18);
//请求转发,跳转到hello2
//Dispatcher:分发 forward:转发
req.getRequestDispatcher("/hello2").forward(req,resp);
- req.getAttribute() 获取域中存储的数据
//从请求中获取数据
String name = (String) req.getAttribute("name");
- req.getRequestDispatcher() 获取转发器,参数路径以“/”打头,代表当前web项目根目录。
//请求转发,跳转到hello2
//Dispatcher:分发 forward:转发
req.getRequestDispatcher("/hello2").forward(req,resp);
- req.getContextPath() 返回当前web项目的相对路径。
<a href="<%=request.getContextPath()%>/hello2?method=update&id=<%=test.getId()%>">更新</a>
2、resp
- resp.setCharacterEncoding() 作用是指定服务器响应给浏览器的编码。
- resp.setContentType()用于设置内容类型
//设置响应编码
resp.setCharacterEncoding("UTF-8");
//设置内容类型
resp.setContentType("text/html;charset=UTF-8");
- resp.sendRedirect() 重定向。
//跳转到查询学生的servlet
resp.sendRedirect("/findAllStudents.do");