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是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...
Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个"javax.servlet-api-3.0.1.jar"文件是Servlet 3.0规范的API实现,包含了开发人员编写...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
Servlet 3.0是Java服务器端编程的重要组成部分,主要用于构建动态Web应用程序。它是由Java Community Process(JCP)制定的标准,定义了一套用于处理HTTP请求的API,使得开发者可以编写服务器端程序来处理来自Web...
这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet API上引入了多项重大改进,极大地提升了开发效率和灵活性。这个压缩包包含了servlet3.0的jar包和对应的doc文档,非常适合开发者学习和使用。 首先,我们...
Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...
【标题】"maven servlet 3.0 eclipse config video" 提供的是关于如何在Eclipse集成开发环境中配置Maven和Servlet 3.0的视频教程。这个教程旨在帮助开发者了解和掌握如何有效地利用Maven构建Java Web项目,并利用...
在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...
最后,关于"链接.txt"、"创建MavenWeb项目Servlet3.0的模板"和"Idea安装插件"这三个文件,它们可能是教程的补充资料。"链接.txt"可能包含其他相关资源的URL;"创建MavenWeb项目Servlet3.0的模板"可能是一个详细的...
Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...
【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...
Servlet 3.0是Java服务器页面(JSP)和Servlet技术的一个重要版本更新,它引入了许多新特性,提升了Web应用程序的开发效率和灵活性。在JSR-315(JavaTM Servlet 3.0 API Specification)中,专家小组对这项规范进行...
Servlet3.0是Java Servlet API的一个重要版本更新,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。在这个主题中,我们将深入探讨Servlet3.0的三大关键特性:监听器(Listeners)、过滤器(Filters)的新...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。在这个"Servlet3.0相关的包"中,包含了以下几个关键组件: 1. **Servlet**: 这是Java ...
### Servlet 3.0 新增功能详解 #### 引言 Servlet 技术自问世以来一直是 Java Web 开发的核心组成部分之一。随着技术的发展,Servlet 规范也在不断更新以适应新的需求和技术趋势。Servlet 3.0 版本是 Java EE 6 的...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。在这个"Servlet3.0 Demo"项目中,我们可以看到一个典型的使用Servlet3.0特性的示例。以下是...
Servlet 3.0是Java Web开发中的一个重要里程碑,它带来了许多新特性和改进,使得开发者在构建Web应用程序时更加高效和灵活。Apache Tomcat 7.0.61是广泛使用的开源Servlet容器,它实现了Servlet 3.0规范,提供了稳定...
Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...
Servlet 3.0是Java Servlet规范的一个重要版本,它在原有的Servlet 2.x基础上引入了多项新特性,极大地提升了Web应用程序的开发效率和灵活性。在这个版本中,servlet-api.jar作为核心库,包含了运行Servlet应用所...