蓝海豹

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

https://blog.csdn.net/boonya/article/details/14166583

Stripes最基本的实现是类似于Struts的请求,但没有Struts那么配置繁琐。下面就来看看怎样实现一个web应用的Action访问操作。本篇博文为设计Stripes的三种访问方式:普通Action的映射访问、类Servlet访问方式、Rest变参访问方式。前几天还没将Stripes应用示例打通,今天又本着不解决问题死不罢休的精神继续去弄,终于搞明白了。

1、编写Stripes的web.xml配置文件

 该文件定义了第三方的工具包、过滤器类、以及映射关系和访问格式;在此配置文件中有两种Stripes的配置(特定模板的Action过滤配置和动态URL路径配置),它们互不排斥,相互包容,方便了用户不同业务需求下的访问模式。其配置内容如下:

 

Stripes最基本的实现是类似于Struts的请求,但没有Struts那么配置繁琐。下面就来看看怎样实现一个web应用的Action访问操作。本篇博文为设计Stripes的三种访问方式:普通Action的映射访问、类Servlet访问方式、Rest变参访问方式。前几天还没将Stripes应用示例打通,今天又本着不解决问题死不罢休的精神继续去弄,终于搞明白了。

1、编写Stripes的web.xml配置文件

 该文件定义了第三方的工具包、过滤器类、以及映射关系和访问格式;在此配置文件中有两种Stripes的配置(特定模板的Action过滤配置和动态URL路径配置),它们互不排斥,相互包容,方便了用户不同业务需求下的访问模式。其配置内容如下:

 

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.     version="2.5">  
  6.       
  7.     <!-- 如果没使用到,此内容可以不添加 -->  
  8.     <context-param>  
  9.         <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>  
  10.         <param-value>StripesResources</param-value>  
  11.     </context-param>  
  12.       
  13.     <!-- 基本ActionBean访问过滤配置 -->  
  14.     <filter>  
  15.         <display-name>Stripes Filter</display-name>  
  16.         <filter-name>StripesFilter</filter-name>  
  17.         <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>  
  18.         <init-param>  
  19.             <param-name>ActionResolver.Packages</param-name>  
  20.             <param-value>com.boonya.stripes.actions</param-value>  
  21.         </init-param>  
  22.         <init-param>  
  23.             <param-name>Interceptor.Classes</param-name>  
  24.             <param-value>  
  25.                 net.sourceforge.stripes.integration.spring.SpringInterceptor  
  26.             </param-value>  
  27.         </init-param>  
  28.     </filter>  
  29.     <filter-mapping>  
  30.         <filter-name>StripesFilter</filter-name>  
  31.         <servlet-name>StripesDispatcher</servlet-name>  
  32.         <dispatcher>REQUEST</dispatcher>  
  33.     </filter-mapping>  
  34.       
  35.     <servlet>  
  36.         <servlet-name>StripesDispatcher</servlet-name>  
  37.         <servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class>  
  38.         <load-on-startup>1</load-on-startup>  
  39.     </servlet>  
  40.     <servlet-mapping>  
  41.         <servlet-name>StripesDispatcher</servlet-name>  
  42.         <url-pattern>*.action</url-pattern>  
  43.     </servlet-mapping>  
  44.       
  45.     <!-- 动态配置隐射过滤器 -->  
  46.   <filter>  
  47.       <description>Dynamically maps URLs to ActionBeans.</description>  
  48.       <display-name>Stripes Dynamic Mapping Filter</display-name>  
  49.       <filter-name>DynamicMappingFilter</filter-name>  
  50.       <filter-class>  
  51.           net.sourceforge.stripes.controller.DynamicMappingFilter  
  52.       </filter-class>  
  53.       <init-param>  
  54.           <param-name>ActionResolver.Packages</param-name>  
  55.           <param-value>com.boonya.stripes.actions</param-value>  
  56.       </init-param>  
  57.   </filter>  
  58.     
  59.   <filter-mapping>  
  60.       <filter-name>DynamicMappingFilter</filter-name>  
  61.       <url-pattern>/*</url-pattern>  
  62.       <dispatcher>REQUEST</dispatcher>  
  63.       <dispatcher>FORWARD</dispatcher>  
  64.       <dispatcher>INCLUDE</dispatcher>  
  65.   </filter-mapping>  
  66.    
  67.    <!-- 欢迎界面 -->  
  68.     <welcome-file-list>  
  69.         <welcome-file>index.jsp</welcome-file>  
  70.     </welcome-file-list>  
  71.   
  72. </web-app>  

 

2、导入需要的jar包到项目WEB-INF的lib目录下

此处需要加入的jar包,由于Stripes实现的时候用到了springframework的jar包,所以需要在项目中添加,否则在访问页面时会有异常产生。示例项目目录结构如下图:

注:上面所示的Jar有个别不需要,如果需要使用Spring整合建议保留;另外,根目录下下还需要一个消息配置文件StripesResources.properties,缺少它在数据验证的时候无法处理消息信息。

3、编写抽象的ActionBean,AbstractActionBean

因为在每个ActionBean中都使用到了上下文对象设置,这部分属于公共行为,所以将其抽象出来。

 

[java] view plain copy
  1. package com.boonya.stripes.actions;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import net.sourceforge.stripes.action.ActionBean;  
  6. import net.sourceforge.stripes.action.ActionBeanContext;  
  7. import net.sourceforge.stripes.action.SimpleMessage;  
  8.   
  9. public abstract class AbstractActionBean implements ActionBean, Serializable {  
  10.   
  11.   private static final long serialVersionUID = -1767714708233127983L;  
  12.   
  13.   protected static final String ERROR = "/WEB-INF/Error.jsp";  
  14.   
  15.   protected transient ActionBeanContext context;  
  16.   
  17.   protected void setMessage(String value) {  
  18.     context.getMessages().add(new SimpleMessage(value));  
  19.   }  
  20.     
  21.   public ActionBeanContext getContext() {  
  22.     return context;  
  23.   }  
  24.   
  25.   public void setContext(ActionBeanContext context) {  
  26.     this.context = context;  
  27.   }  
  28.   
  29. }  

注:系统中公用的页面也可以设置在这里,应为这是所有对象的基本行为方式和处理逻辑。

 

4、编写业务需要的ActionBean

方式一:基本Action映射访问

 

[java] view plain copy
  1. package com.boonya.stripes.actions;  
  2.   
  3. import net.sourceforge.stripes.action.DefaultHandler;  
  4. import net.sourceforge.stripes.action.ForwardResolution;  
  5. import net.sourceforge.stripes.action.HandlesEvent;  
  6. import net.sourceforge.stripes.action.SessionScope;  
  7.   
  8. @SessionScope  
  9. public class HelloActionBean extends AbstractActionBean {  
  10.   
  11.     private static final long serialVersionUID = -8946154817549504368L;  
  12.       
  13.     protected static final String HELLO ="/WEB-INF/Hello.jsp";  
  14.       
  15.     protected static final String BLOG ="/WEB-INF/Blog.jsp";  
  16.     // 传递到指定的页面的参数  
  17.     private String name="boonya-only-hellos";  
  18.   
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22.   
  23.     public String getName() {  
  24.         return name;  
  25.     }  
  26.   
  27.     /** 
  28.      * 默认跳转页面(@DefaultHandler) 
  29.      * @return 
  30.      */  
  31.     @DefaultHandler  
  32.     public ForwardResolution view() {  
  33.         return new ForwardResolution(HELLO);  
  34.     }  
  35.       
  36.     /** 
  37.      * 指定跳转页面(@HandlesEvent)处理,可以不添加该注解 
  38.      * @return 
  39.      */  
  40.     @HandlesEvent("viewToBlog")  
  41.     public ForwardResolution viewToBlog() {  
  42.         this.name=this.getClass().getName();  
  43.         return new ForwardResolution(BLOG);  
  44.     }  
  45.   
  46. }  

 

方式二:类Servlet访问方式

 

[java] view plain copy
  1. package com.boonya.stripes.actions;  
  2.   
  3. import net.sourceforge.stripes.action.ActionBeanContext;  
  4. import net.sourceforge.stripes.action.DefaultHandler;  
  5. import net.sourceforge.stripes.action.ForwardResolution;  
  6. import net.sourceforge.stripes.action.HandlesEvent;  
  7. import net.sourceforge.stripes.action.UrlBinding;  
  8. // URL 隐射路径  
  9. @UrlBinding("/hellos")  
  10. public class WorldActionBean  extends AbstractActionBean {  
  11.       
  12.     private static final long serialVersionUID = 3073270783412011577L;  
  13.   
  14.     protected static final String WORLD ="/WEB-INF/World.jsp";  
  15.       
  16.     protected static final String BLOG ="/WEB-INF/Blog.jsp";  
  17.   
  18.     // 传递到指定的页面的参数  
  19.     private String name="boonya-page";  
  20.       
  21.     protected transient ActionBeanContext context;  
  22.       
  23.     @Override  
  24.     public ActionBeanContext getContext() {  
  25.             return context;  
  26.     }  
  27.      @Override  
  28.     public void setContext(ActionBeanContext context) {  
  29.             this.context = context;  
  30.     }  
  31.   
  32.     public void setName(String name) {  
  33.         this.name = name;  
  34.     }  
  35.   
  36.     public String getName() {  
  37.         return name;  
  38.     }  
  39.   
  40.     /** 
  41.      * 默认跳转页面(@DefaultHandler) 
  42.      * @return 
  43.      */  
  44.     @DefaultHandler  
  45.     public ForwardResolution view() {  
  46.         return new ForwardResolution(WORLD);  
  47.     }  
  48.       
  49.     /** 
  50.      * 指定跳转页面(@HandlesEvent)处理,可以不添加该注解 
  51.      * @return 
  52.      */  
  53.     @HandlesEvent("viewToBlog")  
  54.     public ForwardResolution viewToBlog() {  
  55.         this.name=this.getClass().getName();  
  56.         return new ForwardResolution(BLOG);  
  57.     }  
  58.   
  59. }  

 

方式三:Rest风格变参访问

 

[java] view plain copy
  1. package com.boonya.stripes.actions;  
  2.   
  3. import net.sourceforge.stripes.action.DefaultHandler;  
  4. import net.sourceforge.stripes.action.ForwardResolution;  
  5. import net.sourceforge.stripes.action.HandlesEvent;  
  6. import net.sourceforge.stripes.action.UrlBinding;  
  7. // URL 隐射路径  
  8. @UrlBinding("/helloworld/{name}")  
  9. public class HelloWorldActionBean  extends AbstractActionBean {  
  10.       
  11.     private static final long serialVersionUID = 2276458379123668500L;  
  12.   
  13.     protected static final String WORLD ="/WEB-INF/HelloWorld.jsp";  
  14.       
  15.     protected static final String BLOG ="/WEB-INF/Blog.jsp";  
  16.   
  17.     // 传递到指定的页面的参数  
  18.     private String name;  
  19.   
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.   
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.   
  28.     /** 
  29.      * 默认跳转页面(@DefaultHandler) 
  30.      * @return 
  31.      */  
  32.     @DefaultHandler  
  33.     public ForwardResolution view() {  
  34.         return new ForwardResolution(WORLD);  
  35.     }  
  36.       
  37.     /** 
  38.      * 指定跳转页面(@HandlesEvent)处理,可以不添加该注解 
  39.      * @return 
  40.      */  
  41.     @HandlesEvent("viewToBlog")  
  42.     public ForwardResolution viewToBlog() {  
  43.         this.name=this.getClass().getName();  
  44.         return new ForwardResolution(BLOG);  
  45.     }  
  46.   
  47. }  

 

5、编写测试JSP页面

index.jsp

 

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. <style type="text/css">  
  9.    body{  
  10.       text-decoration: underline;  
  11.       color: blue;  
  12.       font-size: 12px;  
  13.       font-family: '仿宋体';  
  14.    }  
  15. </style>  
  16. </head>  
  17. <body>  
  18.  <h3<href="actions/Hello.action">forward风格测试</a></h3>  
  19.  <h3<href="hellos">Servlet风格测试</a></h3>  
  20.  <h3<href="helloworld/boonya-test-rest">Rest风格的测试</a></h3>  
  21. </body>  
  22. </html>  

 

Hello.jsp

 

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="stripes"  
  4.     uri="http://stripes.sourceforge.net/stripes.tld"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <title>Hello-page</title>  
  8. <body>  
  9.     Hello ${actionBean.name}  
  10.     <br />  
  11.     <br />  
  12.     <stripes:link beanclass="com.boonya.stripes.actions.HelloActionBean">  
  13.         <stripes:param name="name" value="boonya-hello" />Try again</stripes:link>  
  14.     <br>  
  15.     <stripes:link beanclass="com.boonya.stripes.actions.HelloActionBean" event="viewToBlog">  
  16.     from Hello-page to visit boonya's blog  
  17.     </stripes:link>  
  18.     <br>  
  19. </body>  
  20. </html>  

World.jsp

 

 

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="stripes"  
  4.     uri="http://stripes.sourceforge.net/stripes.tld"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <title>World-page</title>  
  8. <body>  
  9.     Hello ${actionBean.name}  
  10.     <br />  
  11.     <br />  
  12.     <stripes:link beanclass="com.boonya.stripes.actions.WorldActionBean">  
  13.         <stripes:param name="name" value="boonya-world" />Try again</stripes:link>  
  14.     <br>  
  15.     <stripes:link beanclass="com.boonya.stripes.actions.WorldActionBean" event="viewToBlog">  
  16.     from World-page to visit boonya's blog  
  17.     </stripes:link>  
  18.     <br>  
  19. </body>  
  20. </html>  

HelloWorld.jsp

 

 

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="stripes"  
  4.     uri="http://stripes.sourceforge.net/stripes.tld"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <title>HelloWorld-page</title>  
  8. <body>  
  9.     Hello ${actionBean.name}  
  10.     <br />  
  11.     <br />  
  12.     <stripes:link beanclass="com.boonya.stripes.actions.HelloWorldActionBean">  
  13.         <stripes:param name="name" value="boonya-world" />Try again</stripes:link>  
  14.     <br>  
  15.     <stripes:link beanclass="com.boonya.stripes.actions.HelloWorldActionBean" event="viewToBlog">  
  16.     from HelloWorld-page to visit boonya's blog  
  17.     </stripes:link>  
  18.     <br>  
  19. </body>  
  20. </html>  

Blog.jsp

 

 

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Blog-Page</title>  
  8. </head>  
  9. <body>  
  10.  <h3>welcome to  boonya's blog.</h3>  
  11.    
  12.  <h2 style="color: blue;">from action's class name: <font color="red">${actionBean.name}</font</h2>  
  13. </body>  
  14. </html>  

Error.jsp没什么特别的内容故不在此处写出。

 

6、项目部署测试访问

以下是测试访问的效果图:

系统首页显示:

forward显示:

servlet显示:

rest显示:

示例程序下载地址:http://download.csdn.net/detail/boonya/6506145

 
posted on 2018-04-13 16:38  蓝海豹  阅读(878)  评论(0编辑  收藏  举报