码迷,mamicode.com
首页 > 其他好文 > 详细

struts2基础梳理(一)

时间:2015-03-18 18:07:19      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:ssh   struts2   filter   

    前段时间大致看了看《轻量级Java EE企业应用实战》,说实话真心感觉没看多懂,其中看的最明白一点的就是struts2了,但也是基本不懂的状态。最近又该学ssh框架了,只能找相关的培训视频来系统的学习,当然时间也不是太多,所以只能快速进行重点的知识点的学习,这里记录一下大致过程,方便复习和巩固。

   首先,struts2是基于对Filter的封装而不是Servlet,因为Filter比Servlet更强大,Servlet能干的事,Filter基本上都能干,反过来则不行。

   配置:

    struts2配置大致分为三步:

  1.       导入jar包,可以把struts2的实例文件struts2-blank的lib文件都拷到项目下,较为方便。
  2.       配置web.xml ,这里直接copy一下就行了,基本上就是配置一个Filter
       <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>/*</url-pattern>
        </filter-mapping>
    
      配置struts2.xml,基本上把实例的拷过来自己改改就行了
  3.  关联struts2.xml中的“http://struts.apache.org/dtds/struts-2.3.dtd”以实现struts代码的提示
 关于struts.xml:

     package:作为struts2组织模块的一个单位,可以把一类的action放在一个package中,比如用户管理模块。
                    属性:name:标示一个package
                              namespace:命名空间,默认"/",如果加了,在请求url中action前必须加入

                              extends:继承的包,默认是 struts-default

     action:对应每一个请求都有一个action相对应,用来处理请求,可以理解为电话转接台

                name:对应一个 struts2 的请求的名字(或对一个 servletPath, 但去除 / 和扩展名), 不包含扩展名

                class:要处理请求的类的名称(包括包名),默认值为: com.opensymphony.xwork2.ActionSupport

                method :要处理请求的类中的处理方法, 默认是execute

                 result:返回的结果以及根据结果的处置。

  简单示例:

<struts>
     <package name="default" namespace="/" extends="struts-default">
     <action  name="actiontest1" class="jsky.action.ActionTestAction">
      <result>/pages/show.jsp</result>
     </action>
     <action  name="actiontest2" class="jsky.action.ActionTestAction" method="log">
      <result name="success" >/pages/show2.jsp</result>
      <result name="error" >/pages/error2.jsp</result>
     </action>
</package>
</struts>

 在Action中获取web资源:

     在Action中有时需要对域对象进行处理,这就涉及到对web资源的访问问题。访问web资源两种方式,一种是和Servlet解耦的,但是可以访问的资源很有限,一种是和Servlet耦合的,但是可以访问很多资源。

  • 解耦方式(可以读取请求参数, 读写域对象的属性, 使 session 失效等)
     一种是使用 ActionContext,一种是实现xxxAware 接口(xxx代表application,session,request)。一般当处理类中需要多次使用域对象的map或 parameters使用aware接口。
  • 耦合方式(可以访问的方法更多,而且可以访问Servlet原生方法)
    基本上跟上一种使用方式差不多,使用 ServletActionContext或者实现 ServletXxxAware 接口。就是单词前多了一个Servlet。
 这里比较详细的给出解耦的ActionContext方式访问:

 

public String execute()
     {
	//获取 ActionContext 对象
	//ActionContext 是 Action 的上下文对象. 可以从中获取到当往 Action 需要的一切信息
    	 ActionContext actionContext=ActionContext.getContext();
    	//1. 获取 application 对应的 Map
    	 Map<String,Object> applicationMap=actionContext.getApplication();
    	 Object applicationValue=applicationMap.get("applicationKey2");
    	 System.out.println("applicationValue");
    	 applicationMap.put("applicationKey2", "ijinp");
    	//2. session
    	 Map<String,Object> sessionMap=actionContext.getSession();
    	 Object sessionValue=sessionMap.get("sessionKey");
    	 System.out.println("sessionValue");
    	 sessionMap.put("sessionKey2", "guochangqing");
    	///3. request* 
 		//ActionContext 中没有提供 getRequest 方法
 		//需要调用 get() 方法, 传入 request 字符串来获取. 
    	 Map<String,Object> requestMap=(Map<String, Object>) actionContext.get("request");
    	 Object requestValue=requestMap.get("requestKey");
    	 System.out.println("requestValue");
    	 requestMap.put("requestKey2", "liujishuai");
    	//4. 获取请求参数对应的 Map, 并获取指定的参数值. 
 		// 键: 请求参数的名字, 值: 请求参数的值对应的字符串数组
 		// 注意:   1. getParameters 的返回值为在 Map<String, Object>, 而不是 Map<String, String[]>
 		//       2. parameters 这个 Map 只能读, 不能写入数据, 如果写入, 不出错, 但也不起作用!
    	 Map<String,Object> parameters=(Map<String, Object>) actionContext.getParameters();
    	String nameValue= (String) parameters.get("name");
    	 return "success";
     }
 OK,今天就先写这些吧。。。

struts2基础梳理(一)

标签:ssh   struts2   filter   

原文地址:http://blog.csdn.net/js_sky/article/details/44414171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!