struts2基础梳理(一)

前段时间大致看了看《轻量级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,今天就先写这些吧。。。

时间: 2024-08-03 20:18:21

struts2基础梳理(一)的相关文章

struts2基础梳理(二)

本篇主要有:设置struts2匹配的扩展名,使用通配符,值栈,声明式异常以及标签. 设置扩展名: 默认是对.action和不加任何扩展名的进行处理.可以设置: <constant name="struts.action.extension" value="action,do,"></constant>//对.action,.do和不加任何的拦截 通配符: 为了简化action的配置,可以使用通配符,大致写法如下: <action nam

java基础梳理--朝花夕拾(三)

1.了解面向对象的编程思想以及面向对象的特性: 对象: EveryThing is Object: 万物皆是对象,在程序中,我们可以将类.接口.方法.属性等都认为是对象: 面向对象: 是一种程序设计方法,它以对象作为基本的单元来构建系统,它利用对象将系统的复杂性隐藏在对象里(即封装),从而构建大型的工业级系统和大型系统. 面向对象包括三个过程: 面向对象分析(OOA).面向对象设计(OOD).面向对象编程(OOP). 面向对象的三个特性: 继承.封装.多态 面向对象和面向过程的区别? 面向过程就

struts2 知识梳理

一:struts.xml配置详解: 1.<include> 表示引入其他配置文件 2.<constant> 定义常量 3.<package>:  属性 是否必需 描述name 是 包名,作为其它包应用本包的标记extends 否 设置本包继承其它包namespace 否 设置包的命名空间,会改变url,abstact 否 设置为抽象包 4<action>和<result> <action>有name,class,method,conv

java基础梳理--朝花夕拾(二)

1.Java语言语法规则和文件格式: 第一个Java程序:/** 第一个Java程序:控制台输出Hello world!*/public class Test{    //访问修饰符 class关键词用于声明类使用 后面跟类名   public static void main(String args[]){//程序的入口,主函数main方法:        System.out.println("Hello world!");// 输出语句   }} Java语言区分大小写:publ

Struts2基础学习总结(二)

Struts2基础学习总结(二)---struts.xml参数 1.常量 使用<constant name="" value=""></constant>元素进行描述 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Strut

Struts2基础学习总结

Struts2基础学习总结(一)---入门 Struts 2: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts2以WebWork为核心,采用拦

js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?

日常在群里讨论一些概念性的问题,比如变量提升,作用域和闭包相关问题的时候,经常会听一些大佬们给别人解释的时候说执行上下文,调用上下文巴拉巴拉,总有点似懂非懂,不明觉厉的感觉.今天,就对这两个概念梳理一下,加深对js基础核心的理解. 1. 执行上下文(execution context)与可执行代码(execution code) 1.1 首先说一下,可执行代码的类型有哪些: 全局代码:例如加载外部的js文件或者本地标签内的代码.全局代码不包括 function 体内的代码 函数代码:functi

js基础梳理-究竟什么是变量对象,什么是活动对象?

首先,回顾下上篇博文中js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?的执行上下文的生命周期: 3.执行上下文的生命周期 3.1 创建阶段 生成变量对象(Variable object, VO) 建立作用域链(Scope chain) 确定this指向 3.2 执行阶段 变量赋值 函数引用 执行其他代码 1.什么是变量对象(Variable Object) 在写程序的时候会定义很多变量和函数,那js解析器是如何找到这些变量和函数的? 变量对象是与执行上下文对应的概念,在

js基础梳理-如何理解作用域和作用域链?

本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关于作用域的定义,只是在"4.2执行环境及作用域"中简单说了下执行环境(execution context)的概念.而执行环境其实就是之前博客:js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?中的执行上下文. 而在<JavaScript权威指南>中,对作