`
goto0917
  • 浏览: 46383 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
  • take: 这是POI方式,不是JXLS方式. JXLS包路径都是net ...
    jxls
阅读更多
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核心控制类。
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>
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>
在action中加载request,application,request对象
通过拦截器加载session,application,request
public class MyAction implements SessionAware,RequestAware,ApplicationAware
{
private Map session;
private Map request;
private Map application;
//sesion,request,application不再是HttpServletRequest,
HttpSession,ServletContext类,而是程序在容器中运行时通过Map动态加载,
这样在测试时更为方便,传一个Map就可以测试,不是真正的HttpSession
,HttpServletRequest,ServletContext
}
通过ActionServletContext加载sesssion,application,request
public class MyAction extends ActionSupport
{
public String execute()
{
HttpServletRequest request=ActionServletContext.getRequest();
}
}
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、 取已有集合中的值
<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属性

OGNL
作用:显示对象的属性值
#的作用:
1、显示request、session、application、parameters、atrr中的值,具体实例如下:
<s:property value="#request.user.userName"/>
attr可以代表request、session、application,查找顺序request>session>applcation
parameters代表表单域:
一个值:
<s:property value="#parameters.userName"/>
多个重名值:
<s:property value="#parameters.userName[0]"/>
2、过滤
1、取一批值
<s:iterator value="#request.users.users.{?#this.sex=='123'}" id="user" >
2、取一行的一个属性值
<s:property value="#request.users.users.{?#this.sex=='123'}.{userName}[0]"/>
3、定义hashMap
<s:set name="maps" value="#{1:'a1',2:'a2',3:'a3',4:'a4'}"/>
%的作用:相当于s:property
<s:property value="#request.user.userName"/>
<s:set name="p_userName" value="%{#request.user.userName}"/>
$有两个主要的用途
用于在国际化资源文件中,引用OGNL表达式
userName=用户名
password=密码
age=年龄
birthday=生日
userNameRequiredError=${getText('userName')}不能为空
pwdRequiredError=${getText('password')}不能为空
pwdLengthError=${getText('password')}的长度必在${minLength}和${maxLength}之间
ageValueError=${getText('age')}的长度必在${min}和${max}之间
birthdayError=${getText('birthday')}${birthday}的范围在${min}和${max}之间

${getText('userName')}是资源文件中已有的信息
${min}:是在LoginAction-validation.xml配置的参数信息
${birthday}取出单行文本<s:textfiled name="birthday">的信息
在Struts 2配置文件中,引用OGNL表达式,如
<action name="AddPhoto" class="addPhoto">
            <interceptor-ref name="fileUploadStack" />           
            <result type="redirect">ListPhotos.action?albumId=${albumId}</result>
        </action>
struts2中的国际化
1、什么是国际化
不用改源代码就可以适应不同的国家语言
2、国际化实现的过程
1、在src根目下加入struts.properties文件,说明全局的properties文件名称,内容如下
struts.custom.i18n.resources=messages
2、在src根目下加入messages_语言_国家.properties文件,说明具体键名与消息
messages_en_US.properties
messages_zh_CN.properties
3、如果在properties文件中有中文,要将其转码
native2ascii -encoding utf-8 temp.txt messages_zh_CN.properties
4、在jsp页面中显示
jsp显示的处理
<s:text name="hello"/>
<s:property value="%{getText('hello')}"/>
<s:textField name="user.userName" label="%{getText('hello')}"/>
2、代码中取值
3、国际化的参数
在资源文件的国际化字符串中使用OGNL,格式为${表达式}
${getText('userName')}从资源文件中取出键名为userName的信息
${min}:取出校验文件"action名-validation.xml"文件中标签param中的信息
<validators>   
    <field name="age">
         <field-validator type ="int">
          <param name="min">10</param>
          <param name="max">100</param>
          <message key="ageValueError"></message>
        </field-validator>
    </field>
</validators>
${属性名}:取出ui组件中的值<s:textfiled name="birthday">
资源文件的种类
1、全局的资源文件,在struts.properties中文件中配置具体的文件名
,所有类及jsp页可以共用,主要存放全局的消息、错误信息,struts.propertis中内容如下:
struts.custom.i18n.resources=messages
2、包范围内的资源文件,在包的根目下加入properties文件,其名称与类包名一样,这个包下的所有类都可以用[没有实现]
包名.properties
包名_语言_国家.properties
3、action范围内的资源文件,只有当前Action才可以用,注意jsp页面无法显示,只有提交action后才可以显示。
action类名_语言_国家.properties
4、通过i18n,动态加地相应的消息
资源文件的查找顺序
1、流程图
2、具体说明,如果现在有一个Action名称是ChildAction
查找ChildAction_国家_语言.properties文件或ChildAction.properties;
查找ChildAction实现的接口,查找与接口同名的资源文件interface.properties;
查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
查找当前包下的包名.properties文件;
查找当前包的父包,直到最顶层包;
在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
查找在struts.properties配置的默认的资源文件
拦截器
struts2.0已有拦截器的使用
拦截器列表
<interceptor name ="alias" class ="com.opensymphony.xwork2.interceptor.AliasInterceptor" />
<interceptor name ="autowiring" class ="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor" />
<interceptor name ="chain" class ="com.opensymphony.xwork2.interceptor.ChainingInterceptor" />
<interceptor name ="conversionError" class ="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor" />
<interceptor name ="createSession" class ="org.apache.struts2.interceptor.CreateSessionInterceptor" />
<interceptor name ="debugging" class ="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
<interceptor name ="external-ref" class ="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor" />
<interceptor name ="execAndWait" class ="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor" />
<interceptor name ="exception" class ="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor" />
<interceptor name ="fileUpload" class ="org.apache.struts2.interceptor.FileUploadInterceptor" />
<interceptor name ="i18n" class ="com.opensymphony.xwork2.interceptor.I18nInterceptor" />
<interceptor name ="logger" class ="com.opensymphony.xwork2.interceptor.LoggingInterceptor" />
<interceptor name ="model-driven" class ="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor" />
<interceptor name ="scoped-model-driven" class ="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor" />
<interceptor name ="params" class ="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />
<interceptor name ="prepare" class ="com.opensymphony.xwork2.interceptor.PrepareInterceptor" />
<interceptor name ="static-params" class ="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor" />
<interceptor name ="scope" class ="org.apache.struts2.interceptor.ScopeInterceptor" />
<interceptor name ="servlet-config" class ="org.apache.struts2.interceptor.ServletConfigInterceptor" />
<interceptor name ="sessionAutowiring" class ="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor" />
<interceptor name ="timer" class ="com.opensymphony.xwork2.interceptor.TimerInterceptor" />
<interceptor name ="token" class ="org.apache.struts2.interceptor.TokenInterceptor" />
<interceptor name ="token-session" class ="org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />
<interceptor name ="validation" class ="com.opensymphony.xwork2.validator.ValidationInterceptor" />
<interceptor name ="workflow" class ="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor" />
<interceptor name ="store" class ="org.apache.struts2.interceptor.MessageStoreInterceptor" />
<interceptor name ="checkbox" class ="org.apache.struts2.interceptor.CheckboxInterceptor" />
<interceptor name ="profiling" class ="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
在struts.xml中引入struts-default.xml文件
在具体的action中引入已有的拦截器
使用已有拦截器:
1、加载struts-default.xml文件
<include file="struts-default.xml"/>
<package  extends="struts-default">
<action>
</action>
</package>
2、在action中配置具体的拦截器
<action>
<interceptor-ref name ="timer" />
</action>
自定义拦截器:
1、必须继承于AbstractInterceptor,覆盖intercept(ActionInvocation ai) 方法
ActionInvocation ai;
ai.getInvocationContext();//得到当前类运行的环境
ai.getAction();//得到当前正在运行的action
ai.invoke();//调用action对应的方法
2、在struts.xml文件中说明具体的拦截器
<interceptors>
            <interceptor name ="safe" class ="intercept.SafeIntercept" />
        </interceptors>
3、在action中引用拦截器
<interceptor-ref name ="safe" />
校验框架:
自动校验:
struts自动校验器列表:
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
</validators>
实现自动校验:
在strus.properties中说明具体资源文件所在位置
struts.custom.i18n.resources=messages
在src根目录下加入如下文件,说明国际化的消息
messages_en_US.properties
具体内容:
userName=userName
password=password
age=age
birthday=birthday
userNameRequiredError=${getText('userName')}is not null
pwdRequiredError=${getText('password')}is not null
pwdLengthError=${getText('password')} 's length must between ${minLength} and ${maxLength}
ageValueError=${getText('age')} 's range must between  ${min} and ${max}
birthdayError=${getText('birthday')} between ${min} and ${max}
messages_zh_CN.properties
具体内容:
userName=用户名
password=密码
age=年龄
birthday=生日
userNameRequiredError=${getText('userName')}不能为空
pwdRequiredError=${getText('password')}不能为空
pwdLengthError=${getText('password')}的长度必在${minLength}和${maxLength}之间
ageValueError=${getText('age')}的长度必在${min}和${max}之间
birthdayError=${getText('birthday')}${birthday}的范围在${min}和${max}之间

以上文件有中文,转码命令如下:
native2ascii -encoding utf-8 messages.txt messages_zh_CN.properties
在运行Action所在包中加入Action类名称-validation.xml文件,说明具体的校验规则。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">         
<validators>
    <field name ="userName">
        <field-validator type ="requiredstring">
          <message key="userNameRequiredError"></message>
        </field-validator>
    </field>  
    <field name="pwd">
        <field-validator type ="requiredstring">
          <message key="pwdRequiredError"></message>
        </field-validator>
         <field-validator type ="stringlength">
           <param name="minLength">6</param>
           <param name="maxLength">18</param>
           <message key="pwdLengthError"></message>
        </field-validator>
    </field>   
    <field name="age">
         <field-validator type ="int">
          <param name="min">10</param>
          <param name="max">100</param>
          <message key="ageValueError"></message>
        </field-validator>
    </field>
    <field name="birthday">
         <field-validator type ="date">
         <param name="max">2008-01-31</param>
         <param name="min">2008-01-01</param>
          <message key="birthdayError"></message>
        </field-validator>
    </field>
</validators>
在jsp页面是显示
<s:form action="loginAction">
<s:textField name="userName" label="%{getText('userName')}"/>
<s:textField name="pwd" label="%{getText('password')}"/>
<s:textField name="birthday" label="%{getText('birtday')}"/>
<s:textField name="age" label="%{getText('age')}"/>
</s:form>
通过上面的内容可以看到<field-validator type=""/>标签都有一个type属性,其值与struts自动校验器列表中的name属性是一样的。
field-validator标签内有message标签,其有一个key属性与资源文件的键名是一样的,通过该键名加载错误信息。
在资料文件中通过${min},${max}取"<param name="max">10</param>"中值,${birthday}取LoginAction中birthday属性值,
${getText('birthday')}取资源文件键名为birthdays消息。
Validator和Field-Validator之间的区别
Field-Validator:只校验一个字段的规则
Validator:
可以校验多个字段之间的关系
<validator type="expression>
         <param name="expression">pwd ge/lt/gt/le/ge pwd1</param>
         <message>pwd and pwd1 must equal</message>
</validator>
可以校验一字段
<validator type="required">
        <param name="fieldName">birthday</param>
        <message>You must enter a value for bar.</message>
</validator>
短路(Short-Circuiting):如果一个校验出错,其余后续的校验将不再进行
自动校验的顺序是首先Validator,其次Field Validator,
但在Validator或者Field Validator执行的过程中,
顺序按照xml文件中的定义,以上的执行顺序是。
需要修改的内容:
配置文件查找顺序:
对于LoginAction写一个LoginAction-validation.xml,其会根据action名称找开
LoginAction-validation.xml文件,但是如果LoginAction有继承关系或实现了接口
其找具体的校验规则是怎样的呢?
假设以下条件成立:
接口 Animal;
接口 Quadraped 扩展了 Animal;
类 AnimalImpl 实现了 Animal;
类 QuadrapedImpl 扩展了 AnimalImpl 实现了 Quadraped;
类 Dog 扩展了 QuadrapedImpl;
如果Dog要被校验,框架方法会查找下面的配置文件(其中别名是Action在struts.xml中定义的别名):
Animal-validation.xml
Animal-别名-validation.xml
AnimalImpl-validation.xml
AnimalImpl-别名-validation.xml
Quadraped-validation.xml
Quadraped-别名-validation.xml
QuadrapedImpl-validation.xml
QuadrapedImpl-别名-validation.xml
Dog-validation.xml
Dog-别名-validation.xml
实现手动校验:
1、Action实现Validatable接口,并实现接口中定义的方法,内容如下
public void validate()
{
User user = getUser();
if (userName==null||userName.length=0)
{
    addActionError(getText("userNameRequired"));
}
if (pwd==null||pwd.length=0)
{
    addActionError(getText("passwordRequried"));
}
}
通过注解校验:
1、校验类说明
枚举类型
ValidatorType     
Field    校验字段
Simple   校验其他
Annotation(标注)类型
Validation
    用来标记一个类需要被校验
ConversionErrorFieldValidator
    字段转换出错
DateRangeFieldValidator
    日期范围校验
DoubleRangeFieldValidator
    Double类型范围校验
EmailValidator
    Email地址校验
ExpressionValidator
    使用一个OGNL表达式的校验,功能非常强大
FieldExpressionValidator
    针对一个字段的使用OGNL表达式的校验
IntRangeFieldValidator
    Int类型范围校验
RegexFieldValidator
    正则表达式校验
RequiredFieldValidator
    必填字段校验
RequiredStringValidator
    必填String校验,
StringLengthFieldValidator
    字符串长度校验
UrlValidator
    URL校验
Validations
    可以组合上述的各种校验类型以满足更多的需求。
VisitorFieldValidator
    可以将Action中的对象的属性的校验方法定位到已经定义的对象原有的校验方法
CustomValidator
ValidationParameter
        两个类一起完成自定义的校验
javsScript校验:
在form中加入validate="true"属性
<s:form validate="true">
</s:form>
只有下面的几种支持javaScript校验
required validator
requiredstring validator
stringlength validator
regex validator
email validator
url validator
int validator
double validator
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>
struts2.0的转换器(converter)
批量转化数据,可以将table中的多行信息转化为到Action中的List属性中
类型的转化:具体实现
customer.buies[0].buyName
customer.buies[1].buyName
customer.buies[2].buyName



分享到:
评论

相关推荐

    struts1和struts2的区别

    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    -- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --&gt; &lt;bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    struts2 chm 帮助文档

    struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板 struts2环境搭建:基础框架搭建,简单易上手,适合新手,比你看书强多了,实践源于理论而高于理论,贵在实践 朋友。 struts2 新闻发布系统:struts2+jsp 功能不...

    Struts2漏洞检查工具2019版 V2.3.exe

    Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...

    struts2技术内幕+struts2权威指南

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...

    Struts2漏洞检查工具Struts2.2019.V2.3

    Struts2漏洞检查工具Struts2.2019.V2.3

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    struts2 技术内幕——深入解析struts2架构设计

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。  本书以Struts2的...

    struts2实例 学生信息管理系统

    struts2实现的学生信息管理系统 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    struts2 资料struts2 资料struts2 资料struts2 资料

    struts2 资料struts2 资料struts2 资料struts2 资料

    Struts2实战.pdf

    资深开发人员深入剖析Struts2核心概念和组件 学习Struts不可不读 作者简介 作者:(美国)Donald Brown (美国)Chad Michael Davis (美国)Scott Stanlick 译者:马召 等 Donald Brown,Atlassian软件系统公司托管...

    Struts 2 远程代码执行漏洞(s2-045\s2-046)修复所用到的包

    struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar --来源 ...

    struts2(1-7)源码 struts2学习入门 源码学习

    struts 初步认识Struts2并部署验证 struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter ...

    Struts2工作流程图

    虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度...

Global site tag (gtag.js) - Google Analytics