1.什么是struts2?
a.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
b.Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
struts的官方网址:http://struts.apache.org
开发程序的基本步骤:
1.加载struts2类库
2.配置web.xml文件
3.开发视图层页面
4.开发控制层Action
5.在src下配置struts.xml文件
6.部署,运行项目
配置web.xml代码如下:
<!-- 配置struts核心类 -->
<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>*.action</url-pattern>
</filter-mapping>
配置Struts2配置文件代码如下:
<?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>
<!-- 打开方法的动态调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="mypackage" namespace="/" extends="struts-default" >
<action name="user" class="com.yindan.action.UserAction">
<result name="success" type="redirectAction">
<param name="actionName">student!login</param>
<param name="myname">${user.u_name}</param>
<param name="mypwd">${user.u_pwd}</param>
</result>
<result name="fail">login_fail.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="student" class="com.yindan.action.StudentAction">
<result name="success">index.jsp</result>
</action>
</package>
</struts>
二、详细配置
2.1 Action中属性的获取
表单的name属性值必须跟action中的属性值名字一样,而且必须封装
属性名------------------------->action中属性名
属性对象名.属性名-------->action中属性
2.2 在struts.xml下配置编码
<!--常量配置-->
<constant name="struts.i18n.encoding"value="UTF-8"/>
2.3 Action方法的动态调用
A、设置是否可以动态调用
<constant name="struts.enable.DynamicMethodInvocation"value="true" />
B、动态语法
action名!方法名.action
举例:user!login.action调用名字为user的action下面的login方法
C、通配符{*}形式的动态调用
<action name= "*User" method=”{1}”
<result>{1}_success.jsp</result>
举例:loginUser.action 调用名字为user的action下面的login方法
2.4 全局错误action请求结果配置
Package下:
<global-results>
<resultname="error" >all_error.jsp</result>
</global-results>
2.5 Result常用的结果类型,即type属性
A、dispatcher(默认) 转发
底层使用RequestDispatcher转发请求
B、redirect
底层使用sendRedirect将请求重定向
C、redirectAction
重定向到action
举例:product.action?myName=${user.name}&myPwd=${user.pwd}
<resultname="success" type="redirectAction">
<paramname="actionName">product</param>
<paramname="myName">${user.name}</param>
<paramname="myPwd">${user.pwd}</param>
</result>
三、注解形式的Struts2配置(重点)
导包:struts2-convention-plugin-2.3.33.jar
java.lang.NoClassDefFoundError 字节码错误
解决方案:导包 asm-all
3.1 Action配置
@ParentPackage struts-default
@NameSpaces 工作空间
@Action(
Value=””,
Results={
@Result(name=””,location=””),........
}
)
四、约定对Action的限制
4.1约定Action类名:
要求Action的命名必须以“Action”为后缀,例如:UserAction、BookAction等等。可 以使用下面常量来修改后缀限制:
<constantname="struts.convention.action.suffix" value="Action"/>
4.2约定Action包名:
Com.entity.action
要求Action必须放到action、actions、struts、struts2包中。例如:cn.itcast.action、 cn.itcast.sturts、cn.itcast.action.user等等。可以使用下面常量来修改Actoin的包
<constantname="struts.convention.package.locators"value="action,actions,struts,struts2"/>
struts2访问ServletAPI的方式:
1.与ServletAPI解耦访问方式
// Map<String, Object> session=ServletActionContext.getContext().getSession();
// session.put("mysession", user);
2.与ServletAPI耦合访问方式
ServletActionContext.getRequest().getSession().setAttribute("myuser", user);
3.struts2的迭代标签
使用标签前必须写上
<% @ taglib prefix="s" uri="/struts-tags" %>
<s:iterator value="集合对象" status="status" id="name">
读取集合对象并输出显示
</s:iterator>
value属性:需要进行遍历的集合对象
status属性:表示当前迭代对象的一个实例
id属性:当前迭代元素的id,可直接访问元素,该参数可选