java重构ActionServlet,减少Web.xml的配置项代…

2018-06-18 02:13:19来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

Servlet 的致命的两个缺点(面试题):

  1.  web.xml 文件配置项比较多  原因:由于Servlet的增多,会产生大量的Servlet配置
  2.  Servlet 具有容器依赖性       原因:servlet在处理get或post请求时,HttpServletRequest和HttpServletResponse对象由Web容器创建

ActionServlet的实现步骤:

  1、创建Action接口 :

public interface Action {
	public String execute(HttpServletRequest request,HttpServletResponse response);
}

  2、创建一个Action 重写Action接口的处理方法:

public class HelloWorld implements Action{
	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("action 访问成功!");  //提示Action的处理方法被执行
		return "index.jsp";              //返回要重定向的jsp地址
	}
}

  3、创建ActionFilter过滤器(实现Filter接口 重写 Filter生命周期的方法):

public class ActionFilter implements Filter{
	private HttpServletRequest request = null;
	private HttpServletResponse response = null;
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
          //拿到Http的响应和请求对象
		this.request = (HttpServletRequest)request;
		this.response = (HttpServletResponse)response;
          //获取过滤到的Action 地址的URI
		String uri = this.request.getRequestURI();
          //解析出来要访问的Action的名字
		String actionName = ActionUtil.getAction(uri);
		try {
              //利用反射机制创建要访问的Action
			Action action = (Action)Class.forName("th.action."+actionName).newInstance();
              //调用要访问的Action的处理方法  并且把HTTP的响应和请求传给Action
			String page = action.execute(this.request, this.response);
              //根据Action返回的page页面名字进行重定向
			this.request.getRequestDispatcher(page).forward(this.request, this.response);
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
}

  解析URI的getAction()方法:

public class ActionUtil {
	public static String getActionName(String uri){
		String[] str = uri.split("/");
		String result = str[str.length-1].substring(0, str[str.length-1].indexOf("."));
		return result;
	}
}

  

4、在Web.xml配置Filter过滤器:

<filter>
    <filter-name>ActionFilter</filter-name>
    <filter-class>th.filter.ActionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ActionFilter</filter-name>
    <url-pattern>*.action</url-pattern>  <!--根据后缀以*.action结尾的地址来区别要访问的是Action还是Servlet-->
</filter-mapping>

   5、创建一个测试jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
  </head>
  <body>
  	<a href="HelloWorld.action" >请求一个action</a>  //通过href="*.action" 来区别访问的是Sevlet还是Action
  </body>
</html>

  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:「单点登录与权限管理」系列概述

下一篇:Java笔记 —— this 关键字