Struts2 之配置文件编写,动作类(01)

来源:互联网 发布:ubuntu 16.04 聊天工具 编辑:程序博客网 时间:2024/06/06 04:24

学习路线:

1.struts入门(配置文件编写,动作类的编写及其访问方式)
2.封装数据和访问Servlet的api
3.ognl和值栈
4.拦截器和注解开发

struts2基本概念

Struts2是一种基于MVC模式的轻量级Web框架.
Struts2是Struts1的下一代产品,是在 Struts1和WebWork技术的基础上进行合并后的全新框架(WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架,它也是一个MVC框架)。虽然Struts2的名字与Struts1相似,但其设计思想却有很大不同。实质上,Struts2是以WebWork为核心的,它采用拦截器的机制来处理用户的请求。
总而言之,Struts 2可以理解为WebWork的更新产品

入门:

环境配置

1.下载struts2

Struts2的官网: https://struts.apache.org/
解压zip
新建项目(web)

2.解压下的目录

  • apps:该文件夹存用于存放官方提供的Struts2示例程序,这些程序可以作为学习者的学习资料,可为学习者提供很好的参照。各示例均为war文件,可以通过zip方式进行解压。
  • docs:该文件夹用于存放官方提供的Struts2文档,包括Struts2的快速入门、Struts2的文档,以及API文档等内容。
  • lib:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库。
  • src:该文件夹用于存放该版本Struts2框架对应的源代码。

3.导入jar包:

struts解压目录下/apps/struts-blank.war,这个是基本的空白包,把里面的jar包都导入我们项目即可

4.编写一个连接

<a href="${pageContext.request.contextPath }/hello">a_入门</a>

5.编写HelloAction(有点特殊要求)

/**
* 需要提供一个公共的方法
* 方法名:execute
* 返回值:String
* 参数:无
*/

public String execute(){System.out.println("收到了请求");return null;}

6.配置核心过滤器(前端控制器)

在web.xml中配置 StrutsPrepareAndExecuteFilter
找包的快捷键ctrl+shift+T
下面是配置的代码

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

6.编写配置文件

要求:
名称:struts.xml
路径:src目录下
导入约束

<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">

测试
配置action的跳转页面
a.让action的方法返回一个字符串(逻辑视图)
b.在struts.xml的action标签下配置字符串对应的页面
这个配置会在下面有详细讲解

核心过滤器中的init方法的作用

加载配置文件
配置文件加载顺序
struts提供好的(我们不能修改)
default.properties
struts-default.xml
struts-plugin.xml

我们自己可以编写的
struts.xml(我们以后主要编写的)
struts.properties
web.xml中过滤器的配置
注意:
后面的同名配置会把之前的配置替代掉

配置文件的编写

常量的配置:

struts.xml(我们以后主要编写的)

例如:
常量:后缀名

struts.properties(几乎不用)
需要我们自己提供 src
struts.action.extension=xxx
web.xml中过滤器初始化的配置(注解的时候会用)
在filter标签下配置

<init-param>    <param-name>struts.action.extension</param-name>    <param-value>xyz</param-value></init-param>

常见的常量:

struts.devMode 开发者模式,默认值false 配置为true之后,不需要重启服务器就可以动态加载配置文件
struts.action.extension 后缀名 默认值:action,, 后缀可以不写也可以写action

<!-- 常量:后缀名 -->    <!-- <constant name="struts.action.extension" value="abc"></constant> -->    <!-- 常量:运行动态方法执行 -->    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="demo1" extends="struts-default" namespace="">        <!--             action:                name属性:和namespace属性组成访问路径.注意:name中不要出现 "/" (版本不一样,常量的配置)                class属性:action的全限定名                method属性:指明这次请求对于的方法是那个. 默认值:execute         -->        <action name="hello" class="com.itheima.a_hello.HelloAction">            <!--                 result:                    name属性:action中方法返回值(逻辑视图)                    标签体中写跳转的路径:                        跳转到jsp:写内部路径             -->            <result name="aa">/1.jsp</result>        </action>    </package>

struts.xml中action的配置

action的配置
package标签:包
name属性:起个包名,项目中唯一,继承的时候会用到
extends属性:声明当前包继承那个包 一般我们间接或者直接继承的都是 struts-default (struts提供拦截器,跳转方式等才好用)
namespace属性:和action标签下的name属性组成访问路径
写法3种:
不写 namespace=””
根路径 namespace=”/”
带路径 namespace=”/customer”
action:
name属性:和namespace属性组成访问路径.注意:name中不要出现 “/” (版本不一样,常量的配置)
class属性:action的全限定名
method属性:指明这次请求对于的方法是那个. 默认值:execute

result标签:(明天详讲)
name属性:逻辑视图名称(action中方法的返回值)
标签体:配置跳转路径
jsp:内部路径
下面是配置文件的代码

<struts>    <!--         package:包            name属性:起个包名,项目中唯一,继承的时候会用到            extends属性:声明当前包继承那个包 一般我们间接或者直接继承的都是 struts-default (struts提供拦截器,跳转方式等才好用)            namespace属性:和action标签下的name属性组成访问路径                写法3种:                    不写  namespace=""                    根路径 namespace="/"                    带路径 namespace="/customer"            了解:                abstract属性:抽象包 声明当前包是否是一个抽象包.一旦包为抽象包 action就不能被访问了.     -->    <package name="demo1" extends="struts-default" namespace="">    <!-- <package name="demo1" extends="struts-default" namespace="/customer"> -->        <!--             action:                name属性:和namespace属性组成访问路径.注意:name中不要出现 "/" (版本不一样,常量的配置)                class属性:action的全限定名                method属性:指明这次请求对于的方法是那个. 默认值:execute         -->        <action name="hello" class="com.itheima.a_hello.HelloAction">            <!--                 result:                    name属性:action中方法返回值(逻辑视图)                    标签体中写跳转的路径:                        跳转到jsp:写内部路径             -->            <result name="aa">/1.jsp</result>        </action>    </package></struts>

include的配置

包含其他的struts配置文件.
作用:分模块开发中使用
例如:

<include file="com/itheima/a_hello/struts_hello.xml"></include>

action类的编写方式

(了解)方式1:

普通的类 (POJO) 没有继承也没有实现
一般需要提供一个execute方法

(理解)方式2:实现Action接口

提供了5种逻辑视图(5个字符串)
success:成功之后
error:失败之后
login:跳转到登录
none:不跳转 null
input:我们不用,struts在内部发生错误的时候使用input视图

(★)方式3:继承ActionSupport类 (ActionSupport也实现Action接口)

action的访问方式

(了解)方式1:通过method配置

(★★)方式2:通配符配置

前提:要求访问路径和要执行的方法名有关系
例如:访问的路径为 /day/saveOrder.action 要执行orderAction中的save方法
配置文件中 {1} 指的是name中第一个*所代表的字符串

更加变态的写法:
访问的路径: /day/save_UserAction.action
配置文件中:

(★)方式3:动态方法执行

版本不一样有的默认不好使(配置常量)
允许动态方法执行 配置常量为true
struts.enable.DynamicMethodInvocation
路径:
/day/user!方法名.action

配置文件:

<action name="user" class=".."/>

查询所有客户
步骤:
1.新建数据库和表
2.创建web项目
导入jar包
hibernate
驱动
日志
struts
3.配置文件
hibernate.cfg.xml
web.xml
struts.xml
日志配置文件
4.编写持久化类和映射文件
5.编写customer相应的action service dao
6.导入页面
获取request对象
ServletActionContext.getRequest();