Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言
我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的。Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Struts这个名气推出了Struts2框架。
因此,学习Struts2的时候,不了解Struts1是没有任何关系的。
在开山篇的时候,已经说明了为什么要引入Struts框架,其实就是为了提高开发效率…
Struts2框架预先实现了一些功能:
- 请求数据自动封装
- 文件上传的功能
- 对国际化功能的简化
- 数据效验功能…….等等
Struts2开发步骤
我们就直接来讲解Struts2的开发步骤是什么吧….在了解它的细节之前,先要把配置环境搭好!
引入jar文件
完整的struts中的jar包有80多个,我们日常开发是不需要那么多个的。一般我们导入的jar包有8个:
- commons-fileupload-1.2.2.jar 【文件上传相关包】
- commons-io-2.0.1.jar【文件上传相关包】
- struts2-core-2.3.4.1.jar 【struts2核心功能包】
- xwork-core-2.3.4.1.jar 【Xwork核心包】
- ognl-3.0.5.jar 【Ognl表达式功能支持表】
- commons-lang3-3.1.jar 【struts对java.lang包的扩展】
- freemarker-2.3.19.jar 【struts的标签模板库jar文件】
- javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】
配置web.xml
在web.xml中配置的过滤器,其实就是在为struts进行初始化工作
值得注意的是:如果该web.xml配置了多个fileter,那么struts的filter需要在最后面!
<!-- 引入struts核心过滤器 -->
<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>
开发Action
开山篇我们已经说了,Servlet的业务代码,我们都使用Action来代替…Action类一般继承着ActionSupport
Action类也叫动作类,处理请求的类。
public class HelloAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("helloworld");
return "success";
}
}
至于execute()方法是什么,我们先不要去管它,为啥要返回一个String,我们也不要去管它….只要记住开发步骤,并且,我们的Action类是要继承ActionSupport类的
配置struts.xml
至于配置struts.xml,我们可以在文件中找到相对应的模版代码的…最终修改成下面这个样子就行了:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="hello" extends="struts-default">
<action name="hello" class="action.HelloAction" method="execute">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
看完上面的配置文件,是非常像我们开山篇写的struts框架的配置文件的….
效果:
在地址栏中直接输入hello,就跳转到index.jsp页面了。并且,execute()中的语句被执行了…
Struts2执行流程
我们来简单地了解一下Struts的执行流程,然后再慢慢对上面的开发步骤的部分进行讲解….
服务器启动
下边我说的都是struts流程的重点:
- 加载web.xml文件
- 找到我们配置的filter中的StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter在里边执行init()方法
- 一直到
Dispatcher dispatcher = init.initDispatcher(config);,初始化dispatcher - 在初始化dispatcher的时候加载struts-default.xml和我们配置的struts.xml
下面用GIF图来看看它的执行过程:
细心的朋友可能会发现,我们在struts.xml的package节点下,extends了struts-default….那struts-default究竟是什么东西呢?
我们找到它的源码:
我们发现了一大堆的Bean,interceptor,result-type,interceptor-stack…下边我来讲解一下它们是干嘛用的…
- bean指定了struts在运行的时候需要创建的对象类型
- 在运行struts的时候,可能需要创建一些对象,那么就通过Bean来指定
- interceptor是struts定义的拦截器,一共有32个
- 前边已经说了,Struts为我们实现了一些功能,就是通过拦截器来实现的。
- result-type是跳转结果的类型
- Action业务方法中的返回值,我们发现几个实用的:redirect【重定向】、dispatcher【转发】、redirectAction【重定向到Action资源】、stream【文件下载的时候用】…跳转结果的类型也在这里定义了
- interceptor-stack是拦截器的栈
- 拦截器有32个,我们可能会使用很多的拦截器,不可能一个一个来调用,于是提供了拦截器栈…其实可以简单看成文件夹和文件之间的关系
- default-interceptor-ref是默认执行的拦截器栈
- default-class-ref class是默认的执行Action类
还要补充的就是:默认的拦截器栈有18个拦截器….
拦截器和过滤器
拦截器和过滤器都是拦截资源的
拦截器只拦截Action请求,是struts的概念…
过滤器拦截web的所有资源,是Servlet的概念…
小总结
服务器启动的时候,其实就是加载了web.xml文件,然后调用init()方法去加载struts.xml和struts-default.xml之类的文件…..
注意:此时的拦截器是还没有被调用的。
访问阶段
在服务器启动的阶段,仅仅是加载了各种的xml文件…那么当我们访问Action的时候,它的执行流程是怎么的呢?
- 首先,它会创建我们在struts.xml中配置的Action对象
- 接着,它会按照默认的顺序执行18个拦截器【也就是调用默认拦截器栈】
- 最后,它会执行Action的业务方法【也就是execute(),我们在struts.xml文件中配置了什么,就执行什么业务方法】
值得注意的是:每访问Action一次,它就会创建一个对象…它并不是和Servlet一样只有一个对象…因此它是线程安全的.
深入讲解struts.xml
这是我们的struts.xml的内容,相信现在对它也不会太陌生了…
<struts>
<package name="hello" extends="struts-default">
<action name="hello" class="action.HelloAction" method="execute">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
package
package其实就是包,那包用来干什么?包就是用来管理Action
通常来说,我们都是一个业务模版对应一个package
name
name是包的名字,值得注意的是,包的名称是不能重复的。
extends
extends代表的是当前包继承着哪个包。在struts中,包一定要继承着struts-default
abstract
在package中还有abstract这个属性,使用该属性时:表明当前包被其他的包继承…并且,在package下不能有action,否则会出错!
namespace
在package中还有namespace这个属性—名称空间….它是作为路径的一部分的,默认是”/”
actoin
action:配置请求路径与Action类的映射关系
name
name是请求路径的名字
class
class是处理action类的全名
method
method是调用的方法名称
result
result代表的是Action中业务方法返回的值
name
name是action处理返回的值
type
type是跳转的类型
文本值
文本值是跳转的路径
细节
前边已经说了,一个package应该对应一个业务模块..目的就是把职能细分出来…
struts为了让我们更好地管理xml文件,它还可以这样做:在不同的模块中用不同的xml文件进行描述…
最后在struts.xml文件中将其引入即可..
<!--struts在运行的时候总会加载这个文件-->
<!--总配置文件总引入其他的文件-->
<struts>
<include file="privilegeaction/privilege.xml"/>
<include file="useraction/hello.xml"/>
</struts>
Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】的更多相关文章
- struts2+hibernate整合开发步骤
百度的各种代码,步骤,自己整合了一下 1,创建数据库 常用mysql creat table..... 2,在WebContent下的bin中添加相应的包 http://pan.baidu.com ...
- SSH框架之Struts2第二篇
1.2 知识点 1.2.1 Struts2的Servlet的API的访问 1.2.1.1 方式一 : 通过ActionContext实现 页面: <h1>Servlet的API的访问方式一 ...
- Auty自动化测试框架第二篇——读取与执行脚本列表
[本文出自天外归云的博客园] 在Auty中的文件结构,lib目录下的read_selection.py和execute_selection.py文件:
- Struts2应用的开发步骤
1.在web.xml文件中定义核心Filter来拦截用户请求 由于web应用是机遇请求/响应框架的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filt ...
- 第二篇:git创建流程
1.创建组织 2.创建 3.点击项目 创建完: 4.选择管理——>选择公钥——>添加个人公钥: 5.怎样生成公钥 5.1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh ...
- 关于struts2.0 中 struts.xml设置了struts.devMode 的值为TRUE后仍然不起作用的分析
首先确认jdk 和tomcat的环境变量是否配置正确. 下面是配置方式 jdk的环境变量配置步骤: 安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量- ...
- Struts2与Hibernate联合开发步骤
hibernate与struts2的联合开发步骤: 1. 建立web工程 2. 加入jar包,struts2.hibernate.数据库连接的包 3. 数据表和bean之间的映射,以及相应的映射文件* ...
- Struts2第二天
Struts2第二天 昨天: 1.Action的编写方式:实现Action接口.继承ActionSupport.自定义pojo作为action 2.action调用方法:默认的execute.meth ...
- struts2.1.6教程二、struts.xml配置及例程
1.配置文件的优先级 在struts2中一些配置(比如常量)可以同时在struts-default.xml(只读性),strtus-plguin.xml(只读性),struts.xml,struts. ...
随机推荐
- 禁止将http请求强制转换为https请求
近期遇到一个问题,在谷歌浏览器里发起的http请求都会被转化为https请求,但在safari里面不会被转化,所以暂时只能用Safari浏览器进行调试,后来还查看了为什么http被强制转化为https ...
- JavaScript之去除前后空格//g
使用正则表达式"//g"去除字符串中的前后空格."//"表示所要匹配的字符串,如前后空格为/^\s*|\s*$/,这里"^"表示以" ...
- BTrace : Java 线上问题排查神器
BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命 ...
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- visual studio code 调试nodejs 配置简单HTTP服务器
介绍 Visual Studio Code是一个轻量级的Web集成开发环境on Linux,Mac and Windows,特别是作为前端人员来了, 多了一个可供选择的生产力工具IDE,调试js代码简 ...
- Linux安装MariaDB(Mysql)和简单配置
1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...
- salesforce零基础学习(七十九)简单排序浅谈 篇一
我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...
- MySQL(六)之MySQL常用操作符
前言 在前面的MySQL学习中,我们学习了MySQL的安装,管理以及配置,还有是它的DDL.今天给大家分享一下,MySQL的操作符和它的函数这部分. 千里之行始于足下,做什么事情都要脚踏实地的去做才能 ...
- Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)
天气一天比一天变的凉快了,而我一天天踩的坑更加贱了,首先在北京向各位问好,也给身边献身教育事业的亲朋好友们补上一句节日快乐! 今天早上手贱把项目误删了,不得不去SVN上去乞求了.我个人习惯项目运行的时 ...
- px,em,rem,vw单位在网页和移动端的应用
px: 是网页设计中最常用的单位,然而1px到底是多大长,恐怕没有人能回答上来 它用来表示屏幕设备物理上能显示的最小的一个点,这个点不是固定宽度的,不同设备上点的长度.比例有可能会不同. 假设:你现在 ...