版权声明:欢迎大家转载,转载请注明出处blog.csdn.net/tantexian。 https://blog.csdn.net/tantexian/article/details/50414368
Servlet3.0中Servlet的使用
目录
1.注解配置
2.异步调用
3.文件上传
相对于之前的版本,Servlet3.0中的Servlet有以下改进:
l 支持注解配置。
l 支持异步调用。
l 直接有对文件上传的支持。
在这篇文章中我将主要讲这三方面的应用示例。
1.注解配置
在以往我们的Servlet都需要在web.xml文件中进行配置(Servlet3.0同样支持),但是在Servlet3.0中引入了注解,我们只需要在对应的Servlet类上使用@WebServlet注解进行标记,我们的应用启动之后就可以访问到该Servlet。对于一个@WebServlet而言,有一个属性是必须要的,那就是它的访问路径。@WebServlet中有两个属性可以用来表示Servlet的访问路径,分别是value和urlPatterns。value和urlPatterns都是数组形式,表示我们可以把一个Servlet映射到多个访问路径,但是value和urlPatterns不能同时使用。如果同时使用了value和urlPatterns,我们的Servlet是无法访问到的。下面是一个使用@WebServlet的简单Servlet示例。
Java代码 收藏代码
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* Servlet3.0支持使用注解配置Servlet。我们只需在Servlet对应的类上使用@WebServlet进行标注,
* 我们就可以访问到该Servlet了,而不需要再在web.xml文件中进行配置。@WebServlet的urlPatterns
* 和value属性都可以用来表示Servlet的部署路径,它们都是对应的一个数组。
*/
@WebServlet(name="exampleServlet", urlPatterns="/servlet/example")
public class ExampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello User.");
}
}
初始化参数
使用@WebServlet时也可以配置初始化参数,它是通过@WebServlet的initParams参数来指定的。initParams是一个@WebInitParam数组,每一个@WebInitParam代表一个初始化参数。
Java代码 收藏代码
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 带初始化参数的Servlet
* WebServlet的属性initParams可以用来指定当前Servlet的初始化参数,它是一个数组,
* 里面每一个@WebInitParam表示一个参数。
*/
@WebServlet(value="/servlet/init-param", initParams={@WebInitParam(name="param1", value="value1")})
public class WebInitParamServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Enumeration<String> paramNames = this.getServletConfig().getInitParameterNames();
String paramName;
while (paramNames.hasMoreElements()) {
paramName = paramNames.nextElement();
resp.getWriter().append(paramName + " = " + this.getServletConfig().getInitParameter(paramName));
}
resp.getWriter().close();
}
}
Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述。
在Servlet3.0中,可以使用@WebServlet注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。
@WebServlet注解的相关属性 | ||
NO. | 属性名 | 描述 |
1 | asyncSupported | 声明Servlet是否支持异步操作模式 |
2 | description | Servlet的描述信息 |
3 | displayName | Servlet的显示名称 |
3 | initParams | Servlet的初始化参数 |
5 | name | Servlet的名称 |
6 | urlPatterns | Servlet的访问URL |
7 | value | Servlet的访问URL |
Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。
像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
也定义多个URL访问:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})