Servlet 3.0 (2) Servlet中的注释

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值