前言
会根据学习进度持续更新,觉得写的不错的可以收藏跟进。不足之处可以评论
编辑器:IDEA
JDK:11
Tomcat:9.0.54
数据库:MySQL 8.0
一、 Servlet配置
声明Servlet
- 3.0以后以注解为准
@WebServlet(name = "类名,可以不写",urlPatterns = "/类名url")
二、 Servlet应用
1. 处理数据请求
- 请求数据方式:超链接和Form表单
1.1. 超链接
- 超链接一般用于获取/查询资源,属于get类型。数据会依附在URL之后,以?分割URL和传输数据,参数之间以&相连
- 缺点:安全性差,长度限制
1.2. Form表单
- Form用于更新资源信息,默认使用GET类型,多使用POST类型。由于POST请求类型理论上没有数据大小限制,可用表单来传比较大的数据
2. 重定向与请求转发
2.1. 重定向
-
用HttpServletResponse对象的sendRedirect()实现
- 可以指定到任意页面
实现类
@WebServlet(name = "RedirectServlet",urlPatterns = "/RedirectServlet") public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); resp.sendRedirect("/RedirectTest"); resp.getWriter().println("redirect test重定向测试"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
测试类
@WebServlet(name = "RedirectTest",urlPatterns = "/RedirectTest") public class RedirectTest extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); PrintWriter pw = resp.getWriter(); pw.println("successful成功"); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
2.2. 请求转发
- 请求转发不能指定任意地址
实现类如下,测试类为RedirectTest
@WebServlet(name = "ForwardServlet",urlPatterns = "/ForwardServlet")
public class ForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
req.getRequestDispatcher("/RedirectTest").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- Forward与include区别
- Forward以请求页面为主体,请求另一个页面
- include把请求页面发回Servlet再次请求另一个页面,Servlet为主体
- 响应结果都是请求页。
2.3 对数据的存取
- 重定向不传输数据,请求转发传输数据
实现类
@WebServlet(name = "ForwardAttributeServlet",urlPatterns = "/ForwardAttributeServlet")
public class ForwardAttributeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
req.setAttribute("objname","jing");
req.getRequestDispatcher("/ResultTest").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
@WebServlet(name = "RedirectAttributeServletServlet",urlPatterns = "/RedirectAttributeServlet")
public class RedirectAttributeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
req.setAttribute("objname","jing");
resp.sendRedirect("/ResultTest");
resp.getWriter().println("redirect test重定向测试");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
测试类
@WebServlet(name = "ResultTest",urlPatterns = "/ResultTest")
public class ResultTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter pw =