Struts2、Spring MVC、Webx对比

简介:

一、struts2简单样例

步骤1:filter拦截请求,为了防止对初始页面拦截,使用/*.action,而不是/*

 
  1. <filter> 
  2.         <filter-name>struts2</filter-name> 
  3.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
  4.     </filter> 
  5.     <filter-mapping> 
  6.         <filter-name>struts2</filter-name> 
  7.         <url-pattern>/*.action</url-pattern> 
  8.     </filter-mapping> 
  9.  
  10.     <welcome-file-list> 
  11.         <welcome-file> 
  12.             index.html 
  13.         </welcome-file> 
  14.     </welcome-file-list> 

 

步骤2:Action处理,可以继承自xwork2的ActionSupport类;也可以不继承,但必须有public String execute() throws Exception方法

 
  1. private String username; 
  2. private String password; 
  3.  
  4. @Override 
  5. public String execute() throws Exception { 
  6.     if (username == null || username.equals("")) { 
  7.         return ERROR; 
  8.     } 
  9.     return SUCCESS; 

步骤3:在classpath下面(src/main/java或者src/main/resources),配置struts.xml

 
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC 
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd"> 
  5.  
  6. <struts> 
  7.     <package name="struts" extends="struts-default" namespace="/"> 
  8.         <action name="login" class="com.alibaba.struts2.LoginAction"> 
  9.             <result name="success" type="dispatcher">/success.jsp</result> 
  10.             <result name="error" type="dispatcher">/fail.jsp</result> 
  11.         </action> 
  12.     </package> 
  13. </struts> 

步骤4:在页面提交表单给action处理('/'代表从根webapp开始找,否则代表从当前页面所在目录下找),其中.action是从struts.properties中继承而来的(struts.action.extension=action,,)

 
  1. <body> 
  2.     <form method="get" action="/login.action"> 
  3.         <table> 
  4.             <tr> 
  5.                 <th><label for="username">用户名</label></th> 
  6.                 <td><input type="text" id="username" name="username" /></td> 
  7.             </tr> 
  8.             <tr> 
  9.                 <th><label for="password">密码</label></th> 
  10.                 <td><input type="text" id="password" name="password" /></td> 
  11.             </tr> 
  12.             <tr> 
  13.                 <th><label for="submit"></label></th> 
  14.                 <td> 
  15.                     <button type="submit" id="submit" name="submit">submit</button> <label 
  16.                     for="reset"></label> 
  17.                     <button type="reset" id="reset" name="reset">reset</button> 
  18.                 </td> 
  19.             </tr> 
  20.  
  21.         </table> 
  22.     </form> 
  23. </body> 

步骤5:取得属性

 
  1. username:<%=request.getParameter("username") %><br> 
  2. username: ${param.username} 

【注意】EL表达式在Servlet2.5中默认禁用,需要开启:<%@ page isELIgnored="false" %>, 更多内容参考:http://tianya23.blog.51cto.com/1081650/678052

【注意】

(1)获取从ActionContext中获取session,而不需要直接使用HttpServletRequest和HttpServletResponse。

 
  1. ActionContext context = ActionContext.getContext(); 
  2.         context.put("k1""v1"); 
  3.         Map session = context.getSession(); 
  4.         session.put("k2""v2"); 

 

二、Spring MVC使用样例

步骤1:添加Spring的相关依赖

 
  1. <dependency> 
  2.     <groupId>com.alibaba.external</groupId> 
  3.     <artifactId>java.servlet</artifactId> 
  4.     <version>2.5</version> 
  5. </dependency> 
  6. <dependency> 
  7.     <groupId>com.alibaba.external</groupId> 
  8.     <artifactId>sourceforge.spring.modules.webmvc</artifactId> 
  9.     <version>2.5.6</version> 
  10. </dependency> 
  11. <dependency> 
  12.     <groupId>com.alibaba.external</groupId> 
  13.     <artifactId>sourceforge.spring.modules.core</artifactId> 
  14.     <version>3.0.5.RELEASE</version> 
  15. </dependency> 
  16. <dependency> 
  17.     <groupId>com.alibaba.external</groupId> 
  18.     <artifactId>sourceforge.spring.modules.beans</artifactId> 
  19.     <version>3.0.5.RELEASE</version> 
  20. </dependency> 
  21. <dependency> 
  22.     <groupId>com.alibaba.external</groupId> 
  23.     <artifactId>sourceforge.spring.modules.context</artifactId> 
  24.     <version>3.0.5.RELEASE</version> 
  25. </dependency> 
  26. <dependency> 
  27.     <groupId>com.alibaba.external</groupId> 
  28.     <artifactId>sourceforge.spring.modules.context-support</artifactId> 
  29.     <version>3.0.5.RELEASE</version> 
  30. </dependency> 
  31. <dependency> 
  32.     <groupId>com.alibaba.external</groupId> 
  33.     <artifactId>sourceforge.spring.modules.web</artifactId> 
  34.     <version>3.0.5.RELEASE</version> 
  35. </dependency> 
  36. <dependency> 
  37.     <groupId>com.alibaba.external</groupId> 
  38.     <artifactId>sourceforge.spring.modules.aop</artifactId> 
  39.     <version>3.0.5.RELEASE</version> 
  40. </dependency> 
  41. <dependency> 
  42.     <groupId>com.alibaba.external</groupId> 
  43.     <artifactId>jakarta.commons.logging</artifactId> 
  44.     <version>1.1.1</version> 
  45. </dependency> 
  46. <dependency> 
  47.     <groupId>org.springframework</groupId> 
  48.     <artifactId>spring-asm</artifactId> 
  49.     <version>3.0.6.RELEASE</version> 
  50. </dependency> 
  51. <dependency> 
  52.     <groupId>com.alibaba.external</groupId> 
  53.     <artifactId>sourceforge.spring.modules.expression</artifactId> 
  54.     <version>3.0.5.RELEASE</version> 
  55. </dependency> 

步骤2:在web.xml中配置spring mvc的入口

 
  1. <servlet> 
  2.     <servlet-name>springmvc</servlet-name> 
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  4.     <load-on-startup>1</load-on-startup> 
  5. </servlet> 
  6. <servlet-mapping> 
  7.     <servlet-name>springmvc</servlet-name> 
  8.     <url-pattern>*.test</url-pattern> 
  9. </servlet-mapping> 

也可以指定spring servlet拦截之后,Spring mvc的配置文件

 
  1. <servlet> 
  2.     <servlet-name>hello</servlet-name> 
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  4.     <init-param> 
  5.      <param-name>contextConfigLocation</param-name> 
  6.      <param-value>/WEB-INF/classes/*.xml</param-value> 
  7.     </init-param> 
  8.     <load-on-startup>1</load-on-startup> 
  9.   </servlet> 
  10.   
  11.  <servlet-mapping> 
  12.     <servlet-name>hello</servlet-name> 
  13.     <url-pattern>*.do</url-pattern> 
  14.   </servlet-mapping> 

【注意】

1、在src源下面的文件,都将被映射到/WEB-INF/classes/下面,可以使用通配符。

 
  1. <init-param>     
  2.             <param-name>contextConfigLocation</param-name>                
  3.             <!--       
  4.               指定XML文件位置      
  5.               <param-value>/WEB-INF/classes/springmvc.xml                 
  6.               <param-value>classpath*:springmvc.xml      
  7.              -->     
  8.              <!-- 在classpath路径下去寻找springmvc.xml文件 -->                
  9.              <param-value>classpath:springmvc.xml      
  10.             </param-value>     
  11.         </init-param>    

2、<load-on-startup>1</load-on-startup> 让容器启动的时候就加载配置文件

 

 

步骤3:如果没有指定spring mvc的映射文件名称,默认使用:在WEB-INF目录下的*-servlet.xml文件,其中*为web.xml中配置的servlet-name。本例为:springmvc,则寻找的配置文件为:springmvc-servlet.xml,里面的配置如下:

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang" 
  4.     xsi:schemaLocation="  
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  6. http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> 
  7.  
  8.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  9.         <property name="mappings"> 
  10.             <props> 
  11.                 <prop key="start.test">LoginSpringAction</prop> 
  12.             </props> 
  13.         </property> 
  14.     </bean> 
  15.     <bean id="LoginSpringAction" class="com.alibaba.spring.LoginSpringAction"></bean> 
  16.      
  17.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
  18.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> 
  19.         <property name="prefix" value="/WEB-INF/jsp/"/> 
  20.         <property name="suffix" value=".jsp"/> 
  21.     </bean> 
  22. </beans> 

解释:如果start.test访问,则使用com.alibaba.spring.LoginSpringAction进行处理。

处于jsp页面隐藏的考虑,放在/WEB-INF目录下,按照跳转要求,则找/WEB-INF/jsp/start1.jsp页面。其中start1是由Controller继承类中new ModelAndView("start1")决定的。前缀和后缀是在*-servlet.xml中指定的,本例为springmvc-servlet.xml。

  【注意】如果需要使用注解annotation的方式,在需要引入context和mvc命名空间,具体如下:

 
  1. <?xml version="1.0" encoding="UTF-8"?>      
  2.   <beans xmlns="http://www.springframework.org/schema/beans"        
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  4.        xmlns:p="http://www.springframework.org/schema/p"        
  5.        xmlns:context="http://www.springframework.org/schema/context"    
  6.        xmlns:mvc="http://www.springframework.org/schema/mvc"       
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd      
  8.        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd      
  9.        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd      
  10.        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  11.        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"   
  12.         default-autowire="byName">      
  13.    
  14.      
  15. </beans>   

 

 

 

 

步骤4:LoginSpringAction.java文件

 
  1. import javax.servlet.http.HttpServletRequest; 
  2. import javax.servlet.http.HttpServletResponse; 
  3.  
  4. import org.springframework.web.servlet.ModelAndView; 
  5. import org.springframework.web.servlet.mvc.Controller; 
  6.  
  7. public class LoginSpringAction implements Controller { 
  8.  
  9.     @Override 
  10.     public ModelAndView handleRequest(HttpServletRequest request, 
  11.             HttpServletResponse response) throws Exception { 
  12.         String username = request.getParameter("username"); 
  13.         String password = request.getParameter("password"); 
  14.         System.out.println("username:" + username + ", password:" + password); 
  15.  
  16.         return new ModelAndView("start1"); 
  17.     } 

【注意】使用annotation方式,可以避免耦合方式,也方便单元测试 

setp 1:为controller的类添加注解:@Controller  

setp 2:为方法添加@RequestMapping

在类级别定义:@RequestMapping("/test"),该类的根级别,可选

在方法上定义:@RequestMapping("/start"),相对与类级别,必选,访问方式:/test/start.do

setp 3:在spring servlet配置文件中添加扫描功能,使annotation产生作用

  1.   <!-- 把标记了@Controller注解的类转换为bean -->       
  2.       <context:component-scan base-package="test.controller" />   

 

setp 4:在spring servlet中使用视图解析类,如UrlBasedViewResolver, 在里面配置前缀和后缀,viewClass属性为可选

 

 

步骤5:启动jetty访问,url:http://localhost:8080/start.test, 则后台输出:Controller is working

补充:制作一个index.jsp页面开始运转

 
  1. <%@ page language="java" contentType="text/html; charset=utf-8" 
  2.     pageEncoding="gbk"%> 
  3.  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  5. <html> 
  6. <h2>Hello World!</h2> 
  7. <body> 
  8.     <form method="get" action="/start.test"> 
  9.         <table> 
  10.             <tr> 
  11.                 <th><label for="username">用户名</label> 
  12.                 </th> 
  13.                 <td><input type="text" id="username" name="username" /> 
  14.                 </td> 
  15.             </tr> 
  16.             <tr> 
  17.                 <th><label for="password">密码</label> 
  18.                 </th> 
  19.                 <td><input type="text" id="password" name="password" /> 
  20.                 </td> 
  21.             </tr> 
  22.             <tr> 
  23.                 <th><label for="submit"></label> 
  24.                 </th> 
  25.                 <td> 
  26.                     <button type="submit" id="submit" name="submit">submit</button> <label 
  27.                     for="reset"></label> 
  28.                     <button type="reset" id="reset" name="reset">reset</button></td> 
  29.             </tr> 
  30.  
  31.         </table> 
  32.     </form> 
  33. </body> 
  34. </html> 

访问:http://localhost:8080/index.jsp

【补充】

(1)对于不需要的controller的login.jsp页面,可以使用spring自带的org.springframework.web.servlet.mvc.ParameterizableViewController,而不需要自己再写controller的实现。具体配置如下:

 
  1. <bean id="LoginAction" 
  2.         class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
  3.         <property name="viewName" value="login"></property> 
  4.     </bean> 

它会根据策略寻找到/WEB-INF/jsp/login.jsp

(2)如果login.test直接找login.jsp,即login是一致的,不需要改变,则可以更加省略,直接写为:

 
  1. <bean id="LoginAction" 
  2.         class="org.springframework.web.servlet.mvc.UrlFilenameViewController" /> 

 三、Webx MVC(以webx3为基础)

1、webx3的入口点

 
  1. <filter> 
  2.        <filter-name>webx</filter-name> 
  3.        <filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class> 
  4.    </filter> 
  5.    <filter-mapping> 
  6.        <filter-name>webx</filter-name> 
  7.        <url-pattern>/*</url-pattern> 
  8.    </filter-mapping> 

webx.xml:每个webx应用,都需要有一个webx.xml配置文件。这个文件定义了Webx所用到的所有services的配置。

pipeline.xml:即管道,它是由一个或多个“阀门Valve”构成的。可以看做webx框架的总控文件。

log4j.xml:日志系统配置文件。对于程序的排错至关重要。



本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/678001,如需转载请自行联系原作者

相关文章
|
1月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
54 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
115 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
3月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
3月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
88 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
3月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
166 4