Servlet3.0 注解开发
Servlet的配置信息都是在web.xml中完成的。如果,我们创建的Servlet非常多,就会导致web.xml中的配置非常臃肿,不便于管理。Servlet3.0为我们提供了注解支持,创建Servlet的时候。在这个Servlet类上面添加注解就可以完成Servlet的配置。
1. Servlet3.0新特性
- 注解支持
该版本增加了若干注解简化,Servlet、过滤器(Filter)和监听器(Listener)的声明,使得 web.xml 部署描述文件从该版本开始不再是必选的。 - 支持web模块(servlet filter Listener)
- 支持Servlet异步处理
- 文件上传API简化
2. 为什么要使用注解
- web.xml中配置过多servlet不便于管理,容易出错;
- 注解开发使得开发更敏捷,效率更高;
- 注解开发是一种趋势;
3. 使用IDEA创建3.0版本的Servlet
新版的IDEA(2017版本)创建的Servlet默认是3.0版本的,所以我们只需要新建一个Servlet,然后用注解配置即可。
步骤:
第一步 : 新建一个Servlet :
在包上面右击New --> Servlet
给Servlet取名,之后点击OK
第二步 : 配置Servlet
创建完成后,Servlet类上面会默认添加一个注解@WebServlet(name=“Servlet3Demo”)。这个@WebServlet注解就是用来配置当前这个Servlet的。
这个注解中常用的有两个属性 :
1.name属性: 相当于web.xml的(servlet-name)
2.urlPattenrns属性: 编写访问servlet的路径 类似于 (url-pattern)
我们需要手动在**@WebServlet**注解中添加URLPatterns属性用来映射路径。
package com.renly.servlet_01;
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 java.io.IOException;
/**
* 1. name属性: 相当于web.xml的 <servlet-name>;
* 2. urlPatterns属性: 编写访问servlet的路径 类似于 <url-pattern>
*/
@WebServlet(name = "ServletDemo",urlPatterns = "/servlet")
public class ServletDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
第三步 : 启动tomcat并访问
访问路径 : http://localhost:8080/servlet
运行结果 :
4. 优化
在doPost方法中调用doGet方法。这样代码在goGet方法中写就可以了。
4.1 优化一
4.2 优化二
基于IDEA的模板,快速创建Servlet。
【模板配置代码】
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet("/${Entity_Name}")
public class ${Class_Name} extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
doGet(request,response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
}
}
模板设置
5. Servlet开发最终版本
@WebServlet("/lastServlt")
public class LastServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}