Servlet 3.0

     
  • 第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,如下所示:

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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的请求。

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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模式。

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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参数。

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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 属性的一部分的例子:

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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的例子:

    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    -->@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附件是从该请求对象中读取的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值