`
whiteangell
  • 浏览: 10942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Netbeans6.8+GlassFishV3体验JEE 6之一Servlet3.0

阅读更多
     Sun 刚刚发布了NetBeans6.8与GlassfishV3和JEE6,我迫不及待地下载安装,并进行了简单的测试;有了JEE容器,有了开发工具,咱们就进行JEE6体验之旅吧!
     Servlet3.0规范——JSR 315(Java Specification Request)。其高级目标包括可插拔web框架、EoD(ease of development——易于开发)特征、支持异步和Comet、安全、与其他规范结合、以及其它各项改进。注解@WebServlet、@@WebFilter、@WebListener分别对应Servlet、过滤器、与Servlet侦听。
     servlet 3.0规范为使用它的开发人员实现了以下目标:简单性、减轻开发工作量、遵循web 2.0原则。
  为了使开发过程更加轻松,Servlet 3.0引入了注释。类似于EJB 3.1的改变,注释的引入使得web部署描述符web.xml成为可选项。
    可插性
  每当我们使用第三方框架如Struts、JSF或者Spring的时候,我们需要在web.xml中为相应的Servlet添加相应的条目,这使得web部署描述符变得繁琐并且难以维护。 Servlet 3.0中引入的可插性使得web应用程序更加模块化,也更加易于维护。由于可插性是通过web片段来实现的,所以它使得开发人员不必再在web.xml中建立太多的Servlet配置条目。
  异步处理
  新的Servlet规范中的另一项重大变化是支持异步处理,这对于AJAX应用程序来说是一个非常有用的特性。当Servlet创建发送请求的线程的时候,它通常必须等待诸如数据库或者消息连接等资源返回响应,之后它才能在这个线程中执行其他操作。异步处理通过允许线程执行其它的操作而避免了这样的阻塞式请求。
一、新建JEE6项目
  打开Netbeans6.8,选择“新建项目”—>“java web”—>“web 应用程序”然后下一步:

在项目名称处输入“JEE6Test”下一步:

服务器:选择“GlassFishV3”,Java EE 版本:选择“Java EE WEB”点击完成则建立一个项目名称是:“JEE6Test” WEB项目。
二、Servlet体验
新建包com.servlet,把测试的代码都放在这个目录中,然后在com.servlet包上单击右键; 选择“新建”—>“servlet”如下图:

输入名称“TestServlet”点击完成,去掉注释代码后如下:
package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="TestServlet", urlPatterns={"/TestServlet"})
public class TestServlet extends HttpServlet {
   
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet TestServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet TestServlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
           
        } finally { 
            out.close();
        }
    } 

   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

   
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

  
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

选中TestServlet.java点击右键,选择运行则可以看Servlet TestServlet at /JEE6TEst页面。真是简单!@WebServlet(name="TestServlet", urlPatterns={"/TestServlet"})解决了一切问题。Name=”TestServlet”是定义了Servlet名称是TestServlet,urlPatterns=={"/TestServlet"}定义了Servlet访问的URL路径;在浏览器输入http://localhost:8080/JEE6Test/TestServlet就可以看到效果了。
Servlet 3.0中的重大革新之一是支持注释。通过使用注释定义Servlet和过滤器,就无需在web部署描述符(web.xml)中建立Servlet/过滤器条目了。
  为了在web应用中定义Servlet组件,我们可以使用@WebServlet。我们可以将其用于继承类javax.servlet.http.HttpServlet的类。注释@WebServlet具有许多属性。例如name、urlPatterns和initParams,我们可以通过它们来定义Servlet的行为。对于url模式,我们必须规定注释本身,或者规定注释的属性。
三、体验过滤器(Filter)
  选择com.servlet单击右键,选择“WEB”—》“过滤器”下一步,在对话框中输入“TestFilter”点击完成。

在新建过滤器配置过滤器部署对话框中“新建”在 URL框中输入 “/*”确定,然后完成。

则生成如下代码:
package com.servlet;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(filterName = "TestFilter", urlPatterns = {"/*"})
public class TestFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
    }

    public void destroy() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

  一个注解:@WebFilter(filterName = "TestFilter", urlPatterns = {"/*"})完成了过滤器的配置。名称是TestFilter,对/*所有的访问都过滤;功能是设置编码是UTF-8格式。
  使用注释@WebFilter来定义过滤器。这个注释还具有可选参数。我们可以在任何实现了javax.servlet.Filter接口的类上使用@WebFilter。类似于@WebServlet注释,我们也必须为这个注释指定url模式。
四、体验Listener
在com.servlet包名称上单击右键,选择新建选择:“WEB-WEB应用程序侦听程序”如下图:

点击下一步在名称中输入:“TestServletListener”则生成以下代码:
package com.servlet;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener()
public class TestServletListener implements HttpSessionListener {

  public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session Created");
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("sessionDestroyed");
    }
}

又是一个注解@WebListener()完成了配置,启动服务器,侦听已经生效了。
将注释@WebListener用于充当给定web应用上下文中各种web应用事件的监听器的类。我们可以使用@WebListener来标注一个实现ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener和HttpSessionAttributeListener的类。
除了上面描述的特定于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
呵呵。。。。。。简单吗!开发效率高吧!真是一个爽!
下一节我们体验EJB3.1......

  • 大小: 59.7 KB
  • 大小: 58.2 KB
  • 大小: 51.1 KB
  • 大小: 38.7 KB
  • 大小: 70 KB
  • 大小: 69.3 KB
  • 大小: 69.8 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics