📄 复习4.txt
字号:
1、struts2的原理
在web.xml部署一个过滤器FilterDispatcher,其可以接收所有以action结尾的请求。当客户发送一个url.action请求时,
FilterDispatcher根据src根目录下的struts.xml中找到对应的action,实例化action并调用action的execute方法,
execute方法执行完后返回一个字符串转发到另一个页面。
2、struts2.0的特点
1、去除了struts1中的actionForm,页面可以直接利用后台的javaBean
2、action是一个pojo,所以struts2.0与框架的藕合度非常低,让开发效率更快。
当然Action可以继承于ActionSupport,覆盖execute方法。主要目的是使用ActionSupport提供的方法方便开发。如果用到校验需要继承于ActionSupport
3、支持依赖注入,主要借助于spring来实现
4、支持拦截处理,相当于是过滤器
5、支持数据转换,有预定义的数据转换,将表单域的值映射到数据类中的一个集合中。也可以自定义数据转换。
综上struts2.0吸了spring及webwork2的优点,是强强联合的产品。
3、struts2.0实现过程
1、struts类包
2、修改web.xml,说明加载struts的过滤器FilterDispatcher
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">
<struts>
<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>
4、在action中加载request,application,session对象
通过拦截器加载session,application,request
public class MyAction implements SessionAware,RequestAware,ApplicationAware
{
private Map session;
private Map request;
private Map application;
//sesion,request,application
}
可以看到requser、session、application不再是
HttpServletRequest,
HttpSession,
ServletContext,
而是Map接口,
其值是在程序运行过程中通过拦截器动态加载、同步的
这样在测试时更为方便,传一个Map就可以测试,
不是真正的HttpSession,HttpServletRequest,ServletContext。
也就是说struts2的测试可以脱离容器。
通过ServletActionContext加载sesssion,application,request
public class MyAction extends ActionSupport
{
public String execute()
{
HttpServletRequest request=ServletActionContext.getRequest();
}
}
可以看到这种代码在测试时是不能离开容器的。
5、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:set name="" scope="request" value=""/>
--显示属性
<s:property value=""/>
ui组件:从一个action转发到另一个jsp页面时,可以直接显示上一个action中属性值。
文本框:
<s:textField/>
<s:password/>
下拉列表
语法
<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>
4、返回jsp页面时将唯一的序号写入到jsp页面的form中,
提交表单到服务端时
struts2的拦截器会取出唯一的序号,与系统内部已提交的序号比较,
若没有找到证明当前页面没有提交过,执行。若找到了证明提交
过,系统报错。
datatimepicket:时间选择器
引入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、 取已有集合中的值
<s:set name="foobar"
value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"
doubleName="technology"
doubleList="#foobar[top]"
label="Technology" />
<s:updownselect>:可以上下移动的列表项
<s:updownselect
label = "Favourite Countries"
list="#{'england':'England', 'america':'America', 'germany':'Germany'}"
name="prioritisedFavouriteCountries"
headerKey="-1"
headerValue="--- Please Order Them Accordingly ---"
emptyOption="true" />
<s:optiontransferselect/>:可以左右交换,上下移动的选择信息
<s:optiontransferselect
label="Favourite Cartoons Characters"
name="leftSideCartoonCharacters"
leftTitle="Left Title"
rightTitle="Right Title"
list="{'Popeye', 'He-Man', 'Spiderman'}"
multiple="true"
headerKey="headerKey"
headerValue="--- Please Select ---"
emptyOption="true"
doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
doubleName="rightSideCartoonCharacters"
doubleHeaderKey="doubleHeaderKey"
doubleHeaderValue="--- Please Select ---"
doubleEmptyOption="true"
doubleMultiple="true" />
导入一个文件并加入参数:
<s:include value="/condition.jsp">
<s:param name="name">Max</s:param>
<s:param name="name" value="">Max</s:param>
</s:include>
s:param的属性列表:
name 否 String 参数名
value 否 String value表达式
id 否 Object/String 用来标识元素的id。在UI和表单中为HTML的id属性
6、OGNL
作用:显示对象的属性值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -