Servlet.x新特性概述
Servlet标准一直在推进,Servlet3.0相比之前的版本有很多特性和改进。
学习Java Web开发,Servlet绝对是最重要也是最应该好好掌握和深入理解的部分。
异步处理支持
Servlet3.x之前的针对每个请求都是阻塞的,只要服务器没有处理完任务时不会响应客户端的,这样的体验并不好。 解决方法可以是借组消息中间件来异步处理,Servlet3.x开始支持开启新线程异步处理,无需等待新线程处理完成即可响应客户端。
@WebServlet
@WebServlet 用于将一个类声明为Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。
案例:
package servlet; import pojo.User; import service.IUserService; import service.UserService; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID=1L; private IUserService service; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); String name=request.getParameter("name"); String password=request.getParameter("password"); service=new UserService(); User user=service.userLogin(name,password); if(user!=null){ session.getAttribute("user"); request.getRequestDispatcher("/index2").forward(request,response); }else { response.sendRedirect("login.jsp"); } } protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
文件上传下载新方式支持
Servlet3.x之前对于文件上传并不友好,编写相对麻烦。
Servlet3.x之后提供了Part类来表示上传文件对象,完全可以借助该对象实现上传功能。 备注:可以去查看Part的源码和其中的方法
技术心得:
如果请求的是MINE类型不是multipart/form-date,则不能使用某些方法,否则将抛异常。