介绍:通过对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的改进,既通过请求的连接(连接填写包名/类名),即可直接执行填写的类