在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.actionurl1 = 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的改进,既通过请求的连接(连接填写包名/类名),即可直接执行填写的类
在java web 中使用过滤器+反射机制+代理模式,来改进servlet相关推荐
- java web开发(过滤器)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 过滤器,或许换成拦截器更合适一点.看到这个词,让我想到了linux kernel里面的netfi ...
- Java的反射机制 工厂模式综合讲解【转载自51CTO】
2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...
- Java Web中的中文编码问题分析
一.为什么需要编码 在计算机中存储信息的最小单位是1个字节,即8bit,所以能标识的最大字符范围是0~255,而人类自然语言中例如汉语.日语要表示的符号太多,无法单纯用一个字节来完全表示,为了解决这个 ...
- java 控制jsp_JSP学习之Java Web中的安全控制实例详解
普通用户界面 修改登录的Servlet,修改后的代码如下: LoginProcess.java代码: package servlet; import javabean.User; import jav ...
- 第三章 深入分析Java Web中的中文编码问题
3.1 几种常见的编码格式 3.1.1 为什么要编码 一个字节 byte只能表示0~255个符号,要表示更多的字符,需要编码. 3.1.2 如何翻译 ASCII码:有128个,用一个字节的低7位表示. ...
- 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题
在html">java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. html">java web中的路径使用按我的分法可以分两种情况,当 ...
- java web 中 读取windows图标并显示
java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils; import java.awt.Graphics; import j ...
- Java web中不同浏览器间导出Excel文件名称乱码问题解决方案
Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 参考文章: (1)Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 (2)https://www.cnblog ...
最新文章
- Mac安装PhoneGap3
- (转)事务是什么,以及事务四个特性
- EF 关系规则(一对一、一对多、多对多...)
- java SpringMVC mybatis 多数据源 代码生成器 SSM java redis shiro ehcache
- tty,串口,控制台与驱动程序
- VirtualCopy()操作I/O口 物理地址为什么要移8位
- influxDb 异常:{“error“:“retention policy not found: default“}
- ZetCode 杂项教程
- anki 插入表格_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
- Java中Minio基础使用
- 论发SCI论文和生孩子的共同点:那我这篇怀的也太久了!
- 廖雪峰python学习笔记之访问数据库
- 达梦数据库管理工具介绍
- 单片机学习(四)——ESP8266(最全教程和说明)
- python apply函数不打印_Python Pandas dataframe shift在apply函数中不起作用
- JAVA Timer 定时器原理
- 扩展spring之ext-spring-cache
- LXDE桌面系统设置快捷键
- 攻防世界 reverse leaked-license-64
- go test 单元函数测试
热门文章
- 七牛云撤回赴美IPO申请:上市一波三折 阿里云锋是股东
- c++语言计算圆周率,求C++计算圆周率小数点后10000位的程序,感谢。不知道怎么实现大数...
- 华为p7android5.1系统,华为 P7 超窄边框设计 直升安卓5.1系统
- 有了特斯拉光伏屋顶 未来不需要电网?
- 基于Python+Django+Vue+MYSQL的古诗词在线学习系统
- 计算机与通信网络潘书文答案,消防物联网系统测试方法
- 电影院订票选座网站系统 毕业设计毕设源码毕业论文参考(1)功能概要
- LHS拉丁超立方采样matlab程序,对于均匀分布与正态(高斯)分布的变量进行拉丁超立方采样
- Asp,Net中,怎么获取页面上的标签?标签forecolor属性在后台怎么设置?
- Android 11.0 QuickQSPanel添加亮度进度条布局