~Struts2~
开源框架openwork的基础上发布了一直到现在都非常流行的开源框架
struts2,struts2彻底解耦了servlet,不再使用servlet内核
而是开始使用更为先进的模块化可插拔设计 拦截器
struts2的改进:
M:model 支持数据库操作,支持ejb等技术,对spring
提供了完全支持,对用户操作数据库技术提供了非常大的帮助
V:提供插件式的方式,兼容市面上几乎所有的标签等,
即使存在新的技术,可以通过插件的形式集成在框架中,
不再像struts1一样只支持jsp动态技术,struts2自带的
ognl内核的struts2标签功能极为强大
C:不再需要继承任何类来完成业务逻辑,不再需要
专门设置一个类来封装表单项,内核不再是servlet基本与
servlet解耦,使用拦截器技术多实例多线程没有线程安全问题。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
commons-logging-1.0.4.jar 日志包
freemarker-2.3.8.jar 前端插件集合
ognl-2.6.11.jar ognl内核
用来支援struts2标签
struts2-core-2.0.14.jar struts2内核包
xwork-2.0.7.jar openwork内核
完。。。
一、首先大致了解下
2007年Apache项目基金下得opensymphony项目组在世界上另外一个开源框架openwork的基础上发布了一直到现在都非常流行的开源框架
struts2,struts2彻底解耦了servlet,不再使用servlet内核
而是开始使用更为先进的模块化可插拔设计 拦截器
struts2的改进:
M:model 支持数据库操作,支持ejb等技术,对spring
提供了完全支持,对用户操作数据库技术提供了非常大的帮助
V:提供插件式的方式,兼容市面上几乎所有的标签等,
即使存在新的技术,可以通过插件的形式集成在框架中,
不再像struts1一样只支持jsp动态技术,struts2自带的
ognl内核的struts2标签功能极为强大
C:不再需要继承任何类来完成业务逻辑,不再需要
专门设置一个类来封装表单项,内核不再是servlet基本与
servlet解耦,使用拦截器技术多实例多线程没有线程安全问题。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
commons-logging-1.0.4.jar 日志包
freemarker-2.3.8.jar 前端插件集合
ognl-2.6.11.jar ognl内核
用来支援struts2标签
struts2-core-2.0.14.jar struts2内核包
xwork-2.0.7.jar openwork内核
二、接下来新建一个struts2的web项目,在项目中讲解
1,首先新建web项目,借用eclipse或idea等软件很简单~~不多说
2,修改web.xml为
<filter>
<filter-name>struts2</filter-name>
<!--
1:中央控制器
整个框架中最高级别的类,
它就类似一个软件公司的老总
struts2流程
A:打开tomcat时
当打开tomcat时struts2的中央控制器因为是
一个过滤器,则立刻加载,加载时读取
default.properties配置文件
此文件部署了整个框架中所有的重要参数,
在解析此文件之后无误时,接续解析如下三个文件
struts-default.xml,
此文件部署了整个框架中所有核心类,跳转结果集
以及struts2核心的拦截器
struts-plugin.xml,
此文件在使用第三方jar包时使用,一般不使用此文件
struts.xml
此文件由我们自己书写,这个文件部署了整个框架中
我们完成自己业务逻辑的Action实例,以及跳转
和拦截器调用等信息,类似struts1中的
struts-config.xml
此四个文件解析无误后,中央控制器开始等待
请求的提交
B:请求发送时
当请求发送,任意请求都可以被拦截,但是注意
被拦截之后,中央控制器会查询一个叫做ActionMapper的
类来查看是否能进行处理,默认情况下只能处理.action
后缀的请求,如果可以处理,则将请求转发给Action的代理类
ActionProxy,ActionProxy解析struts.xml文件如果存在
可以处理这个请求的Action则为这个Action创建一个专属的
工具类ActionInvocation,这个类专门为Action调用
拦截器以及跳转视图层
Action执行结束根据结果集跳转到视图层或者另外的Action
Struts1:ActionServlet~~~》RequestProcessor
~~~》ActionForm~~~》Action
Struts2:FilterDispatcher~~~》ActionMapper
~~~》ActionProxy~~~》ActionInvocation~~~》
Action
-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
3,新建类,MyAction.java,放在com.eatok.action包下
package com.etoak.action;
public class MyAction {
public String execute(){
System.out.println("这里是业务逻辑!!!");
return "suc";
}
}
4,在类路径下新建struts.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!--
name:包名,可以随便写
extends:继承struts-default包
也就是说我们这个文件是struts-default.xml文件的
子文件
-->
<package name="suibianxie" extends="struts-default">
<!--
name:对应发送过来的请求
class:我们处理业务逻辑的类的地址
-->
<action name="helloworld" class="com.etoak.action.MyAction">
<!--
name:对应业务逻辑类的返回的字符串
type:结果集跳转方式
默认就是dispatcher可以不写
-->
<result name="suc" type="dispatcher">/suc.jsp</result>
</action>
</package>
</struts>
5,修改生成的index.jsp页面,没有的话自己新建在web-inf同级的目录下面
<body>
<%--
servlet:servlet/类名
struts1:***.do
struts2:***.action
--%>
<a href="helloworld.action">你好世界</a>
</body>
6,在web-inf同级目录下新建suc.jsp
<body>
helloworld~~
</body>
完。。。