Struts2 框架 配置使用详解

  1. 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的精力放到业务需求的分析和理解上面。
  2. 特点:封装了很多细节,程序员在使用的时候会非常简单。
  1. Longlong ago,有三大框架struts、hibernate、spring(SSH)
  2. springmvcmybatis、spring(SSM)

Struts2的来历

  1. Struts1:
  • Struts1也是apache开发的一套mvc的开源框架。在2005年之前非常流行。   
  • 弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。
  1. Struts2:
  • 在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。
  • Struts2就是apache和OpenSymphony组织合并开发出来。   
  • 里面包含了WebWork2的核心及Struts的一些特性和功能。除此之外,和Struts1没有任何关系了

一 Struts2框架部署

  1. 加载-Struts2基础jar包

  文件名

描述

Struts2-core-xxx.jar

Struts2核心框架类库

Xwork-core-xxx.jar

xwork类库Struts2的基础构架

Ognl-xxx.jar

使用的一种表达式语言类库

Freemarker-xxx.jar

标签模板使用类库

Commons-fileupload-xxx.jar

文件上传时进行处理

Commons-io-xxx.jar

Java-io类扩展

Commons-lang-xxx.jar

包含数据类型工具类

Javassist-xxx.GA.jar

对字节码进行处理

asm-3.3.jar

基于子类的动态代理

asm-tree-3.3.jar

提供其于对象的表现形式

asm-commons-3.3.jar

提供基于事件的表现形式

  1. 下载Struts2开发包 http://struts.apache.org
  1. 创建项目导入jar包
  1. 创建一个Web工程,名为day1WEB项目
  2. 把struts2-blank.war中的lib下所有的包导入创建的工程web-inf的lib下
  1. 添加配置文件

1、配置Web.Xm文件核心过滤器 ,一般固定写法

<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>

  1. 配置的目的是于拦截请求,Struts规则去处理请求,不是用以前的servlet处理

2、把struts2-blank的classes目录下struts.xml配置文件copy工程的src下<!-- -->注释的代码可以不添加

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
   "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

<!-- 常量配置

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

    <constant name="struts.devMode" value="false" />

   -->

    <!-- 可以创建多个package,但是名称不能相同! -->

    <package name="default" namespace="/" extends="struts-default">

    <!-- 默认的action名称

       <default-action-ref name="index" />

    -->

        <!-- 全局的结果集:针对于所有的action都是适用的

        <global-results>

            <result name="error">/error.jsp</result>

        </global-results>-->

        <!-- 全局的异常映射

        <global-exception-mappings>

            <exception-mapping exception="java.lang.Exception"

            result="error"/>

        </global-exception-mappings>

         -->

         <!-- 若在action中没有指定具体的class内容,

         则默认指定就是: ActionSupport类 -->

        <action name="inputdemo" class="com.action.UserAction">

            <result name="ok">/mvc/input1.jsp</result>

            <!--

            <result type="redirectAction">

                <param name="actionName">HelloWorld</param>

                <param name="namespace">/example</param>

            </result>

             -->

        </action>

        <!-- 执行指定的方法 -->

        <action name="input" class="com.action.UserAction" method="add">

            <result name="add">/mvc/input1.jsp</result>

        </action>

        <!-- 动态方法 -->

        <action name="input_*" class="com.action.UserAction" method="{1}">

            <result name="{1}">/mvc/input1.jsp</result>

        </action>

    </package>

    <!--  当配置文件内容很多的情况,可以创建多个配置文件,分别配置,

    然后再来包含到一个总文件中-->

    <include file="servlet.xml"/>

</struts>

4、编写action类方法

1、Src下创建com.action包新建 XXXAction的类,action会默认继承ActionSupport类

 

public class UserAction extends ActionSupport{

 private String uid;

 private String  uname;

 private String  upass;

public UserAction() {

super();

}

//相当于就是Servlet中的doGet(),doPost(),service()方法

@Override //默认执行的方法

public String execute() throws Exception {

String res=null;

  //处理语句

   System.out.println("----运行Use--execute()方法----");

   res="ok";

return res;

}

}

 

5、编写WEB jsp 页面

<h2>方式1:</h2>

<!-- Struts2中的请求路径的默认扩展名为: .action -->

<h2><a href="inputdemo.action?uname=lisi">进入</a></h2>

<h2>方式2:</h2>

<form action="inputdemo.action" method="post" >

  用户名: <input type="text" name="uname"/>

  <br><input type="submit" value="提交"/>

</from>

6、访问项目路径

  1. 浏览器访问下面三个路径
    1. http://localhost:8080/day1WEB/input1【能正常访问】
    2. http://localhost:8080/day1WEB/input1.action 【也能正常访问】
    3. http://localhost:8080/day1WEB/input1.xxx【不能正确访问】
  2. 因为struts默认处理.action请求,或者不带action可以,其它的都不会拦截放行,jsp

二 Struts2详细配置介绍

  1. Struts.xml无提示解决方法
  1. 如果struts里没有标签提示
  2. 第一种解决办法是电脑,会自动搜索struts的dtd
  3. 第二种解决办法配置本地dtd,打开preference,安装下面的步骤操作即可
  4. struts-2.3.dtd文件可以从struts2-core-2.3.33.jar包内找到
  5. 查看Struts的文档
  6. 目标:找struts架构图及内部
  1. 在线文件:http://struts.apache.org/core-developers/big-picture
  2. 离线文档:struts-2.3.33 /docs/docs/home.html
  3. 打开上面两个连接后,然后查找guides -> bigPictrue执行过程
  1. 注:User created标识的是以后我们经常要写的
  1. Struts2加载顺序

顺序

配置文件名

所在位置

说明

1

default.properties

struts2-core-2.3.15.3.jar\org\apache\struts2

不能修改

2

struts-default.xml

struts2-core-2.3.15.3.jar

不能修改

3

strtuts-plugin.xml

在struts2提供的插件jar包中

不能修改

4

struts.xml

我们的应用中

修改的:推荐

5

struts.properties

我们的应用中

修改的

6

web.xml

我们的应用中

修改的,可以给过滤器配置参数

  1. default.properties的默认配置

struts.i18n.encoding=UTF-8

国际化

struts.action.extension=action,,

默认访问扩展后缀,可以是action,也可以没有后续

struts.devMode = false

是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true。

5、配置文件主要元素

  1. Package元素  分包管理动作类,便于模块化开发动作类

name

包的名称。必须写。且必须唯一

extends

  • struts-default包,但不是必须的。
  • struts2提供的核心功能。
  1. 中定义着struts-default这个包。
  • struts-default.xml是在我们的struts.xml加载之前加载。

abstract

把包声明为抽象包,抽象包就是用来被继承的

只要是没有<action>元素的包,就可以声明为抽象包。

namespace

名称空间。【访问路径=名称空间+动作名称】,一般用于模块划分mo

 

  • namespace元素  需要在访问action前添加红色命令空间,默认值不是/,写自定义的namespace时需要加/

 

  1. Action 元素 配置动作,处理请求路径

name:动作名称, 注意名称不要写 / 

class:动作类全名。

method:动作类中的方法名称。默认是execute , 返回success

方法的要求: public的 返回值必须是String 没有参数

三种配置方法

1、直接在写个Action类,不需要继承任何类,然后在struts.xml中配置

2、写个Action类实现Action接口,然后实现excute方法

3、action继承ActionSupport、实现Action接口的类, 默认访问父类的execute()

  1. Result 元素 为动作指定结果视图

name:逻辑视图的名称,对应着动作方法的返回值。默认值是success

type:结果类型,指的就是用什么方式转到定义的页面。

dispatcher

(默认值)使用请求转发,转向一个页面。

redirect

使用重定向,转向一个页面。

chain

转发到另一个相同名称空间的动作: 动作的请求路径不用写/

转发到不同名称空间的动作

redirectAction

重定向到另一个相同名称空间的动作

重定向到不同名称空间的动作

6、默认动作类

struts.xml:以在Action不配置 class method,会由默认的动作类来处理,ActionSupport的excute方法返回的就是success

 

  1. 全局视图&&局部视图
  1. 前面的自定义结果类型的写法是局部视图,其它包是不能访问的
  2. 全局视图的配置

第一步:写一个包,名为myDefault,里面写全局的配置

第二点:其它包继承myDefault包,如图

三 访问servletAPI&接收pram

  1. 解耦方式访问方法
      • 第1、使用Map<k,v>集合将serlvet内置对象存放集合,获取 ActionConnext类的域对

 

Map<String ,Object> session=ActionContext.getContext().getSession();

Map<String, Object> request=(Map<String,Object>)ActionContext.getContext().get("request");

Map<String, Object>application=ActionContext.getContext().getApplication();

      • 第2:通过实现接口方法:先让Action实现个接RequestAware,ResponseAware,ApplictionAware
  1. 耦合方式访问方法
      • 第一种:通过ServletActionContext的getConnext()方法获取 【推荐使用】

 

HttpServletRequest request=ServletActionContext.getRequest();

HttpServletResponse response=ServletActionContext.getResponse();

 

      • 第二种:通过注入方式:先让Action实现两个接口ServletRequestAware,ServletResponseAware
  1. 参数注入原理
  1. 参数会自动注入是因为有拦截器在工作
  2. 看struts-default.xml源码可以看到下面两个拦截器
  3. <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
  4. <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

四 拦截器详解

1、拦截器的重要性

  1. Struts2中的很多功能都是由拦截器完成的。比如:servletConfig,staticParam,params,modelDriven等等。
  2. Struts默认的拦截器配置在struts-default.xml文件中
  3. 拦截器是AOP编程思想的一种应用形式

拦截器的应用场景【登录】

  1. 首先准备四个login.jsp,main.jsp, studentList.jsp, teacherList.jsp 页面
  2. 当登录成功后,跳转到main.jsp,main.jsp的内容可以跳转到学生和老师列表

 

如果没有登录,直接访问http://localhost:8080/day03_struts2_demo04/teacherList.action会回到登录页面

 

五 国际化详解

  1. 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据
  1. 例如:消息提示,错误提示和菜单,导航栏等等固定文本。
  1. 国际化组件加入

1、创建消息资源包

  1. 一个资源包由多个文件组成,这些文件名都有命名规范:主要文件名_语言代码_国家代码.properties
  2. 言代码和国家代码:有iso规定的
  3. 当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包
  4. 每个资源包的内容都由相同的key和对应语言环境的value组成。比如:
  • message_zh_CN.properties
  • message_zh_HK.properties
  • message_en_US.properties

2、读取消息资源内容

  1. Java提供ResourceBundle类可以读取资源包的际化配置文件

3、jsp使用国际化

  1. 使用jstl标签国际化
  1. JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
  2. JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。
  3. 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
  4. struts提供的国际化
  5. 配置资源包

A 局部资源

  1. 资源包名称命名规范:package_语言代码_国家代码.properties(固定的)。以此种命名方式的资源包能被该包及其子包中的动作类访问。
  2. 优先级:高于全局消息资源包

B 局部消息资源

  1. 资源包名称命名规范:动作类名称_语言代码_国家代码.properties以此种命名方式的资源包,只为动作类服务。
  2. 优先级最高(就近原则)。
  3. 读取资源内容
  4. jsp读取资源包内容 使用struts的标签s:text获取国际化内容

b、Action读取资源包内容

使用ActionSupport的getText方法,可以读取到资源包的内容

也就是说这个Action一定要继承ActionSupport 种在实际开发中几乎不用

c、自由指定读取资源包

  1. 在jsp页面可以使用s:i18n标签指向读取的国际资源包文件

 

 

 

转载于:https://my.oschina.net/u/4083965/blog/3017107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值