【51CTO精選譯文】在51CTO之前的一系列Java EE 6的文章中,已經介紹了諸如CDI和Bean驗證等新技術,以及Web分片,Facelets,無接口視圖,以及標准API等支持,通過這些特性可以更容易地開發企業或Web應用程序。此外,Java EE 6平台許多地方的安全性也得到了極大的增強,特別是注解現在可以用在更多類型的Java EE組件中了,用於依賴性注入的注解現在也標准化了,使可注入類具有更好的跨框架遷移特性。
注解支持更多類型的Java EE組件
Java EE 5引入了最簡單的基於注解的編程模型,在新版本中得到了擴展,可以支持更多類型的Java EE組件,如Servlet和JSF組件。例如,在Web應用程序中再也不用部署描述符定義Servlet了,你需要做的就是使用@WebServlet注解標記一個類,如:
- @WebServlet(name="CalculatorServlet", urlPatterns={"/calc", "/getVal"})
- public class CalculatorServlet extends HttpServlet{
- public void doGet(HttpServletRequest req, HttpServletResponse res) {
- ...
- }
- ...
- }
@WebServlet注解是Servlet 3.0提供的注解之一,下面是Servlet 3.0中提供的其它注解:
@WebFilter:在Web應用程序中定義Servlet過濾器;
@WebInitParam:指定所有必須傳給Servlet或Servlet過濾器的init參數;
@WebListener:注解一個監聽器,在特定Web應用程序上下文中獲得各種不同操作事件;
@MultipartConfig:在一個Servlet上指定時,表示Servlet的MIME類型是multipart/*。
JSF 2.0中注解支持的一個好處是簡化了配置托管Bean的方法,不再需要在JSF配置文件faces-config.XML中通過配置注冊一個托管Bean,現在你只需要使用@ManagedBean注解標記托管Bean,並使用RequestScope注解設置其范圍即可,如:
- import Javax.faces.bean.ManagedBean;
- import Javax.faces.bean.RequestScoped;
- @ManagedBean(name="userBean")
- @RequestScoped
- public class UserBean {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public UserBean() {}
- }
JSF 2.0還提供了其它一些注解,如:
@ManagedProperty:將Bean的屬性標記為托管屬性;
@ResourceDependency:聲明組件將要使用的資源;
@ListenFor:允許組件將特定事件作為一個監聽器訂閱到組件;
@FacesConverter:將類注冊為一個Converter,也就是說,這個類可以執行Object到String,和String到Object的轉換;
@FacesValidator:將類注冊為一個Validator,也就是說,這個類可以執行驗證。
在Web分片的例子中,我們在web.XML文件中使用<metadata-complete>元素通知Web容器是否要尋找注解,如果你將<metadata-complete>設為false,或者在文件中不指定<metadata-complete>元素,那麼在部署期間,容器必須掃描注解和Web分片,為Web應用程序構建有效的元數據。如果將<metadata-complete>設為true,將由部署描述符為Web應用程序提供所有的配置信息。在這個例子中,Web容器不會搜索注解和Web分片。
隨著對注解和新方法ServletContext的支持,web.xml對Servlet 3.0來說顯得可有可無,也就是說,在應用程序war文件中不再需要包括一個web.XML文件。