📄 struts2.txt
字号:
一、struts2的请求处理过程
通过url.action找到struts2的过滤器
过滤器在src的在struts.xml中找到action标签的name属性,
进而通过class属性确定真正的action,通过
method属性确定action方法,如果不写method默认是
execute方法
被调用方法在执行结束前返回一个字符串通过这个字符串在struts.xml
action标签中找到对应的页面转发。
二、struts2与strutx1.X的比较
相同点:
都是mvc
struts2:
没有form可以直接使用后台的pojo
action是一个pojo,方法名可以随意给定
核心配置文件是struts.xml在src的根目录下
struts在与spring整合时更规范
struts1.X:
可要加载数据必须有form其form必须继承于ActionForm
action不是一个pojo而是要继承于Action
核心配置文件是struts-config.xml在/web-inf/目录下
struts在与spring整合时不是很规范,通过struts1.x的
插件将struts与spring整合在一起。
三、struts2如何实现
1、引入struts2的相关类包
2、修改web.xml加入一个监听器
3、在src的根目下加入struts.xml
4、写action,写jsp页面。
四、在struts2中如何加载request、session对象
实现RequestAware、SessionAware接口加入类型是Map有session或
request属性及其set、get方法,通过put或get方法从map中取值。
原理:
1、调用方法之前将HttpServertRequest的值通过put方法注入
到Map中
2、调用结束后将map中的值再写入到HttpServertRequest对象中。
五、如何确定到底调用action的那一个方法
<action method="方法"/>
在url处写"name!方法名.action"
六、struts2与spring整合
1、在web.xml中加入一个监听器,加载applicationContext.xml
2、修改struts.xml中action标签的class属性,其指的不是具体的action
而是applicationContext.xml中bean标签的id属性。
3、在applicationContext.xml中加入一个bean标记,
id属性与struts.xml中的class属性值必须对应,class
属性说明具体的action
一、struts2的请求处理过程
通过url.action找到struts2的过滤器
过滤器在src的在struts.xml中找到action标签的name属性,
进而通过class属性确定真正的action,通过
method属性确定action方法,如果不写method默认是
execute方法
被调用方法在执行结束前返回一个字符串通过这个字符串在struts.xml
action标签中找到对应的页面转发。
struts中可以有多个配置文件,一般是一个功能模板一个,不同团队不影响,实现如下:
1、在/WEB-INF/下加入新的struts-config.xml文件
2、在web.xml中在ActionServlet的配置中说明具体的struts-config.xml文件所在位置
多个文件用,分隔开。
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config-1.xml,
/WEB-INF/struts-config-2.xml</param-value>
</init-param>
对于spring有多个applicationContext.xml该如何处理
struts2.0的特点
1、form是一个pojo
2、action是一个pojo,所以struts2.0与框架的藕合度非常低。
实现Action时有时会继承于ActionSupport,
覆盖execute方法,从而创建一个Action。
因为ActionSupport提供了很多方法可以为开发提供方便。
3、支持依赖注入,主要借助于spring来实现
4、支持拦截处理,相当于是aop
综上struts2.0吸了spring及webwork2的优点,是强强联合的产品。
struts2.0环境配置
1、引入struts类包
2、修改web.xml,说明加载struts的监听器,在启动tomcat容器时通过监听器
加载struts2核心控制类。
<filter>
<filter-name>webwork</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、在src根目录下加入struts.xml文件,说明具体action及相应的跳转
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="login" namespace="" extends="struts-default">
<action name="login" class="action.LoginAction" method="login">
<result name="success"></result>
<result name="input"></result>
<result>success.jsp</result>
</action>
</package>
二、加载多个struts.xml文件
struts.xml不变
在struts.xml中加入
<include file="struts-1.xml"/>
struts2.0实现登陆
1、写一个pojo
public class UsersVO
{
private String userName;
private String pwd;
//get及set方法
}
2、写一个Action
public class LoginAction
{
private UsersVO user;
//get及set方法
public String login()
{
if("accp".equals(user.getUserName) && "accp".equals(user.getPwd))
{
return "success";
}
return "error";
}
}
3、配置struts.xml文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="login" namespace="" extends="struts-default">
<action name="login" class="action.LoginAction" method="login">
<result name="success"></result>
<result name="input"></result>
<result>success.jsp</result>
</action>
</package>
4、在jsp页面中调用action
<s:form action="login">
用户名<input name="user.userName" type="text">
<s:passward name="user.pwd" label="密码"/>
<s:submit/>
</s:form>
struts2.0与spring2.0的结合
1、在/WEB-INF/中加入applicationContext.xml文件并引入spring相关的类包
2、applicaitonContext.xml中Action配置信息如下:
<bean id="insert" class="struts.MakeAction">
<property name="facade">
<ref local="facadeProxy" />
</property>
</bean>
3、在web.xml文件中指定spring的监听器,加载applicationContext.xml文件
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
4、修改src根目下的struts.xml中的action标签,其class不再指向真正的Action类,而是spring的一个bean的ID名称
<action name="insert" class="insert" method="insert">
<result name="error">/error.jsp</result>
<result name="success">/succ.jsp</result>
</action>
九、ognl语言
#:
1、取request、application、session中的值
<s:property value="#request.user.userName"/>
2、定义一个Map
<s:set name="list" value="#{1:'a',2:'b',3:'c'}"/>
十、将值直接映射到List集合中
buies[0].buyID
buies[1].buyName
struts2中的相关标签:
非ui组件
--判断
<s:if test="#request.user.userName=='张三'">
是张三
</s:if>
<s:elseif test="#request.user.userName=='李四'">
是李四
</s:elseif>
<s:else>
不知道
</s:else>
--迭代
<s:iterator value="#request.users" id="user1" state="state">
<s:property value="#user1.userName"/>
</s:iterator>
--设置set
name 是 String 变量名字
scope 否 String 变量作用域,可以为application, session, request, page, 或action.
value 否 Object/String 将会赋给变量的值
id 否 Object/String 用来标识元素的id。在UI和表单中为HTML的id属性
--显示属性
<s:property value=""/>
ui组件
下拉列表
语法
<s:select list="" listKey="" listValue="" value="" label=""/>
list:代表数据来源于一个集合
listKey:显示的值
listValue:真正的值
value:如果listValue中的值与value中的值相等,则对应项会选中
label:显示标签名
实例:
1、常数
<s:select list="#{1:'a1',2:'a2',3:'a3'}" listKey="key"
listValue="value" value="{'a1','a2'}"
2、可以取在application、session、request中的对象
<s:select list="#request.sexes" listKey="name" listValue="code"
value="{'01'}"/>
复选框:
1、普通集合
<s:checkboxlist name="skills1"
label="Skills 1"
list="{ 'Java', '.Net', 'RoR', 'PHP' }"
value="{ 'Java', '.Net' }" />
2、hashMap
<s:checkboxlist name="skills2"
label="Skills 2"
list="#{ 1:'Java', 2: '.Net', 3: 'RoR', 4: 'PHP' }"
listKey="key"
listValue="value"
value="{ 1, 2, 3 }"/>
<s:token/>:保证一个请求只被执行一次
1、在jsp中加入标签
<s:token/>
3、若用token在对应的action中加入拦截器,内容如下:
<action name="Token" class="tutorial.CoolTagAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result name="invalid.token">/token.jsp</result>
<result>/token.jsp</result>
</action>
引入struts2的css及javaScript脚本
< s:head />
<s:datatimerpicker>:时间选择器
<s:datetimepicker name="birthday" label="Birthday" />:显示时间
两个组合框,第一个组合框发生改变时,自动更新第二个组合框
1、代码中直接构造集合
<s:doubleselect
tooltip="Choose Your State"
label="State"
name="region" list="{'North', 'South'}"
value="'South'"
doubleValue="'Florida'"
doubleList="top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}"
doubleName="state"
headerKey="-1"
headerValue="---------- Please Select ----------"
emptyOption="true" />
2、 取已有集合中的值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -