JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--Spring  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
Spring MultiAction的简单示例
作者:     文章来源:
访问次数:35次     加入时间:2007年03月23日

首先是一个简单的eclipse的工程目录结构,





简单介绍我自己写的MethodNameResolver和UrlHandlerMapping


PathMethodNameResolver,根据url取得调用MultiAction的方法名称,比如/user/userAdd.action,就可以调用到id为user的类的userAdd的方法来处理action


package com.zgc.test.multiaction;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.servlet.mvc.multiaction.MethodNameResolver;
import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;
public class PathMethodNameResolver implements MethodNameResolver {
 public String getHandlerMethodName(HttpServletRequest request)
   throws NoSuchRequestHandlingMethodException {
  String uri=request.getRequestURI();
  int begin = uri.lastIndexOf(’/’);
  if (begin == -1) {
   begin = 0;
  }
  else {
   begin++;
  }
  int end;
  if (uri.indexOf(";") != -1) {
   end = uri.indexOf(";");
  }
  else if (uri.indexOf("?") != -1) {
   end = uri.indexOf("?");
  }
  else {
   end = uri.length();
  }
  String fileName = uri.substring(begin, end);
  if (fileName.indexOf(".") != -1) {
   fileName = fileName.substring(0, fileName.lastIndexOf("."));
  }
  return fileName;
 }
}


DynamicUrlHandlerMapping,考虑到有的时候有特殊需求,所以就最后一个来指定方法,前面的来构成beanname,如/admin/user/viewUser.action,就可以查找到adminUser这个id的类,然后调用viewUser这个方法。用到了lazy load而不是一开始就把所有的bean都放到工厂,有利于服务的启动速度(最近老是觉得这个烦),也可以不实例化一辈子都用不到的类(这种类可以删除了)


package com.zgc.test.multiaction;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
public class DynamicUrlHandlerMapping extends AbstractUrlHandlerMapping {
 protected Object lookupHandler(String urlPath) {
  Object handler = super.lookupHandler(urlPath);
  if (handler == null) {
   String[] paths=urlPath.split("/");
   String beanName="";
   for(int i=0;i<paths.length-1;i++){
    beanName+=StringUtils.capitalize( paths[i]);
   }
   registerHandler(urlPath,StringUtils.uncapitalize(beanName));
   handler=super.lookupHandler(urlPath);
  }
  return handler;
 }
}


用到了一个简单的方法去viewName,我喜欢约定多于配置,于是有这么一个helper类


package com.zgc.test.multiaction;
public class MethodNameViewName {
 public static String getViewName(){
  StackTraceElement[] elements = (new Throwable()).getStackTrace();
  return elements[1].getMethodName();
 }
}


 


再接着就是实现类了,很简单,示例吗


package com.zgc.test.multiaction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class ChannelManager extends MultiActionController {
 public ModelAndView channelList(HttpServletRequest request,HttpServletResponse response){
  return new ModelAndView(MethodNameViewName.getViewName(),"message","channelList");
 }
 public ModelAndView channelAdd(HttpServletRequest request,HttpServletResponse response){
  return new ModelAndView(MethodNameViewName.getViewName(),"message","channelAdd");
 }
}


还有就是配置文件,因为autowire了,变得很简单


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName" default-lazy-init="false"
 default-dependency-check="none">
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix"><value>/WEB-INF/view/</value></property>
  <property name="suffix"><value>.jsp</value></property>
 </bean>
 <bean id="handlerMapping" class="com.zgc.test.multiaction.DynamicUrlHandlerMapping">
 </bean>
 <bean id="methodNameResolver" class="com.zgc.test.multiaction.PathMethodNameResolver"/>
 <bean id="user" class="com.zgc.test.multiaction.UserManager">
 </bean>
 <bean id="channel" class="com.zgc.test.multiaction.ChannelManager">
 </bean>
</beans>


jsp很简单就是标识一下不同的页面,就不做展示了。启动之后就可以通过http://server:port/beanname/methodName.action,来访问了

作者的blog:http://blog.matrix.org.cn/page/zhenggc

 

Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号