Struts2框架基本知识

Struts2框架的概述:

什么是框架:

框架是一个软件的半成品,通过完成部分的功能.

什么是Struts2框架:

Struts 2Struts的下一代产品,是在 struts 1WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2体系结构Struts 1的体系结构差别巨大。Struts 2WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1Struts 2有着太大的变化,但是相对于WebWorkStruts 2的变化很小。

 


Struts2是一个基于MVC设计模式的WEB层框架.

* EE三层结构:WEB层,业务层,持久层.

* MVCEE三层结构.由不同的时期,不同的人提出来.

WEB层的框架:

Struts1

WebWork

Struts2

SpringMVC

----WEB层框架的特点:(前端控制器模式:)

从客户端的每次请求都会到达前端控制器(核心过滤器):在前端控制器中完成部分功能代码,具体的代码会被分发到不同的Action中进行处理.

 Struts2Struts1的区别:

Struts2核心是webwork.

Struts2Struts1除了名称相近之外没有太大联系.

Struts2的目录结构:

* apps :Struts2提供一些应用.war:web项目打包成war格式.java工程打包成jar格式.

* docs :Struts2的开发文档.

* lib :Struts2的开发的jar.

* src :Struts2的源码.


struts2创建过程:
----1.创建一个Web工程:
----2.引入相应的jar:

struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib

引入提供的空的应用中的所有的jar:

----3.编写一个JSP的页面:

<h1>Struts2的入门案例</h1>

<h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门</a></h3>

----4.配置Struts2的核心过滤器:(前端控制器)
1
2
3
4
5
6
7
8
9
<!-- 配置Struts2的核心过滤器 -->
  < filter >
    < filter-name >struts2</ filter-name >
    < filterclass >org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</ filter-class >
  </ filter >
  < filter-mapping >
    < filter-name >struts2</ filter-name >
    < url-pattern >/*</ url-pattern >
  </ filter-mapping >

-----5.编写一个Action

配置Action:(Struts2框架的配置文件中进行配置)

1
2
3
4
5
6
7
8
9
< struts >
      <!-- 配置一个包: -->
     < package name = "demo1" extends = "struts-default" namespace = "/" >
            <!-- 配置Action:name是请求action去掉后缀名的名称. -->
           < action name = "hello" class = "cn.itcast.struts2.demo1.HelloAction" >
              < result name = "success" >/demo1/success.jsp</ result >
           </ action >
     </ package >
</ struts >

----6.编写一个success.jsp


Struts2的执行的流程:

从客户端发送请求---》先经过核心过滤器:(StrutsPrepareAndExecuteFilter).----》执行一组拦截器(完成了部分功能)-----》执行目标Action------》跳转到结果页面.

配置文件的加载顺序:

创建了StrutsPrepareAndExecuteFilter的时候,在init方法中执行Dispatcher中的init方法:

init_DefaultProperties(); // [1] ----加载org/apache/struts2/defaultdefault.properties

init_TraditionalXmlConfigurations(); // [2] ----加载struts-default.xml,struts-plugin.xml,struts.xml

init_LegacyStrutsProperties(); // [3] ----加载自定义struts.properties

init_CustomConfigurationProviders(); // [5] ----加载用户配置提供

init_FilterInitParameters() ; // [6] ----加载web.xml

init_AliasStandardObjects() ; // [7] ----加载Bean

default.properties

struts-default.xml

struts-plugin.xml

strtus.xml

struts.properties

web.xml

因为这个三个配置文件都可以修改struts2中常量:后加载的修改的常量会生效!!!


Struts2的常见配置:

<package>:.

包的概念

Java中包:用来区分类重名的问题.

Struts2中包:用来管理<action>

<package>中属性:

* name :包的名称.名称需要时唯一的.

* extends :继承.代表当前的包继承其他的包.一般都继承struts-default包(struts2框架提供的..

* namespace :名称空间.名称空间与<action>中的name属性共同决定的访问路径.

* namespace的取值:

* namespace=”” :默认值.默认名称空间

* namespace=/ :跟名称空间.

* namespace=/aaa/bbb :带名称的名称空间.

名称空间的访问顺序:

如果访问路径中有名称空间,访问带有名称空间的action.如果访问路径中没有名称空间,先会去跟名称空间下查询.去默认的名称空间下查询.

访问的过程中有名称空间最大化的原则:

* abstract :抽象的.(了解).如果包是abstract=true.那么这个包可以被其他包继承的.

<action>的配置:

<action>的属性:

* name :<package>namespace共同决定action的访问路径.

* class :Action类的全路径.

* method :执行Action中哪个方法.默认值execute

默认的ActionAction的默认处理类:

默认的Action :当访问一个路径不存在的Action的时候,正常会报404.可以配置一个默认的Action.访问一个找不到的路径的时候,就会执行默认的Action:

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

Action的默认处理类 :路径可以找到,但是class属性没有配置.

<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

<result>的配置:

<result>的属性:

* name :逻辑视图名称.

* type :跳转的方式.


常量的配置:

***** Struts2常量定义在 default.properties

修改常量可以在哪几个文件中修改:

struts.xml (推荐在文件中修改常量.)

格式:<constant name="" value=""/>

struts.properties

格式:key=value

web.xml

格式:

1
2
3
4
5
6
7
8
< filter >
  < filter-name >struts2</ filter-name >
  < filter-class >org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</ filter-class >
    < init-param >
     < param-name >key</ param-name >
     < param-value >value</ param-value >
    </ init-param >
  </ filter >

***** 后加载配置文件修改的常量会将先加载的配置文件修改的常量覆盖.

常见的常量:

struts.i18n.encoding=UTF-8 :Struts2使用UTF-8字符集.在提交数据采用POST方式的时候中文乱码不需要进行处理了.

struts.action.extension=action,, :Struts2的默认扩展名.默认值action,, 默认值是action或者不写.

修改常量:

<constant name="struts.action.extension" value="do"/>

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


包含<include>的配置:

包含其他模块的配置文件:

<include file="cn/itcast/struts2/demo1/struts_demo1.xml"/>

访问action的三种方法:
----1、一个action对应一个方法,直接访问
----2、使用通配符的形式完成Action的访问:(*****)

条件:

执行的方法要和访问的路径有一定关系!!!

----3、动态方法访问.(***)

条件:

必须开启sruts2的中一个常量!!!

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

动态方法访问的格式:

* Action的访问路径!方法名.action

 结果页面<result>的配置的类型:

<result>标签:

* name :逻辑视图名称默认值是success.

* type :类型.

* dispatcher :默认值.转发.(转发到JSP)

* redirect :重定向.(重定向到JSP)

* chain :转发.转发到一个Action.

* redirectAction :重定向到Action.

stream :文件下载的时候使用的.


Servlet是单例的:

第一次请求会创建Servlet的对象的实例,以后每次访问都使用的是同一个Servlet的实例.出现线程安全的问题.

Action是多例的:

每次请求都会创建一个新的Action的实例.不会出现线程安全的问题.

 





转载于:https://my.oschina.net/mickeymouse/blog/518729

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值