在java web 中使用过滤器+反射机制+代理模式,来改进servlet


介绍:通过对java的高度抽象,把通行性做到极致。每次申请一个连接,只要把包名,类名填写好,就可以自动执行。

     通过继承接口,来实现不同类的通用性。继承Action,new的时候直接newAction类型就好,不必考虑类型不一样而造成的通用性降低的问题。


先记录一下连接的提交格式 

包名/类名.action

如      test/test.action      第一个test为包名   第二个test为类名。


过程:

1.通过注册,配置过滤器,设置好提交连接时过滤的后缀名。xml文件如下

<filter >
	
		<filter-name>Test</filter-name>
		<filter-class>Jf.Filter.IllegalityLoginFilter</filter-class>
		<init-param>
		
			<param-name>aa</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>	
	
	<filter-mapping>
		<filter-name>Test</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>

设置提交时连接为.action的后缀名的连接进行截取过滤。  


   2,提交的连接

For.Test/classss.action

3 .接口

package Jf.Filter;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface ActionIntepacee 
{
	public String excute(HttpServletRequest request , HttpServletResponse response) throws IOException ,ServletException ;
}


4实现

package For.Test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Jf.Filter.ActionIntepacee;

public class classss implements ActionIntepacee 
{
	

	public String excute(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException 
	{
		System.out.println("classs");
		return null;
	}

}



5过滤器类

package Jf.Filter;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import test.test;

public class IllegalityLoginFilter implements Filter
{
	HttpServletRequest request;
	HttpServletResponse response;
	
	public void destroy() {}

	
	public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException 
	{
		request = (HttpServletRequest)arg0;
		response = (HttpServletResponse)arg1;
		String url = request.getRequestURI(),url2;
		String pack,classs,method;
		
		DealWithPackAndClasss DealW = new DealWithPackAndClasss();		//   For.Test/classss*
		url2 = DealW.DealWith(url);
		
		pack = url2.substring(0, url2.indexOf("/"));
		classs = url2.substring(url2.indexOf("/")+1, url2.lastIndexOf("*"));
		
		//System.out.println(pack+"  "+classs);
		
		try 
		{
			ActionIntepacee  a = (ActionIntepacee)Class.forName(pack+"."+classs).newInstance();
			System.out.println( "1111"+a.excute(request, response) );
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
		
		
	}


手动设置处理连接,截取类名和方法名

package Jf.Filter;

public class DealWithPackAndClasss   //         /5555/For.Test/classss.action
{
	/*public static void main(String args[])
	{
		DealWith("/5555/For.Test/classss.action");
	}*/
	
	public static String  DealWith(String url)
	{
		String url1 = url , url2 ,url_p, url_cla;
		url1 = url1.substring(1);												//	5555/For.Test/classss.action
		
		url1 = url1.substring(url1.indexOf("/")+1,url1.lastIndexOf(".")+1);		//    For.Test/classss.
		
		url_p = url1.substring(0, url1.indexOf("/"));
		url_cla = url1.substring(url1.indexOf("/")+1,url1.lastIndexOf("."));
		
		System.out.println(url_p+"/"+url_cla+"*");
		return url_p+"/"+url_cla+"*";
	}

}


以上就是对servlet的改进,既通过请求的连接(连接填写包名/类名),即可直接执行填写的类



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值