MVC架构与传统的WebForm从代码上感觉,主要还是请求被服务器收后怎么个处理流程的问题。对于传统WebForm,客户端访问时候,输入的是页面的地址,请求通过处理管道,然后请求对象被交给页面的后台代码生成类处理(.NET),处理的结果以标签形式被绑定到页面上;或者是访问页面之后,在页面加载中加入AJAX代码,异步获取数据,将数据绑定到页面;这两种方式都是以页面为中心的;出现MVC之后,服务端代码的关注点就不在页面上了。客户端请求的时候,请求的是一个Action,然后action各种处理之后,可能要根据我请求的一些参数,做个判断,看看要返回哪个页面给客户端。
struts2是对MVC思想的一种实现。
一,引入Jar包
创建好web项目之后,我们在WEB-INF的lib目录下,添加如下基本jar包,需要注意的是,我们最好先添加基本jar包,不要全部引入,需要的时候再引入必须jar包,防止出现jar包冲突。另外,不同版本的struts2,引入的文件是不一样的。
二,在web.xml中添加struts2的配置
<!-- strut2配置 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*</url-pattern> </filter-mapping>
对于基本的web项目,以上配置就ok了。
三,添加struts.xml配置文件
这里面算是struts2的核心配置了。我们的action跟jsp页面的映射映射关系都在这里。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- package元素用于定义包配置,每个package元素定义了一个包配置。name:必填,用来指定包的名字; extends:可选,用来指定该报继承其他的包; namespace:可选,用来指定包的命名空间; --> <package name="struts2" namespace="/" extends="struts-default"> <!-- 配置calAction类 --> <action name="calc" class="net.blogjava.nokiaguy.models.CalcAction"> <result name="success"> /WEB-INF/calc.jsp </result> </action> <!-- 使用通配符为所有在WEB-INF目录中的JSP页面指定一个对应的Action --> <action name="*_jsp"> <result> /WEB-INF/{1}.jsp </result> </action> </package> </struts>
首先是doctype,不同版本struts,这里可能会有所不同。
接着是定义package,需要注意的是,相同package下面不允许有重名的action,如果action重名,要放入不同的package里面配置。
四,JSP页面如何接收action返回的结果
当action处理完成之后,我们可以使用struts的标签来展现action中的结果。
在页面上,加入如下标签:
<%@ taglib prefix="s" uri="/struts-tags" %>
之后,我们就可以在需要显示数据的地方加入标签了。例如:
<s:property value="result"/>