struts2技术要点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2技术要点相关的知识,希望对你有一定的参考价值。

1,MVC框架完成的事情

    ServLet做哪些事情:
        处理用户提交的数据
        调用业务方法
        处理业务结果
        控制视图显示
        用户请求映射到一个Java类
    MVC框架做的事情
        将用户请求映射到一个Java类
        获取用户提交的数据
        渲染数据(将数据封装到前台显示(request))
        控制视图跳转
 注:
   ServLet strtus2
默认执行方法 service execute
方法参数 HttpServLetRequest, HttpServletRespones
返回值 String
方法   都是public
配置action类,在strtus.xml文件中,配置He‘llAction
Strtus2是基于包管理的
当配置时找不到<package>时:
Windows-----Preference---XML---XMl CataLog----ADD(location:C:\Users\cy\Desktop\struts-2.3.32\src\core\src\main\resources\_.dtd,ket type:URI,key:struts.xml头文件Http),配置完就有了
<struts>
<!--extends必须写,直接或间接继承struts-default name自定义-->
 <package name="hello" extends="struts-default"> 
<!--name是请求名称,不要写/;class对应action完全限定名==包名+类名-->
  <action name="hello" class="包名.类名">
<!--result是结果集,name和对应action中-->
   <result name="success">/index.jsp</result>
  </action>
 </package>
</struts>
小注:当修改表单action的后缀名时,做以下操作:
   找到/Web App Libraries/struts2-core-2.3.32.jar/org.apache.struts2/default.properties,打开后,找到struts.action.extension=action,,往后添加即可
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1,struts2线程安全
线程安全:在一个线程中有多个线程并发执行,每个线程执行过程中,变量值是相同的,执行结果也是相同的.
struts2线程是安全的,因为每次请求都会重新创建新的action对象
由于action对象是struts2,反射生成的,所以要求Action类要有一个公共的无参构造方法.
2,配置文件详解
①常量配置方式一
1)乱码问题:
若是有乱码:查看/org/apache/struts2/default.properties下的struts.i18n.encoding=UTF-8,可以再strtus.xml里面配置
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
2)自定义扩展名:
查看/org/apache/struts2/default.properties下的struts.action.extension=action,, , 可以再strtus.xml里面配置
<constant name="struts.action.extension" value="action,,cy"></constant>
3)友好提示信息
查看/org/apache/struts2/default.properties下的struts.devMode = false   , 可以再strtus.xml里面配置,设置开发模式
<constant name="struts.devMode" value="true"></constant>
4)设置配置文件修改后自动加载---推荐在开发中使用
查看/org/apache/struts2/default.properties下的struts.configuration.xml.reload = true   , 可以再strtus.xml里面配置
<constant name="struts.configuration.xml.reload" value="true"></constant>
②常量配置方式二
在src下添加struts.properties配置文件
③团队协作开发配置
        通过include添加不同人员的配置文件
<include file="文件位置"></include>
  配置文件的加载顺序
            struts-default.xml-->struts-plugin.xml-->struts.xml
    package的配置
<!--name: 包的名称自定义,可以配置多个包;
    namespace命名空间:不同模块可以指定不同的空间
    extends 值是直接或者间接继承struts-default
-->
	<package name="default" namespace="/" extends="struts-default">	
	</package>
action的配置
<!--
name:是URL请求名,不需要加后缀(.action)
class:是处理URL请求对应的Java类,class要求包名+类名,并且该类是由公共的无参构造方法的
method:配置处理请求类的处理方法,默认是execute;方法必须满足是公共的,返回值类型是String,无参
-->
<action name="login" class="cn.cy.action.LoginAction" method="">
</action>

 

    result的配置
<!--
name:匹配请求处理方法的返回值,默认是success
type:结果处理类型,默认是dispather转发
type有哪些:
        <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
chain:指action链,链接下一个action,执行actionA以后直接执行actionB直接执行actionC;
地址栏是执行的第一action
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
dispatcher:转发:和ServLet一致,若request中有数据要多视图显示,那么就是用
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
freemarker:模板
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
httpheader:头文件
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
redirect:重定向;如果重定向到jsp页面,可以直接重定向,如果重定向到另一个action,需注意是否配置了action的后缀名,如果                          要求有后缀名,那么重定向的action一定要加上后缀名.
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
redirectAction:重定向到另一个action,不用加action的后缀名,会将前一个action的后缀名自动加上
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
stream:以流的形式显示----文件下载
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
-->
<result name="success" type="">/success.jsp</result>

 

     全局配置
只要namelogin的,都跳到login.jsp
全局结果集
 <global-results>
<result name="login">/login.jsp</result>
</global-results>
在action的配置中,如果不去配置class属性,将会由默认的action来执行,默认的action是ActionSupport类
<!-- 配置默认执行的class -->
<default-class-ref class="包名+类名"></default-class-ref>
<!-- 配置默认的action,当所请求的action不存在时,那么执行默认的action -->
<default-action-ref name="default"></default-action-ref>
<action name="default">
<result>error.jsp</result>
</action>
通配符的配置
<!-- 使用通配符来配置action,可以减少action的配置,*表示匹配所有,占位符用{1}表示第一个*所代表的内容 -->
<action name="*user*" class="包+类" method="{1}">
<result name="ss">ss.jsp</result>
</action>
通配符可以有两个,但是method只能有一个{1};
减少action的配置还可以使用DMI(动态方法调用),不推荐使用,存在安全隐患.
3,action的实现方式
1), 定义一个pojo类
    好处:自定义一个普通的Java类即可,不具有侵入性
public class PojoAction {
public String execute(){
~~~
return "success";
}
}
2),实现action接口
好处:室编写的代码更加规范
import com.opensymphony.xwork2.Action;
 
public class InterfaceAction implements Action{
 
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
 
}
3)继承ActionSupport类
import com.opensymphony.xwork2.ActionSupport;
 
public class ExtendsAction extends ActionSupport{
 
}

 

以上是关于struts2技术要点的主要内容,如果未能解决你的问题,请参考以下文章

Struts2配置知识要点

Struts2开发Action知识要点

html 这个要点包含使用RightCare品牌创建浮动框的片段。

Struts2又曝高危远程代码执行漏洞 多家安卓手机芯片厂商的Bootloader存在漏洞

Struts2整合Spring

Struts2 技术全总结 (正在更新)