- 浏览: 360040 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zzy2011266:
以上是特殊情况, 正确的方式是打开windowsshowVi ...
Android 出现 Your project contains errors, please fix them 。。。。 -
小奶牛:
BFGFG[b][/b]
PHP计算字符串长度 -
小奶牛:
[b][/b]YTYTY
PHP计算字符串长度 -
yuankunliu:
这样处理ppt里边的文本框在图片中有边框,知道怎么去掉不请问? ...
java转换ppt为图片 -
vtrtbb:
哦,我试试
简单的JS分页代码
首先设置 web.xml 让所有请求扩展名为.do 的都通过ControllerFilter.java来解析
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>mvc</display-name> <filter> <filter-name>controllerFilter</filter-name> <filter-class>com.mvc.cms.ControllerFilter</filter-class> <init-param> <param-name>ERROR_PAGE</param-name> <param-value>error.jsp</param-value> </init-param> <init-param> <param-name>OBJECT_NAME</param-name> <param-value>loginBean</param-value> </init-param> </filter> <filter-mapping> <filter-name>controllerFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
ControllerFilter.java 控制器
public class ControllerFilter implements Filter { protected FilterConfig filterConfig; private final Map<String,String> map = new HashMap<String,String>(); public void init(FilterConfig config) { this.filterConfig = config; String filePath = config.getServletContext().getRealPath("/WEB-INF/web-config.xml"); DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = dbfactory.newDocumentBuilder(); InputStream in = new FileInputStream(filePath); Document doc = builder.parse(in); Element root = doc.getDocumentElement(); NodeList list = root.getElementsByTagName("action"); for (int i = 0; i < list.getLength(); i++) { Element element = (Element) list.item(i); NodeList nameValue = element.getElementsByTagName("name"); Element nameElement = (Element) nameValue.item(0); String clazzName = nameElement.getFirstChild().getNodeValue(); NodeList clazz= element.getElementsByTagName("clazz"); Element clazzElement = (Element) clazz.item(0); String clazzValue = clazzElement.getFirstChild().getNodeValue(); map.put(clazzName, clazzValue); } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } public void destroy() { this.filterConfig = null; } public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) srequest; HttpServletResponse response = (HttpServletResponse) sresponse; //验证不通过进行跳转 /*if (!passed(request,response)) { String errorPage=this.filterConfig.getInitParameter("ERROR_PAGE"); response.sendRedirect(errorPage); return; }*/ request.setCharacterEncoding("GBK"); String path = (String) request.getRequestURI(); String actionString = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); String forwardPage = null; Action actionClazz = null; if (map.containsKey(actionString)) { String clazz = map.get(actionString); actionClazz = getAction(clazz); try { forwardPage = actionClazz.execute(request, response); } catch (ActionException e) { e.printStackTrace(); } } if (forwardPage != null) { filterConfig.getServletContext().getRequestDispatcher(forwardPage).forward(request, response); } } //验证权限 private boolean passed(ServletRequest request, ServletResponse response) throws IOException, ServletException { boolean result=false; return result; } private Action getAction (String clazz) { ActionFactory factory = ActionFactory.getInstance(); return factory.getAction(clazz); }
设置一个web-config.xml 来表示某个请求对应的类
<?xml version="1.0" encoding="UTF-8"?> <struts> <action> <name>login</name> <clazz>com.mvc.cms.action.testAction</clazz> </action> <action> <name>login2</name> <clazz>com.mvc.cms.action.LoginAction</clazz> </action> <action> <name>login3</name> <clazz>com.mvc.cms.action.testAction3</clazz> </action> </struts>
写一个接口action
public interface Action { /** * excute a certain function * @param request * @param response */ public String execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException,ActionException; }
让所有的action都实现这个接口,如:
public class LoginAction implements Action { @Override public String execute(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException,ActionException { String userName = request.getParameter("userName"); if (userName != null) { request.setAttribute("userName", userName); return "/UI/ok.jsp"; }else{ return "/UI/login.jsp"; } } }
一个类工厂,用到了反射
public class ActionFactory { private static final Map<String, Object> factory = new HashMap<String, Object>(); private static ActionFactory actionFacory; private ActionFactory() { } public synchronized static ActionFactory getInstance() { if (actionFacory == null) { actionFacory = new ActionFactory(); } return actionFacory; } @SuppressWarnings("unchecked") public Action getAction(String clazz) { final String key = clazz; if (!factory.containsKey(key)) { try { Constructor c = Class.forName(clazz).getDeclaredConstructor(new Class[] {}); c.setAccessible(true); factory.put(key, c.newInstance(new Object[] {})); } catch (Exception ex) { throw new ExceptionInInitializerError(ex); } } return (Action) factory.get(key); } }
自己胡乱写的,呵呵
评论
8 楼
mercyblitz
2010-03-14
asialee 写道
mercyblitz 写道
asialee 写道
解析XML配置文件用的是dom解析,这个在文件大的情况下很占内存,struts1使用的是digester进行解析的吧,lz可以考虑一下SAX解析。
要考虑场景,解析配置文件会消耗多大的内存呢,SAX太复杂了,不适合LZ。
配置文件有时候会很大的,而且配置主要是读取,用SAX最合适。
配置文件能有多大?启动之后就GC掉了!
7 楼
bocar
2010-03-14
fenxue 写道
String actionString = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf("."));
这句话感觉有问题, path.lastIndexOf(".")不能用在这里,后面传递的参数namevalue
中也可能包含"."符号,可以用".do截取"
这句话感觉有问题, path.lastIndexOf(".")不能用在这里,后面传递的参数namevalue
中也可能包含"."符号,可以用".do截取"
楼主用"."截取没有错,但是需要对path做去冗余的处理,去除"?"之后的东东,或者通过request.getServletPath()获得path,因为servlet中我们不一定非要用.do做匹配,也可以是其他的标识。
6 楼
fenxue
2010-03-13
String actionString = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf("."));
这句话感觉有问题, path.lastIndexOf(".")不能用在这里,后面传递的参数namevalue
中也可能包含"."符号,可以用".do截取"
这句话感觉有问题, path.lastIndexOf(".")不能用在这里,后面传递的参数namevalue
中也可能包含"."符号,可以用".do截取"
5 楼
bocar
2010-03-13
建议楼主将 Action execute()的返回值用ActionForward封装一下,因为不仅仅是 forward 的情况,还有 redirect 的情况,且并且可以为Ajax JSON做准备。
4 楼
asialee
2010-03-13
mercyblitz 写道
asialee 写道
解析XML配置文件用的是dom解析,这个在文件大的情况下很占内存,struts1使用的是digester进行解析的吧,lz可以考虑一下SAX解析。
要考虑场景,解析配置文件会消耗多大的内存呢,SAX太复杂了,不适合LZ。
配置文件有时候会很大的,而且配置主要是读取,用SAX最合适。
3 楼
mercyblitz
2010-03-13
asialee 写道
解析XML配置文件用的是dom解析,这个在文件大的情况下很占内存,struts1使用的是digester进行解析的吧,lz可以考虑一下SAX解析。
要考虑场景,解析配置文件会消耗多大的内存呢,SAX太复杂了,不适合LZ。
2 楼
asialee
2010-03-13
解析XML配置文件用的是dom解析,这个在文件大的情况下很占内存,struts1使用的是digester进行解析的吧,lz可以考虑一下SAX解析。
1 楼
xiaolongfeixiang
2010-03-12
<p><span style="font-size: small;">似乎和Struts1.x相似度极高....</span></p>
<p><span style="font-size: small;"><br></span></p>
<p><span style="font-size: small;">思维不要被束缚了。 加油!!继续努力!!</span></p>
<p><span style="font-size: small;"><br></span></p>
<p><span style="font-size: small;">思维不要被束缚了。 加油!!继续努力!!</span></p>
发表评论
-
Maven运行Selenium报错org/w3c/dom/ElementTraversal
2017-06-21 17:11 717Maven运行Selenium报错org/w3c/dom/ ... -
logback日志按天滚动记录
2017-05-09 11:25 2391<?xml version="1.0&quo ... -
spring boot 中用Swagger2 构建API说明文档
2017-05-05 12:10 507maven: <dependency> ... -
SpringMVC测试框架Mock[转载]
2017-02-22 15:09 2755基于RESTful风格的SpringMVC的测试,我们 ... -
maven本地安装jar包
2016-07-22 17:32 485mvn install:install-file -Dfil ... -
java发消息MSMQ
2014-03-31 11:29 1381java发送消息给微软MSMQ的组件 -
maven导出依赖jar包到指定目录
2014-01-22 15:35 730项目建立后,导出依赖jar包到指定目录: mvn d ... -
hadoop执行hadoop namenode -format错误问题
2013-01-02 20:54 9213运行时遇到如下问题: Exception in thread ... -
sql 每个分类取N条数据例子
2012-12-30 09:43 5669取得分组TOP-N测试表与测试数据 CREATE TABLE ... -
effective java第一版系在
2012-12-17 09:16 773做个备注吧,以后又找不到了 -
多线程执行任务
2012-11-19 21:05 792只研究有用的,工作中的需求:要把多个任务分派给多个线程去执行, ... -
java代码构建线程池
2012-11-15 21:48 800在现代的操作系统中, ... -
BugFree说明
2012-08-06 11:55 783BugFree 说明 Fixed 已修复 ... -
android 阅读器分页读取字数
2012-06-05 12:33 3256// 本方法 分行又分页 public static ... -
linux更新系统时间
2012-01-11 10:23 1538检查是否安装过ntp rpm -aq | g ... -
jstl 一些函数用法
2011-11-29 09:44 785fn函数里面有很多好用的方法 <%@ taglib ... -
activeMq 简单的安全设置
2011-11-25 18:40 1167在conf 中找到 jetty.xml 文件 < ... -
activeMq收不到消息
2011-11-25 18:36 1125项目需要应用jms,在本地测试好的,到了服务器就后可以看 ... -
仿goolge验证码,自己没有试过
2011-10-13 14:55 998仿goolge验证码,自己没有试过 -
Tomcat 配置数据源
2011-09-22 15:22 998<Resource name="jdbc/ ...
相关推荐
Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统
JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet...
jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVC
jsp+javabean+servlet使用简单的MVC模式实现登录注册、留言板、分页的功能。model(javabean)层实现读写数据库,数据库名为webapp,没有密码;view(JSP)实现展示信息;controller(servlet)层联系model和view,...
【标题】"jsp+JavaBean+Servlet+MySQL宿舍管理系统(初学者)"是一个针对初学者设计的项目,旨在帮助他们理解并实践Web应用开发的基本技术。这个系统的核心是使用JSP(JavaServer Pages)来展示界面,JavaBean作为业务...
【JSP源码——jsp+servlet+javaBean实现MVC】是基于Java Web技术构建的一种经典MVC(Model-View-Controller)模式的应用实例。在Web开发中,MVC模式被广泛采用,它将应用程序的业务逻辑、数据处理和用户界面分离,...
通过这个项目,开发者可以掌握JSP、JavaBean和Servlet的综合运用,了解如何构建一个完整的Web应用,并熟悉数据库管理和MVC设计模式。同时,该项目也提供了实践用户交互、数据处理和后端服务的好机会,对于提升Web...
Jsp+Servlet+JavaBean 实现MVC模式的留言本 声明:本留言本所有源代码开源,使用者可以自由修改和传播,但仅限于非商业用途。 作者:梁龙 博客:http://www.lianglong.net.cn 由于这是本人学习JAVA的第一个项目,...
jsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+...
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此...
jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+...
jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他...
本文将深入探讨`JSP(JavaServer Pages)、Servlet、JavaBean`以及`Ajax`如何在MVC架构下实现数据的增删改查与分页显示,并涉及`SmartUpload`组件用于文件和图片的上传。 首先,`MVC`模式是一种软件设计模式,它将...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc [其他类别]jsp+servlet+...[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc
《基于JSP+JavaBean+Servlet模式的图书管理系统的研究与实现》 图书管理系统是信息化建设中的重要组成部分,它能够高效地管理和检索图书信息,为图书馆的日常运营提供便利。本项目采用经典的JSP(JavaServer Pages...