Servlet 3.0 先睹为快 发布者:IT168
【内容导航】
* 第1页:Servlet 3.0新特性简述
* 第2页:Servlet中的注释
* 第3页:元数据和通用注释
* 第4页:针对Web框架的可插性
* 第5页:Servlet中的异步处理
* 第6页:现有API的改进及小结
*
展开全部
二、Servlet中的注释
Servlet 3.0中的重大革新之一是支持注释。通过使用注释定义Servlet和过滤器,就无需在web部署描述符(web.xml)中建立Servlet/过滤器条目了。
@WebServlet
为了在web应用中定义Servlet组件,我们可以使用@WebServlet。我们可以将其用于继承类 javax.servlet.http.HttpServlet的类。注释@WebServlet具有许多属性。例如name、urlPatterns和 initParams,我们可以通过它们来定义Servlet的行为。对于url模式,我们必须规定注释本身,或者规定注释的属性。
我们可以利用@WebServlet定义一个简单的Servlet,如下所示:
@WebServlet(name = "GetQuoteServlet", urlPatterns = {"/getquote"} )
public class GetQuoteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
String symbol = request.getParameter("symbol");
out.println("<h1>Stock Price is</h1>" + StockQuoteBean.getPrice(symbol);
} finally {
out.close();
}
}
}
public class StockQuoteBean {
private StockQuoteServiceEntity serviceEntity = new StockQuoteServiceEntity();
public double getPrice(String symbol) {
if(symbol !=null ) {
return serviceEntity.getPrice(symbol);
} else {
return 0.0;
}
}
}
我们可以修改这个Servlet,让它使用注释属性处理来自多个url的请求。
@WebServlet(name = "GetQuoteServlet", urlPatterns = {"/getquote", "/stockquote"} )
public class GetQuoteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
String symbol = request.getParameter("symbol");
out.println("<h1>Stock Price is</h1>" + StockQuoteBean.getPrice(symbol);
} finally {
out.close();
}
}
}
@WebFilter
我们可以使用注释@WebFilter来定义过滤器。这个注释还具有可选参数。我们可以在任何实现了javax.servlet.Filter接口的类上使用@WebFilter。类似于@WebServlet注释,我们也必须为这个注释指定url模式。
@WebFilter(filterName = "AuthenticateFilter", urlPatterns = {"/stock.jsp", "/getquote"})
public class AuthenticateFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String username = ((HttpServletRequest) request).getParameter("uname");
String password = ((HttpServletRequest) request).getParameter("password");
if (username == null || password == null) {
((HttpServletResponse) response).sendRedirect("index.jsp"); }
if (username.equals("admin") && password.equals("admin")) {
chain.doFilter(request, response); }
else {
((HttpServletResponse) response).sendRedirect("index.jsp"); }
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
}
}
@WebInitParam
我们可以使用注释@WebInitParam把init参数指定为Servlet或者过滤器。另外,我们还可以使用注释@WebFilter和@WebServlet 的initParam属性来规定init参数。
@WebServlet(name = "GetQuoteServlet", urlPatterns = {"/getquote"})
@WebInitParam(name = "default_market", value = "NASDAQ")
public class GetQuoteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String market = getInitParameter("default_market");
String symbol = request.getParameter("symbol");
out.println("<h1>Stock Price in " + market + " is</h1>" + StockQuoteBean.getPrice(symbol, market));
} finally {
out.close();
}
}
}
下面是一个将注释@WebInitParam用作@WebServlet和@WebFilter initParams 属性的一部分的例子:
@WebServlet(name = "GetQuoteServlet",
urlPatterns = {"/getquote"},
initParams={@WebInitParam(name="default_market", value="NASDAQ")}
)
public class GetQuoteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String market = getInitParameter("default_market");
String symbol = request.getParameter("symbol");
out.println("<h1>Stock Price in " + market + " is</h1>" + StockQuoteBean.getPrice(symbol, market));
} finally {
out.close();
}
}
}
@WebListener
我们可以将注释@WebListener用于充当给定web应用上下文中各种web应用事件的监听器的类。我们可以使用@WebListener来标注一个实现ServletContextListener、ServletContextAttributeListener、 ServletRequestListener、ServletRequestAttributeListener、 HttpSessionListener和HttpSessionAttributeListener的类。下面是一个使用 ServletContextListener的例子:
@WebListener
public class QuoteServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
context.setInitParameter(“default_market”, “NASDAQ”);
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
@MultipartConfig
使用注释@MultipartConfig可以为Servlet指定多部分组成的MIME类型请求。MIME附件是从该请求对象中读取的。
三、元数据和通用注释
除了上面描述的特定于Servlet的注释之外,Servlet 3.0还支持所有定义为JSR 175(Java元数据规范)和JSR 250(用于Java平台通用注释) 的一部分的注释,包括:
* 与安全有关的注释,诸如@DeclareRoles 和@RolesAllowed
* 使用EJB的注释,诸如@EJB和@EJBs
* 用于资源注入的注释,诸如@resource和@Resources
* 使用JPA的注释,诸如@PersistenceContext、@PersistenceContexts、@PersistenceUnit和@PersistenceUnits
* 生命周期注释,诸如@PostConstruct 和@PreDestroy
* 提供web服务索引的注释,诸如@WebServiceRef 和@WebServiceRefs
四、注释,还是web.xml?
注释的引入使得web部署描述符(web.xml)成为配置web组件时的可选项,而非强制性的。然而,如果您必须对配置进行修改或者更新的话,您可能仍然会使用部署描述符。容器将根据描述符web.xml中的metadata-complete元素的值来决定使用web.xml或者注释。如果该属性的值为true,那么容器就不会处理注释和web片段;部署描述符是所有的元数据信息的唯一来源。只有当该元素metadata-complete不存在或其值不为true时才,容器才会处理注释和web片段。
分享到:
相关推荐
servlet3.0使用手册,这里面有详细的api参考,使用很方便
servlet3.0jar下载,非常好用的控制器工具类包,servlet3.0jar下载,非常好用的控制器工具类包,
用servlet3.0异步技术,实现推送信息至客户端的聊天室
* @project servlet3.0 * servlet3.0的文件上传 * @date:2012-5-21 *在创建项目的时候首先添加Tomcat7.x的支持,然后把apache-tomcat-7.0.27\conf\web.xml拷贝到项目WEB-INF目录下 *把之前的web.xml覆盖.. 配置...
Servlet3.0新特性解析_03_Servlet3.0监听器、过滤器实现方式详解及Servlet的动态注册剖析
基于servlet3.0手写springmvc,实现了IOC和处理器映射器以及处理器映射器功能。
servlet 3,jar 包综合;用于javaEE servlet 3.0 开发使用。
个人整理的JavaServlet 3.0的API,按Java6 API的风格整理
Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、...
servlet3.0.zip
Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解
Servlet 3.0 源码文件,可以在myeclipse中查看servlet的代码,方便编程
servlet3.0-demo, 上传文件demo,基于注解开发
servlet3.0相关的包 包含 sevlet servlet-api jstl jstl-impl相关版本的包
本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...
非常好的学习Servlet3.0资料。特此共享。
使用maven创建web项目使用servlet3.0工具包 默认编辑器下载的servlet为2.3 使用此工具将变为3.0 不再需要每次手动修改
Servlet 3.0jar包和source包
maven servlet 3.0 eclipse config video
官方Servlet 3.0 - Apache Tomcat 7.0.61文档 打包为zip 首页index.htm ,直接浏览即可