- 浏览: 148590 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
aa00aa00:
不醋,当时就是看见这个学习的
ssh + pager-taglib 分页小程序 -
animo_itey:
楼主能提供下jar包不.?
ssh + pager-taglib 分页小程序 -
中尚洋流空间:
里面的JS哪去了啊?引入的自定义的JS呢?
深入浅出Extjs的源码 -
laijm1985:
谁告诉你TPL没有else的,别在这误导人 ' ...
extjs模板的使用 -
zuoanlove:
谢谢
深入浅出Extjs的源码
public class ServiceServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=GB18030"); request.setCharacterEncoding("GB18030"); response.setCharacterEncoding("GB18030"); PrintWriter out = response.getWriter(); DofContext.setRequest(request); DofContext.setResponse(response); // 根据url得到actionName String actionName = getActionName(request); String methodname = request.getParameter("action"); // 执行action中的方法 DofInvocation invocation = new DofInvocation(actionName); String resultString =""; try { resultString = invocation.execute(methodname); } catch (Exception e) { e.printStackTrace(); } // 返回结果 out.print(resultString); } //分析uri得到action的name private String getActionName(HttpServletRequest request){ String uri=request.getRequestURI(); String actionName=uri.substring(uri.lastIndexOf("/")+1 , uri.indexOf(".do")); return actionName; } //把配置文件的map保存在Context里面 public void init(ServletConfig config) throws ServletException { ServletContext context=config.getServletContext(); Map<String ,Configuration> configMap=new HashMap<String, Configuration>(); try { configMap=ParseDofConfFile.convertPropertyFileToMap(); } catch (IOException e) { e.printStackTrace(); } DofContext.setServletContext(context); DofContext.setConfigurationMap(configMap); System.out.println("===DOF初始化完毕===="); } }
解析配置文件
public class ParseDofConfFile { public static String ACTION_CONF_FILE = "DofConf.xml"; private static final String S_Action = "action"; private static final String S_Mapping = "class-mapping"; private static final String S_ClassName = "class-name"; /** * 解析DofConf.xml文件,将解析出来的数据组装成configuration对象,并放入map中 */ @SuppressWarnings("unchecked") public static Map<String, Configuration> convertPropertyFileToMap() throws IOException { Map<String, Configuration> actionResultMap = new HashMap<String, Configuration>(); InputStream fs = null; try { fs = ParseDofConfFile.class.getClassLoader().getResourceAsStream( ACTION_CONF_FILE); if (fs != null) { SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(fs); if (doc != null) { Element root = doc.getRootElement(); if (root != null) { //取得action节点,并遍历它的只节点 List actionlist = root.elements(S_Action); if (actionlist != null) { Iterator it = actionlist.iterator(); while (it.hasNext()) { Element actionele = (Element) it.next(); if (actionele != null) { //得到class-mapping 和class-name 节点 Element mapele = actionele.element(S_Mapping); Element nameele = actionele.element(S_ClassName); //如果节点不为空,将其值组装成Configuration对象放入map中 if (mapele != null && nameele != null) { String actionName = mapele.getText(); String classname = nameele.getText(); Configuration conf = new Configuration(); conf.setActionName(actionName); conf.setClassName(classname); actionResultMap.put(actionName, conf); } } } } } } } } catch (Exception e) { throw new IOException("解析DofConfig.xml文件出错或文件不存在!"); } finally { if (fs != null) { fs.close(); fs = null; } } return actionResultMap; } }
configuration对象
public class Configuration { //请求的action名称 private String actionName; //action对应的类名 private String className; public String getActionName() { return actionName; } public void setActionName(String actionName) { this.actionName = actionName; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String toString(){ return "actionName="+this.actionName+";classname="+this.className; } }
dofContext
public class DofContext { //save actioncontext to a map private static Map<String,Object> context=new HashMap<String, Object>(); private DofContext(){ } public static Map<String, Object> getContext() { return context; } public static HttpServletRequest getRequest(){ return (HttpServletRequest)getContext().get(ContextConstant.HTTP_REQUEST); } public static void setRequest(HttpServletRequest request){ getContext().put(ContextConstant.HTTP_REQUEST, request); } public static HttpServletResponse getResponse(){ return (HttpServletResponse)getContext().get(ContextConstant.HTTP_RESPONSE); } public static void setResponse(HttpServletResponse response){ getContext().put(ContextConstant.HTTP_RESPONSE, response); } public static void setServletContext(ServletContext servletContext){ getContext().put(ContextConstant.SERVLET_CONTEXT, servletContext); } public static ServletContext getServletContext(){ return (ServletContext)getContext().get(ContextConstant.SERVLET_CONTEXT); } public static void setConfigurationMap(Map<String,Configuration> configMap){ getContext().put(ContextConstant.ACTION_CONFIG_MAP, configMap); } @SuppressWarnings("unchecked") public static Map<String,Configuration> getConfigurationMap(){ return (Map<String,Configuration>)getContext().get(ContextConstant.ACTION_CONFIG_MAP); } }/** * 通过反射机制调用action中的方法 * @author dengm * */ public class DofInvocation { private String actionName; public DofInvocation(String actionName) { this.actionName = actionName; } // 执行action中的方法 @SuppressWarnings("unchecked") public String execute(String methodName) throws Exception { Configuration config = getActionConfiguration(); if (null != config) { String className = config.getClassName(); if (null == methodName || "".equals(methodName)) { methodName = "execute"; } try { Class actionClass = Class.forName(className); Object action = actionClass.newInstance(); Method method = action.getClass().getMethod(methodName, null); String result = (String) method.invoke(action, null); return result; } catch (ClassNotFoundException e) { throw new Exception("配置文件中没有找到类:" + className); } catch (InstantiationException e) { } catch (NoSuchMethodException e) { throw new Exception("类 :" + className + "中没有相应的方法 >>>" + methodName); } catch (Exception e) { throw new Exception(e.getMessage()); } } return ContextConstant.ACTION_ERROR; } /* * 得到一个action的configuration配置对象 */ @SuppressWarnings("unchecked") public Configuration getActionConfiguration() { Configuration config = new Configuration(); Map<String, Configuration> configMap = (Map<String, Configuration>) DofContext .getConfigurationMap(); if (null != configMap) { config = configMap.get(actionName); } return config; } }
- dof.rar (5.6 KB)
- 下载次数: 0
发表评论
-
在google上搭建了一个博客
2010-06-12 19:57 483最近也在google application engine上搭 ... -
eclipse 反编译 plugins
2010-04-12 17:13 1070http://jd.benow.ca/jd-eclipse/u ... -
访问配置了https的hessian
2009-12-24 17:31 4021tomcat下simple配置了https协议 Hessi ... -
java读取ini的配置文件
2009-10-20 14:04 2077由于项目需求,需要读取这种格式的ini配置文件 [grou ... -
jrockit连接tomcat的参数
2009-09-07 10:49 2233通过指定Java程序使用的网络端口来使用Mission Con ... -
项目中使用的ehCache的工具类
2009-08-27 10:38 2107import java.io.Serializable; ... -
openssl 学习
2009-07-28 17:04 1638使用des3加密 -k 密码 -in 加密的文件 -out ... -
再现java多线程的经典实例===生产者和消费者的问题
2009-07-24 14:38 2510这两天用到了多线程,于是重新复习了一下,并且模拟了 多线程的经 ... -
java 线程死锁的小例子
2009-07-23 13:02 2873public class TestDeadLock i ... -
jdbc操作大段文本和二进制数据类型
2009-07-16 17:47 1363使用jdbc操作大段文本和二进制数据类型 1 clob类型 ... -
hessian轻量级的二进制webservices
2009-06-28 11:18 863hessian是一个轻量级的二进制webservices 1 ... -
request.getRealPath的替代
2009-06-11 11:06 1808在servlet中request.getRealPath(St ... -
页面禁止缓存
2009-05-07 14:28 1220httpres.setHeader("Pragma& ... -
iBatis的代码生成工具
2009-04-30 11:59 1845iBatis的代码自动生成工具abator 今天试了以下,感 ... -
dom4j
2009-04-23 15:15 1212SAXReader reader = new SAXRe ... -
判断每个ip是否在以个指定的IP段内
2009-04-16 16:55 1668package com.tiansong.infosafe ... -
使用ant和YUI Compressor压缩js css
2009-04-16 14:02 3212用到两个jar包 YUIAnt.jar 下载地址 http: ... -
YUI Compressor js/css压缩工具
2009-04-16 10:03 1921YUI Compressor是Julien Lecomte提供 ... -
MyEclipse耗内存的决绝办法
2009-04-15 09:20 12041 老是弹出Quick update error 这个问题的 ... -
用jquery + DWR模拟在线词典
2008-11-13 15:26 1415昨天晚上看到一位仁兄发的一贴,就是一个链接 一个在线词典的AJ ...
相关推荐
Springboot 2.4.4 网上搜到的配置多个DispatcherServlet 都有坑,自己避坑写的一个demo,处理.do .htm请求,Controller分离不会出现一个Controller可以处理.do也处理.htm可自己扩展.action .json等,适合分离前台...
综上所述,"springboot+jsp 使用过滤器.do"这个项目展示了如何在Spring Boot应用中集成JSP页面,并通过Maven管理项目,同时利用过滤器实现特定的HTTP请求处理逻辑。通过学习这个示例,开发者可以更好地理解Spring ...
Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
- **类路径**:`class`属性指定了处理请求的具体Action类。 - **结果**:`result`元素用于定义Action执行成功后转向的目标页面,本例中为`/next.jsp`。 2. **创建对应的Action文件** - 按照传统Struts框架的...
这些后缀通常表示Struts框架处理请求的动作映射,暴露这些信息可能会让攻击者更容易发现系统的结构。以下是一些实现这一目标的方法和相关知识点: 1. **配置Action Mapping**: 在Struts的配置文件(如struts-...
- 配置 DispatcherServlet,用于拦截所有 *.do 结尾的请求。 - 配置 CharacterEncodingFilter,解决中文乱码问题。 **4. 实现登录逻辑** - 编写控制器类 (LoginController.java),负责处理登录请求。 - 通过 @...
12. **ask sb to do sth**:请求某人做某事;**ask sb not to do**:让某人不要做某事。 13. **at the age of**:在...岁的时候,表示年龄。 14. **at the beginning of...**:在...的开始,常用于描述事件的起点...
- 上述示例中的`*.do`通常用于拦截Struts2的Action请求,如果使用Servlet,则需自定义一个后缀,如`*.aj`。 - **配置问题**:如果在使用Servlet时遇到“返回类型不是text/xml”的错误,这通常是由于请求未被...
3. **处理请求**: Handler处理请求,执行相应的业务逻辑,并返回ModelAndView对象。 4. **选择ViewResolver**: DispatcherServlet根据ModelAndView中的View名称选择合适的ViewResolver。 5. **渲染视图**: ...
- **示例**:设置为`struts.action.extension=do`,则所有Action请求的URL将以`.do`结尾。 ##### 14. **struts.serve.static** - **功能**:是否允许静态资源通过JAR包提供服务,默认为`false`。 - **示例**:设置...
- **示例**: `struts.action.extension=action,do`表示处理`.action`和`.do`两种后缀的请求。 - **注意事项**: 合理设置可以提高URL的友好性和安全性。 **14. struts.serve.static** - **功能**: 设置是否通过...
6. **照顾,处理**:take care of 7. **快速查看,浏览**:look through 8. **重要的事**:big deal 9. **成功地发展,解决**:work out 10. **和睦相处,关系良好**:get on with 11. **删除,删去**:cut out 12. ...
4. **ajax.php**:可能用于处理异步请求,例如与服务器交互以获取签到状态或更新数据。 5. **index.php**:通常是程序的入口文件,负责加载其他组件并启动应用。 6. **init.php**:可能包含了程序初始化的代码,用于...
3. **All I have to do is learn English.** 这句话展示了用英语表达自己目标的简单方式,强调了学习英语的重要性。 4. **Are you free tomorrow?** 这是一种询问对方是否有空闲时间的方式,常用于安排约会或活动。...
2. **通配符匹配**:使用`"*"`匹配所有请求,或使用`"*.do"`匹配所有以`.do`结尾的URL。 3. **请求处理**:通过`request.getRequestURI()`获取请求的URI,根据不同的映射规则执行相应的Servlet。 #### 四、Servlet...
- **GET请求**: ```javascript xhr.open('get', 'check_uname.do?username=tom', true); xhr.onreadystatechange = handler; xhr.send(null); ``` - **POST请求**: ```javascript xhr.open('post', '...
5. **服务器处理请求**: 服务器接收请求,处理数据。 6. **返回响应**: 服务器将处理结果以HTTP响应的形式返回。 7. **接收数据**: JavaScript代码接收服务器的响应,并根据需求处理数据。 8. **回调函数执行**: ...
*.do ``` 3. **GET请求处理**:对于GET请求,由于参数直接包含在URL中,无法通过`setCharacterEncoding`来设置编码。这时可以手动转换字节流,如将ISO8859-1编码的字节流转为UTF-8。 ```java String name = ...
- **示例**:默认情况下,该属性的值为`do,action`,这意味着Struts2将处理以`.do`或`.action`结尾的URL请求。 - **配置**: ```properties struts.action.extension=do,action ``` - **应用场景**:例如,如果...