struts2学习1

struts2使用优势

自动封装参数

参数校验

结果的处理(转发|重定向)

国际化

显示等待页面

表单的防止重复提交

struts2具有更加先进的架构以及思想

使用拦截器

struts2的历史

struts2与struts1区别就是技术上没有什么关系.

struts2的前身是webwork框架.

搭建struts2框架搭建

1.导包 在项目中找

2.书写Action类(处理请求的类) 无需继承什么类

public class Hello {
    public String hello() {
        System.out.println("hello");
        return "success";
    }
}

3.书写src/struts.xml   dtd约束

<struts>
    <package name="hello" namespace="/hello" extends="struts-default.xml">
        <action name="HelloAction" class="com.action.HelloAction"
            method="hello">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

4.将struts2核心过滤器配置到web.xml 因为struct2就是基于过滤器的

<filter>
      <filter-name>struts</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

struts2访问流程&struts2架构

配置详解

struts.xml配置

<package name=”hello” namespace=”/hello” extends=”struts-default”>
package:将action配置封装 就是可以在package 中配置很多action
     name属性:给包起个名字,起到标识的作用,不能和其他的包名重复
namespace属性:给action的访问路径中定义一个命名空间
extends属性 继承一个包
abstract属性 包是否为抽象的 标识性属性,标识该包不能被独立运行 专门被别人继承

action元素 配置action类
name属性:决定了action访问资源名
class属性:action所在的完成类名
method属性:指定调用action中指定的方法来处理请求
result元素 结果配置
    name属性:标识结果处理的名称  与action方法的返回值对应
    type属性:指定调用哪一个result类来处理结果,默认使用转发
     标签体:填写页面的相对路径文件
<result name=”success” type=”dispatcher”>/a.jsp</result>

引入其他struts配置

<include file=”/…/…/file.xml”></include>

struts2常量配置

struts2默认常量配置位置   struts-core/default.properties 文件

修改struts2常量配置(方式先后也是加载顺序)

方式1:src/struts.xml里面添加

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

方式2:在src下创建struts.properties

struts.i18n.encoding=utf-8

方式3:在项目的web.xml中

<context-param>
      <param-name>struts.i18n.encoding</param-name>
      <param-value>utf-8</param-value>
  </context-param>

配置文件加载顺序

default.properties  struts-default.xml    struts-plugin.xml     struts.xml    struts.properties  web.xml

常量配置 struct.xml文件中配置

<constant name="struts.i18n.encoding" value="utf-8"></constant>
解决post提交中文乱码问题

<constant name="struts.action.extension" value="action"></constant>
指定访问action时的后缀名  action
<constant name=”struts.devMode” value=”true”></constant>
指定struts2是否以开发模式运行
    1.热加载主配置(不需要重启即可生效)
    2.提供更多错误信息输出,方便调试

动态方法调用

方式1 不利于SEO优化

配置动态方法调用是否开启常量

默认是关闭的,需要开启

<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

访问  Demo!find.action

方式2 和是否开启常量无关 _ 不是必须的

使用通配符: 使用{1} 取出第一个 星号通配的内容

<action name=”Demo_*” method=”{1}”>

访问 Demo_find

struts2中的默认配置(了解)

<package name="default" namespace="/default" extends="struts-default">
        <default-action-ref name=”DemoAction”></default-action-ref>
        <action name="abcAction" class="com.action.Demo" method="find">
            <result name="success">/Hello.jsp</result>
        </action>
    </package>
找不到包下的action,会使用 默认的action来处理请求
默认 method属性 execute
     name属性 success
     type属性 dispatcher 转发
     class 属性 com.opensymphony.xwork2.ActionSupport

Action类的书写方式

方式1(理想状态 开发不常用)

不用继承任何父类 也不需要实现任何接口 似的Struts2框架的代码侵入性更低

public class DemoAction

方式2:实现Action接口

里面定义了execute方法,提供了action方法的规范

Action接口里面预值了一些字符串 可以在返回结果的时候使用

Public class DemoAction implements Action

方式3:继承一个类 ActionSupport

帮我们实现了Validateable ValidationAware TextProvider LocaleProvider等接口

如果我们需要用到这些接口的实现时,不需要自己来实现了

而且在写配置文件的时候 action里面不需要写method

结果跳转方式

转发:type="dispatcher"

重定向:type="redirect"

转发到Action:type = "chain"

重定向到Action:

访问servletAPI方式

通过ActionContext下面2种都是通过这种方式得来的

通过ServletActionContext 因为纯Java操作   不推荐使用

通过实现接口方式 依次类推  通过拦截器实现Config...

Action生命周期

1.每次请求到来时,都会创建一个新的Action实例

2.Action是线程安全的.可以使用成员变量接收参数

属性驱动获得参数(不常用)

对象驱动

模型驱动

集合类型参数封装

List

<input type=”text” name=”list”/> <input type=”text” name=”list[3]”>

private List<String> list;

Map

<input type=”text” name=”map[‘haha’]”/>

private Map<String,String> map;

注意:struts和hibernate包在合并时.javassist-3.18.1-GA.jar包是重复的,删除版本低的.

OGNL表达式

OGNL:对象视图导航语言.  ${user.addr.name} 这种写法就叫对象视图导航.

OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能.

使用OGNL准备工作

导包: struts2 的包中已经包含了.所以不需要导入额外的jar包

基本取值

赋值  多个赋值可以串联

调用方法

调用静态方法

创建对象(List,Map)

OGNL与Struts2的结合

查看值栈中两部分内容(使用DEBUG标签)在jsp页面

Root: 默认情况下,栈中放置当前访问的Action对象         Context部分就是ActionContext数据中心

struts2与ognl结合体现

参数接收

如何获得值栈对象,值栈对象与ActionContext对象是互相引用的

配置文件中使用

${ognl表达式}

扩展:request对象的getAttribute方法  wrappedRequest

查找顺序

原文地址:https://www.cnblogs.com/escapist/p/9059958.html

时间: 2024-10-09 18:11:04

struts2学习1的相关文章

struts2 学习记录 之 国际化

struts2 接下来是国际化,如果一个系统想要被多个国家的人所用就不得不考虑国际化的问题,如果为每一个国家都开发一套系统维护起来会很麻烦,所以就有了个思想,那就是把动态的,用不同语言展示的部分,放到配置文件中,动态的从文件里读取想要展示的内容,不同国家的人就得到了不同的展示,这是一个很好的思想,所以我把它记录一下了,嘻嘻... 首先 struts2 要把它的配置文件写好,以中文和美式英语为例,配置文件如下: 配置文件是以键值对的形式存在的,且以properties结尾,命名也有一定的格式,如t

struts2 学习记录 过滤器 国际化

struts2接触不是一天两天了,但是一直没有用它做什么项目,但老师确一直说它有很大的学习价值,所以还是把我学习到的东西给记录一下,记录的东西没有规律,只是给自己留个备份, struts2中最关键的是action,action可以用来传值,用起来很方便,它可以用el表达式在jsp页面上展示出来,也可以用ognl,el只能表达作用域里面的值,而struts2里面还有个放数据的地方叫做ActionContext,这个类里面可以放不在作用域里的键值对,但是el表达式还是可以获取到,但是效率很低,所以尽

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/

struts2学习笔记(8)-------struts2的ajax支持

struts2支持一种stream类型的Result,这种类型的Result可以直接向客户端浏览器响应二进制,文本等, 我们可以再action里面生成文本响应,然后在客户端页面动态加载该响应即可. 直接看例子: public class LoginAction { private String user; private String pass; private InputStream inputStream; public InputStream getInput(){ return inpu

Struts2学习

Struts2流程 Web端发起一个request到Struts2action的过程为:首先对提交的表单或者数据进行类型转换,如果转换失败,则action跳转至input所对应的页面,如果没有设置input对应的页面则页面报错.如果转换成功,则已经自动给action的属性赋值了,接下来会调用action中的validate()校验方法,如果校验失败,则同转换失败一样跳转至input所对应的页面,只有校验通过了,才会去执行execute()方法,然后根据返回值跳转到对应的页面. JSP EL表达式

Struts2学习笔记(OGNL表达式)

Struts2学习笔记(OGNL表达式) Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言: Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python.Ruby和Smarttalk等)的一些起特性: Velocity,严格来说不是表达式语言,它是一种基于Ja

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act

struts2学习笔记(7)------------ognl表达式

OGNL表达式(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言. Struts2自行维护一个特定范围的"银行",Action将数据放入其中,而JSP页面可从中取数据,表面上似乎看起来像是jsp可以直接访问Action数据.. 当Action属性不再是简单的值,而是某个对象,数组,集合时,就需要使用ognl表达式来访问这些对象,数组,集合内的数据了. 1)ognl的stack Conte

Struts2学习笔记1

一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包括了开发struts2所需的struts2-core.jar核心包以及其他struts2所依赖的JAR文件,另外另一些struts2的演示样例程序以及一些HTML的API文档. 二.试用struts2.0.1 1. 新建一个WEBproject,将struts-2.0.1-all.zip压缩包中的lib文件夹下的全部jar文件