网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  spring multiaction的简单示例     
  文章作者:未知  文章来源:水木森林  
  查看:91次  录入:管理员--2007-11-17  
 
  先是一个简单的eclipse的工程目录结构,

spring multiaction的简单示例


  简单介绍我自己写的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,来访问了

 
 
上一篇: spring i18n的better practice    下一篇: 用spring aop实现开发中松散耦合
  相关文档
java环境配置大全 11-17
中国移动:开启“无线java”之门 11-17
java 性能优化技巧集锦 (1) 11-17
抽象类对象类和对象包装类 11-17
详解xml与j2ee组合技术的精髓(1) 11-16
在rms中存储和读取数据 11-17
java设计模式之 decorator(装饰) 11-17
java基础: 响应鼠标点击事件的小程序 11-17
在jsp编程中application的使用方法详解 11-16
关于窗口的操作详谈 11-17
javaio学习基础之读写文本文件 11-17
数据绑定实践:涉入真实世界 11-17
swt layout开发时的注意项! 11-17
关于线程的讲解(出自java原著) 11-17
看看流行的和过时的鼠标事件 04-14
java语言和c++语言的差异—老生常谈 11-17
全面挖掘java excel api 使用方法(1) 11-17
初学者入门:如何随心所欲操纵java数组 12-14
java页面计数器 11-17
java新特性--java web start 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息