一、struts初见面
struts2和struts1的关系:只是名字相似,其他的都不同。struts2的原型是webwork。因为struts1使用过程中严重的耦合性而被抛弃,
struts2正好解决了这个问题。
struts2是基于MVC开发模式的一个框架,属于表现层框架。所谓的MVC开发模式,
即【M:模型(model)、V:试图(view)、C:控制器(controller))】
二、struts2开发环境
1、下载struts2发行包
2、新建JavaWeb项目,把所需的jar包拷贝到进去(jar包要大致了解一下)
位置:struts2发行包apps\struts2-blank\WEB-INF\lib
3、在构建路径顶端,创建一个struts.xml配置文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
注:配置文件的dtd校验文件在struts-core核心包中可以找到相应的版本
4、配置控制器映射:框架提供(web.xml)
<!-- 配置struts2的核心控制器《StrutsPrepareAndExecuteFilter》 -->
<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>
三、struts2的基本执行原理
StrutsPrepareAndExecuteFilter控制器是框架为我们提供的,之所以配置文件要写成classPath:struts.xml,是因为在该控制器的底层已经
把这个配置文件规定好了,也就意味着这个控制器是用来加载配置文件的。又因为struts.xml配置文件中的内容就是动作名--动作类--动作方法
的映射,所以,就可以根据用户发送出的请求找到对应的动作类中的动作方法,执行、返回视图。
四、开发小案例
1、模拟用户发送请求
<body>
<a href="${pageContext.request.contextPath}/helloWorld.action">猛戳这里:第一个案例</a>
</body>
2、struts.xml配置文件
<struts>
<package name="p1" extends="struts-default">
<action name="helloWorld" class="com.struts.action.HelloWorldAction" method="sayHello">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
3、动作类
public class HelloWorldAction {
public String sayHello(){
return "success";
}
}
注:简单的开发流程细节部分却有很多,在这里先不做详细说明,只分析执行流程
jsp页面的超链接模拟用户请求,根据连接地址/helloWorld.action,可以根据.action之前的helloWorld,
在struts.xml配置文件中找到对应的动作名,对应的动作类和对应的动作方法进行执行,
根据动作方法的返回值,给用户返回视图。
那么问题来了,struts2是如何把连接中的helloWorld和配置文件中的helloWorld动作名建立联系的呢?原因归根在于struts2的
核心控制器strutsPrepareAndExecuteFilter,它是用来加载struts.xml配置文件,这里就要设计Java发射和xml解析(dom4j),
而且struts2核心配置是默认接受以.action或者没有后缀的动作,我们可以提前了解一下default.properties文件
位置:
内容:
注:strutsPrepareAndExecuteFilter默认拦截以action或者空问后缀的动作,其他的后缀的放掉,爱干嘛干嘛去!
===================================================================================
坚持别人不能坚持的坚持,终将收获别人不能收获的收获。这就是我,一个纯粹想靠技术改变命运的人。