Servlet 3.0笔记之快速上手,快速体验

Servlet 3.0笔记之快速上手,快速体验

在开发环境搭建之后,下面需要在Eclipse 3.6 (JAVA EE版本)里面配置好Tomcat 7:

若不选择JDK1.6或者JRE 1.6,会有提示错误信息。
在Eclipse 3.6 新建一个“Dynamic Web Project”,主要配置如下:

然后就是新建一个Servlet : HomeAction.java 代码如下:
HomeAction.java@WebServlet("/home") //最简单的注解方式
public class HomeAction extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html; charset=UTF-8");

PrintWriter out = response.getWriter();

out.write("<html>");
out.write("<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head>");
out.write("<body>");
out.write("<h1>");
out.write("Hello Servlet 3.0 !");
out.write("</h1>");
out.write("<div>");
out.write("Welcome Here !");
out.write("</div>");

out.write("<div>");
out.write("<a href=\"hello\">访问无参数 hello </a>");
out.write("<br/>");
out.write("<a href=\"hello?user=xiaoI\">访问参数为xiaoi </a>");

out.write("</div>");


out.write("</body>");

out.write("</html>");

out.flush();
out.close();
}

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


一个最简单的Servlet注解 : @WebServlet(“/home”),简单好记。

下面看一个较为复杂的Servlet注解:

@WebServlet(urlPatterns = {"/hello"}, asyncSupported = false, 
loadOnStartup = -1, name = "HelloAction", displayName = "HelloAction",
initParams = {@WebInitParam(name = "userName", value = "xiaomin")}
)
public class HelloAction extends HttpServlet {
private static final long serialVersionUID = 9191552951446203732L;

private static String defaultUserName = null;

public void init() {
defaultUserName = this.getInitParameter("userName");
}

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

String userName = request.getParameter("user");

if (userName == null || userName.equals("")) {
userName = defaultUserName;
}

request.setAttribute("userName", userName);

// 转向JSP进行处理
request.getRequestDispatcher("/hello.jsp").forward(request, response);
}

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



再来学习一下WebServlet 的注解配置:



属性名 类型 描述
name String 指定 Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
value String[] 该属性等价于 urlPatterns 属性。两个属性不能同时使用。
urlPatterns String[] 指定一组 Servlet 的 URL 匹配模式。等价于 <url-pattern> 标签。
loadOnStartup int 指定 Servlet 的加载顺序,等价于 <load-on-startup> 标签。
initParams WebInitParam[] 指定一组 Servlet 初始化参数,等价于 <init-param> 标签。
asyncSupported boolean 声明 Servlet 是否支持异步操作模式,等价于 <async-supported> 标签。
description String 该 Servlet 的描述信息,等价于 <description> 标签。
displayName String 该 Servlet 的显示名,通常配合工具使用,等价于 <display-name> 标签。

再新建一个Filter:

AccessFilter.java@WebFilter(urlPatterns = {"/hello"},
dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.INCLUDE, DispatcherType.FORWARD},
initParams = {@WebInitParam(name = "encoding", value = "UTF-8")}
)
public class AccessFilter implements Filter {

public void doFilter(ServletRequest req,
ServletResponse rep, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;

System.out.println("datetime : " + new Date() + " ip : " + request.getRemoteAddr() + " url : " + request.getRequestURL());

filterChain.doFilter(req, rep);
}

public void destroy() {
}

public void init(FilterConfig filterConfig) throws ServletException {
}
}


最简单注解方式 @WebFilter(“/hello”),默认为对URL的拦截。

各个配置参数意义如下:



属性名 类型 描述
filterName String 指定过滤器的 name 属性,等价于 <filter-name>
value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。
dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括:
ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于 <init-param> 标签。
asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
description String 该过滤器的描述信息,等价于 <description> 标签。
displayName String 该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。



现在再看看运行效果:





简单几下就试用了新版本的Servlet 3.0 的一些特性,很简单吧,省去了很多配置的繁杂。当然在这很短的时间内,尚有很多东西尚未体验,不着急,慢慢来。有时间,我会一并发送上来。

项目打包下载地址:

下载地址

下一篇将讲如何替代JSP,让开发速度更快一些;最初的Servlet + JavaBean + JSP 模式,可能已经不太适合现在企业的开发需求。我们需要的是很轻的开发方式,具体是什么,下篇见 :))

你可能感兴趣的:(Servlet 3.0笔记之快速上手,快速体验)