javaee之struts2框架学习

来源:互联网 发布:带网络驱动的winpe 编辑:程序博客网 时间:2024/05/16 16:58
Struts2:
struts2是一个基于mvc思想模式的表现层技术框架
主要是为了把多个模块的servlet合并成为一个通用的统一的servlet


开发步骤:
首先要导包,把Struts2的核心包导入进项目下
然后在web.xml中进行配置过滤器,因为Struts2是通过过滤器来进行实现对servlet的操作,
<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>


编写一个Action类,只是一个普通的class,需要一个字符串的返回值,用来提供给struts.xml
进行一个页面的跳转和转发


在src的类路径下创建一个struts.xml进行对struts的配置
struts.xml:
<?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">


<!-- 该文件默认情况下必须放在项目的src目录下  -->
<struts>
<!-- 包 -->
<package name="type" namespance="/" extends="struts-default">

<!-- 配置一个action -->
<action name="typeQuery" class="gz.itcast.web.TypeAction" method="query">
<!-- 配置视图 (默认转发(-->
<result name="list">/list.jsp</result>
</action>

</package>
</struts>


这样的对struts的简单配置在浏览器输出项目名和struts配置文件中的namespace的值和action中name,就可以进行访问了





struts-default.xml的解读
1)声明了一些struts2框架使用到的对象:
<bean class = "org.apache.struts2.views.jsp.ui.OgnlTool" />
......
2)声明了一个默认包
<package name="struts-default" abstract="true" >struts2的默认包,声明了struts2的核心功能
(例如:接收参数,拦截器,文件上传下载,国际化,表单数据验证等)


作用是让开发者定义struts.xml文件的时候去继承默认包
<package name="type" namespace="/" extends="struts-default" >

3)声明了视图类型的定义
<result-types>
<result-type name="chain" class="..." />


定义的类型在action的result中的type属性可以进行定义:
dispatcher:默认的,表示转发到一个页面
chain: 重定向到一个页面
redirect: 转发到另一个Action
redirectAction:重定向到另一个Action


Stream:专门用于输出字节流(下载文件时多使用)


4)声明了系统默认的拦截器
过滤器:是Servlet的组件之一,必须依赖Servlet的环境。可以拦截的是任何请求和响应,包括Action
拦截器:是struts2的组件之一,必须依赖struts2环境。只能拦截的是Action




struts.xml的解读
在src的类路径下进行创建配置文件


<package name="type" namespace="/" extends="struts-default">


package:代表是一个包,用于区分action和管理action的
name:包名,用于区分不同包的
extends:继承,用于继承另外的一些包,如果继承了一个父包,那么当前包就把父包的所有内容继承下来了,
namespace:名称空间,用于区分不同包的访问名称,如果两个包下面有相同的action访问名称,则需要名称空间来区分
abstract:表示是抽象包,里面不能包含action。


<action name="demo2" class="mjf.Demo2Action" method="query" >


action:代表的一个用户请求
name:访问名称,用于访问该action的时候使用的
class:操作类,包含每个模块代码逻辑
method:操作方法,每个操作代码逻辑


<result name="succ" type="chain">demo2</result>

result:代表一个视图
name:视图名称。在操作方法中需要返回一个name
type:视图类型,参考struts-default.xml的<result-types>的类型

内容:需要跳转的路径,如果是页面需要携带斜杠


下面是一些示例代码:

一个action类:

import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class Demo1 extends ActionSupport {public String list(){System.out.println("sss");return "list";}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubreturn "list";}}


struts.xml文件:

<?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><constant name="struts.i18n.encoding" value="utf-8" /><package name="default" namespace="/" extends="struts-default"><!-- 在包中只能拥有一个唯一名字的action,result中name的属性表示方法返回的字符串 --><action name="Demo1" class="example_01.Demo1" method="list"><result name="list">/index.jsp</result></action><!-- 在result中有type类型,默认为转发,可以为chain、redirect、redirectActionredirect:表示result中的功能为重定向redirectAction:表示result中的功能为重定向到另一个actionchain:表示result中的功能为转发到另一个action<action name="demo1" class="example_02.demo1" method="list"><result name="list" type="chain">Demo1</result></action><action name="demo2" class="example_02.demo1" method="list"><result name="list" type="redirectAction">Demo1</result></action>  --><action name="demo3" class="example_02.demo1" method="list"><result name="list" type="redirect">/index.jsp</result></action>    <!-- 通配符的用法,*表示通配,要取得*的内容使用{index}  index:表示第几个*号,从1开始算起,通配符只能在action的name中使用   -->  <action name="demo1_*" class="example_02.demo1" method="{1}">  <result name="list">/index.jsp</result>  </action></package></struts>


web.xml文件:

<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框架,以后能够比较方便去改写代码,但是效率没有jsp和Servlet的高,这是一个比较的缺点


0 0
原创粉丝点击