北京动力节点-Struts2讲义-第1章Struts2入门
struts2自学完全文档

一.Struts2基础知识1. struts2的特点及配置1.1struts2与struts1的比较1)在软件设计上struts2没有struts1那样跟ServletApi和StrutsApi有着紧密的耦合,Struts2的应用可以不因爱ServletApi和StrutsApi.struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计public class OrderListAction ectends Action//struts依赖于java2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能3)Struts2提供了类型转换器,我们可以把特殊的请求参数转换成我们需要的类型,在struts1中,如果我们实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器4)Struts2提供了支持多种表现层技术,如JSp,freeMarker等5)Struts2的输入校验可以对指定方法进行校验,解决了Struts的长久之疼6)提供了全局范围,包范围和Action范围的国际化资源文件管理实现1.2搭建struts2的开发环境1)新建web项目2)导入必要的包3)写配置文件Struts2默认的配置文件为Struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模板如下(在m yeclipse中放在src目录下就可以了)模板在D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开web-info/classes中的struts.x m l文件即可<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.3//EN""/dtds/struts-2.3.dtd"><struts></struts>4)在web.xm l中加入Struts2MVC框架启动配置在struts1.x中struts框架是通过Servlet启动的,在struts2中,struts框架式通过Filter 启动的,他在web.xm l中的配置如下:(D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开Web-Info\web.xm l即可)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Str utsPrepareAndExecuteFilter</filter-class><!—自从struts2.1.3以后,下面的FilterDispatcher已经标注为过时<filter-class>org.apache.struts2.dispatcher.ng.filter.FilterDispather</filter-class> --></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>在StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。
Struts 2 讲义(2)

Struts2(2) 工作原理一、Struts2框架结构Struts2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。
Struts2框架结构图如图4-1所示。
图4-1 Struts 2框架结构图一个请求在Struts2框架中的处理大概分为以下几个步骤。
①客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。
②请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。
注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。
③FilterDispatcher是控制器的核心,就是MVC的Struts2实现中控制层(Controller)的核心。
④F ilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
⑤ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。
例如,用户注册示例将找到UserReg类。
⑥ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。
但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
STRUTS2入门教程(全新完整版)

一、发展历史及简介发展历史Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages、Servlet、标签库以及面向对象的技术水准。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。
这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。
这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。
当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。
同样,软件工程师使用Struts为业务应用的每一层提供支持。
它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。
我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
早期Smalltalk程序语言便采用了MVC(Model-View-Controller)模式(Patterns)以增加程序代码弹性,MVC模式将程序代码整理切割为三部分,Model部分是业务与应用领域(Business domain)相关逻辑、管理状态之对象,Controller部分接收来自View所输入的资料并与Model部分互动,struts业务流程控制(Flow Control)之处,View部分则负责展现资料、接收使用者输入资料。
在Java应用中,JFC/Swing、AWT、JSP皆是可用作View的技术规格,而JavaBean与Enterprise JavaBean规格则可用于Model程序代码,一旦应用程序以MVC模式加以适当的分割,Model部分程序代码可在不同使用者接口外观的应用程序中重复使用。
随着JSP与Servlet技术大量应用于以Web为基础的应用程序,Java开发人员群体认为应以较佳的模式以提升Web应用程序的可维护性与重复使用性。
01 STRUTS2入门

© 2012 Inspur Group
Inspur Education
使用Struts2实现登录
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC
引入dtd文件
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd">
src
Docs backport
© 2012 Inspur Group
Inspur Education
搭建Struts2开发环境的步骤
搭建Struts2环境时,我们一般需要做以下几个步骤的 工作:
1》创建javaweb工程 2》找到开发Struts2应用需要使用到的jar文件. 3》创建jsp文件. 4》创建action文件 5》编写Struts2的配置文件 6》在web.xml中加入Struts2 MVC框架启动配置
© 2012 Inspur Group
Inspur Education
使用Struts2实现登录
3 开发Action
public class LoginAction { private String name; private String password; /**在此方法里实现业务逻辑处理*/ public String execute() throws Exception { if(.equals("sa") && this.password.equals(“123”)) return "success"; else return "error"; } setter/getter }
Struts2第一章理论

3分钟时间 分钟时间
24
Struts 2框架的项目应用 (二)
• 在web.xml文件中配置FilterDispatcher
<filter> <filter-name>struts2</filter<filter-name>struts2</filter-name> <filter<filterclass>org.apache.struts2.dispatcher.FilterDispatcher</filterclass>org.apache.struts2.dispatcher.FilterDispatcher</filterclass> </filter> <filter<filter-mapping> <filter-name>struts2</filter<filter-name>struts2</filter-name> <url-pattern>*.action</url<url-pattern>*.action</url-pattern> </filter</filter-mapping> 3分钟时间
•
Struts 2框架之运行流程
1.请求经过一个可选的 ActionContextCleanUp过滤器及其他的 一些过滤器到达核心控制器 FilterDispatcher; 2.FilterDispatcher询问ActionMapper来 决定决定这个请求是否需要调用某个Action; 3.如果要调用某个Action,则 FilterDispatcher把请求的处理交给 ActionProxy; 4.ActionProxy通过ConfigurationManager 查找框架的配置文件,找到需要调用的 Action类; 5.ActionProxy创建一个ActionInvocation 的实例,在调用Action前后,调用相关 拦截器; 6.根据struts.xml文件中逻辑视图和物理视 图的映射关系,找到相应的资源返回给用户;
01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。
轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。
Struts2实现了MVC,满足了MVC设计思想。
在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。
作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。
这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。
Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。
重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。
1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。
它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。
1、M-Model 模型模型(Model)的职责是负责业务逻辑。
包含两层:业务数据和业务处理逻辑。
比如实体类、DAO、Service都属于模型层。
2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。
属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。
比如:在Servlet项目中的单一控制器ActionServlet。
第一章 Struts2系统架构
第一章Struts2系统架构本章主要介绍的Struts2的系统架构,让学员对Struts2框架在结构上有一个整体概念为我们以后更加详细的学习Struts2打下一个良好的基础。
第一节Struts2的系统架构及处理的主要流程1.Struts1简介Struts1的历史比较久远,Struts1是世界上第一个发布的MVC框架,目前市场率最高的框架。
下面将简单讲解Struts1的基本架构。
图1-1显示了Struts1的数据流图。
图1-1 Struts1数据流图Struts1框架以ActionServlet为核心控制器,ActionServlet获得客户端请求。
然后ActionServlet根据请求信息调用匹配的业务逻辑控制器(Action)处理用户请求。
请求处理完成后,业务逻辑处理器调用相应的JSP显示处理结果。
Struts1框架实现了MVC模式,下面我们了解一下Struts1是怎样实现MVC模式的。
Struts1框架中并没有提供Model层的实现。
在实际的企业应用中,通过一个JavaBean 实现一个业务逻辑,在功能比较复杂的应用中也采用EJB或WebService服务实现业务逻辑。
Struts1框架的View层采用JSP实现。
Struts1提供了大量丰富的标签库。
这些标签库与Struts的组件兼容的特别好,可以很容易的输出控制器的处理结果。
Struts1框架中,控制器是它的核心,Struts1的控制器由两部分组成:核心控制器(ActionServlet)和业务逻辑控制器(Action),核心控制器由Struts1框架提供。
业务逻辑控制器需要由用户自己继承Struts1框架提供的Action类实现。
在Struts1框架中,JSP/Servlet耦合非常紧密。
这种紧密关系促使Struts1存在各种缺陷。
下面我们分析一下Struts1中存在的缺陷。
●支持的表现层技术单一●耦合性强,不便于单元测试●代码依赖于Struts1 API,侵入性强2.WebWork简介WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。
Struts 2权威指南——第1章 Struts 2概述1
本章要点—Web应用的发展—Model 1和Model 2—MVC思想—MVC模式的优势—常用MVC框架及其特征—Struts 1的基本结构及其存在的问题—WebWork的基本结构—Struts 2的起源—Struts 2的框架架构—Struts 2的标签库—Struts 2的控制器组件—Struts 1和Struts 2的对比Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达6年时间的锤炼,Struts 1框架更加成熟、稳定,性能也有了很好的保证。
因此,到目前为止,Struts 1依然是世界上使用最广泛的MVC框架。
目前,基于Web的MVC框架非常多,发展也很快,每隔一段时间就有一个新的MVC框架发布,例如像JSF、Tapestry和Spring MVC等。
除了这些有名的MVC框架外,还有一些边缘团队的MVC框架也很有借鉴意义。
对于企业实际使用MVC框架而言,框架的稳定性则应该是最值得考虑的问题。
一个刚刚起步的框架,可能本身就存在一些隐藏的问题,会将自身的BUG引入自己的应用。
这也是笔者不推荐开发者自己实现框架的原因。
虽然Struts 2号称是一个全新的框架,但这仅仅是相对Struts 1而言。
Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。
从某种程度上来讲,Strut2没有继承Struts 1的血统,而是继承了WebWork的血统。
或者说,WebWork衍生出了Struts 2,而不是Struts 1衍生了Struts 2。
因为Struts 2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证;而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。
第一章Struts2系统架构
第一章Struts2系统架构本章主要介绍的Struts2的系统架构,让学员对Struts2框架在结构上有一个整体概念为我们以后更加详细的学习Struts2打下一个良好的基础。
第一节Struts2的系统架构及处理的主要流程1.Struts1简介Struts1的历史比较久远,Struts1是世界上第一个发布的MVC框架,目前市场率最高的框架。
下面将简单讲解Struts1的基本架构。
图1-1显示了Struts1的数据流图。
图1-1 Struts1数据流图Struts1框架以ActionServlet为核心控制器,ActionServlet获得客户端请求。
然后ActionServlet根据请求信息调用匹配的业务逻辑控制器(Action)处理用户请求。
请求处理完成后,业务逻辑处理器调用相应的JSP显示处理结果。
Struts1框架实现了MVC模式,下面我们了解一下Struts1是怎样实现MVC模式的。
Struts1框架中并没有提供Model层的实现。
在实际的企业应用中,通过一个JavaBean 实现一个业务逻辑,在功能比较复杂的应用中也采用EJB或WebService服务实现业务逻辑。
Struts1框架的View层采用JSP实现。
Struts1提供了大量丰富的标签库。
这些标签库与Struts的组件兼容的特别好,可以很容易的输出控制器的处理结果。
Struts1框架中,控制器是它的核心,Struts1的控制器由两部分组成:核心控制器(ActionServlet)和业务逻辑控制器(Action),核心控制器由Struts1框架提供。
业务逻辑控制器需要由用户自己继承Struts1框架提供的Action类实现。
在Struts1框架中,JSP/Servlet耦合非常紧密。
这种紧密关系促使Struts1存在各种缺陷。
下面我们分析一下Struts1中存在的缺陷。
●支持的表现层技术单一●耦合性强,不便于单元测试●代码依赖于Struts1 API,侵入性强2.WebWork简介WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。
第1章Struts2框架技术入门
1.1.1 Struts2的由来与发展
Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于 MVC框架。,但Struts2和struts1在代码编写风格上几乎不一样的, struts2有以下优点:
Struts2的应用可以不依赖于Servlet API和struts API。 Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等
6
2. Struts2软件包中主要文件
7
(1)apps文件夹:该文件夹中存放基于 Struts2的实例应用,这些实例对学习者来说 是非常有用的资料。 (2)docs文件夹:该文件夹中存放Struts2的 相关文档,Struts2 API、Struts2快速入门等 文档内容。 (3)lib文件夹:该文件夹中存放Struts2框架 的核心类库以及Struts2的第三方插件类库。 (4)src文件夹:该文件夹中存放Struts2框架 的全部源代码。
27
不同的开发者有自己的方式来实现模型组件,
Struts2框架的目的是使用Action来调用模型 组件。例如一个银行存款的模型组件,代码 如【例1-1】所示。
28
29
【例1-1】中的代码是一个完成某一功能的业
务逻辑模块,在执行saving(String accounts,String money)方法时能够通过调用 其他类或者直接访问数据库完成存款功能。 使用业务控制器Action可以调用该业务逻辑 组件在Action的execute()中实现,代码如 【例1-2】所示。
25
26
1.2.2 Struts2的模型组件
模型组件可以是实现业务逻辑的模块,可以
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2讲义第1章Struts2入门1.1 Struts2简介1.1.1 框架1.1.2 Struts2简介1.1.3 Struts2下载与版本Struts2官网:版本号的意义:Alpha:内测版,一般不向外部发布,会有很多Bug。
Beta:除错 + 增新内测版,但相对于Alpha版已有了很大的改进,消除了严重错误,但还是存在缺陷,需经更多测试来消除。
这个阶段的版本会加入新的功能。
RC:除错Release Candidate,发行候选版,外测版。
与Beta版最大的区别在于Beta阶段会加入新功能,而RC版一般不会加入新功能,而主要着重于除错。
RC版本是最终发放给用户的最接近正式版的版本,发行后改正bug就是正式版了,是正式版之前的最后一个测试版。
GA:General Availability,普通有效版,稳定版,官方开始推荐广泛使用了。
Release:发行版,即最终版。
在一系列测试版之后的正式发行版本,是最终交付用户使用的一个版本。
该版本也称标准版。
Release会以单词形式出现在软件封面上,有时会使用符号R。
1.1.4 Strut2的优点(1)Struts2是非侵入式设计Struts2的Action类为POJO类,不依赖于Servlet API和Struts API。
(2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
(3)Struts2提供了类型转换器,可以将特殊的请求参数转换成需要的类型。
(4)Struts2的输入验证可以对指定方法进行验证。
(5)提供了全局范围、包范围和Action范围的国际化资源文件管理实现。
1.2 Struts2开发环境的搭建1.2.1 Struts2的Jar包Struts2最基本的Jar包,可以从Struts2框架解压目录下的apps中的struts2-blank.war 中获取。
将struts2-blank.war扩展名修改为zip后,解压。
在其WEB-INF\lib中所有Jar即为Struts2运行的基本Jar包。
从使用的两个日志Jar包可以看出,Struts2使用的是Log4j2日志技术。
1.2.2 Struts2的配置文件Struts2的默认配置文件为struts.xml,该文件需存放在WEB-INF/classes下。
即,在myEclipse中应放在src目录下。
Struts2配置文件的头部可以从struts2-core-2.3.24.jar下的struts-2.3.dtd中找到。
1.2.3 配置Struts2的启动项在Struts2中,Struts框架是通过Filter启动的。
Filter在web.xml中的配置如下:若忘记了配置细节,可从struts2-blank.war解压目录中WEB-INF下的web.xml中复制。
1.2.4 搭建成功的测试将该项目部署到服务器后,启动服务器,在控制台没有报错,则说明Struts2应用平台搭建成功。
1.2.5 第一个Struts2的应用程序完成功能:用户登录后在页面显示“Struts2欢迎你【xxx】!”,将用户名显示出来。
实现步骤:在搭建好Struts2环境后,完成下面步骤:Step1:新建页面index.jspStep2:创建Action类Step3:修改struts.xml配置文件Step4:创建success.jsp页面1.3 Struts2工作流程1.3.1 开发流程(1)编写页面(2)定义Action类(3)注册Action(4)编写结果页面1.3.2 执行流程1.4 Web项目的部署(回顾)1.4.1 端口号的问题Tomcat默认访问的端口号为8080,而真正上线后,是无需输入端口号的。
因为浏览器默认访问的服务端端口号是80。
所以,将Tomcat默认的端口号修改为80即可使用户在访问时,不用再提交端口号了。
在Tomcat主目录下的conf/server.xml文件中修改。
1.4.2 项目名称的问题在程序的开发阶段,对代码进行调试时,一般是通过如下方式将项目部署到T omcat主目录下的webapps目录下。
访问时在浏览器地址栏输入如下形式URL即可访问。
即端号号后需要指定要访问哪个项目下的资源,即项目名称。
但真正在项目上线后,是不用让用户输入项目名称的。
此时,需要将项目按照如下方式部署到Tomcat的webapps下的ROOT目录中。
选择“删除之前部署的资源”选项即可。
再访问时,无需再输入项目名称了。
在这个程序中,struts.xml的<package/>标签的namespace属性值是”/test”,加着斜杠:而index.jsp页面的<form/>表单的action属性值却没有加斜杠:可一旦在表单的action属性值前加上斜杠就会报404错误,找不到相应资源:那这是为什么呢?这里面就涉及到相对路径的问题了。
1.5.1访问路径与资源名称通常的URL资源访问路径由两部分构成:访问路径与资源名称。
资源名称指的是要访问资源的直接名称,如show.jsp,或与要访问资源的资源存在映射关系间接名称,如show.do。
而访问路径,则是通过该路径则可以找到指定的资源,即在URL资源访问路径中除了资源名称以外的部分。
在URL访问路径中,最后一部分为资源名称,而其它部分则为访问路径。
根据“访问路径是否可以独立完成资源准确定位”的判别标准,可以将访问路径分为绝对路径与相对路径。
1.5.2绝对路径绝对路径,是指根据给出的访问路径可以准确定位到资源的路径。
例如,你要告诉对方你现在的位置,你说:我现在在北京故宫游客A入口处。
这就是个绝对地址,听者根据你所述地址,可以准确的找到你。
而对于计算机中Web应用的绝对路径,则是指带访问协议的路径。
例如下面的路径就是一个带有http访问协议的绝对路径。
http://127.0.0.1:8080/primary/index.jsp1.5.3相对路径相对路径,是指仅根据访问路径无法准确定位资源的路径。
相对路径必须要结合其参照路径才可组成可以准确定位资源的绝对路径。
参照路径的不同,所形成的可以准确定位资源的绝对路径也是不同的。
在进行资源访问时,必须要将相对路径转换为绝对路径才可完成资源的准确定位。
例如,你要告诉对方你现在的位置,你说:我在人民公园的正门门口。
这就是个相对地址。
因为很多城市都有人民公园,每个人民公园也都有正门。
当对方不知道你在哪个城市时,他是无法准确定位你的。
当然,你只所以不说是哪个城市,是因为这里存在一个默认的参照路径:与听者在同一个城市。
听者会将你所说的相对地址,自动转换为一个绝对地址:与听者在同一城市的人民公园正门门口。
在Web应用中,相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是不以斜杠开头的相对路径。
根据相对路径是否以斜杠开头,且出现的文件位置不同,其默认的参照路径又是不同的。
这也是相对路径容易出错的地方:确定参照路径。
(1)以斜杠开头的相对路径以斜杠开头的相对路径,根据路径所在文件的不同,又分为两种:前台路径与后台路径。
A、前台路径所谓前台路径是指,由浏览器解析执行的代码中所包含的路径。
例如,html、css、js 中的路径,及jsp中静态部分的路径。
像html及jsp中的静态部分中的<img src=””/>、<a href=””></a>、<form action=””></form>等;像css中的background:img(“”)等;像js中的window.location.href=””等,都属于前台路径。
前台路径的参照路径是Web服务器的根路径,即http://127.0.0.1:8080/B、后台路径所谓后台路径是指,由服务器解析执行的代码及文件中所包含的路径。
例如,java代码中的路径、jsp文件动态部分中的路径、xml文件中的路径(xml文件是要被java代码加载入内存,并由java代码解析的)等。
后台路径的参照路径是Web应用的根路径。
如本例为http://127.0.0.1:8080/primary/ C、后台路径特例对于后台路径的参照路径有一个特例:当代码中使用response的sendRedirect()方法进行重定向时,其参照路径不是web应用的根路径,而是web服务器的根路径。
例如,执行response.sendRedirect(“/show.jsp”);将会报404错误。
因为其参照路径是Tomcat的根,而非当前项目的根。
所以若要使用重定向,要么写为无斜杠的相对路径:response.sendRedirect(“show.jsp”);要么写在路径上添加上项目名称:response.sendRedirect(request.getContextPath + “/show.jsp”);(2)不以斜杠开头的相对路径不以斜杠开头的相对路径,无论是前台路径,还是后台路径,其参照路径都是当前资源的访问路径,而不是当前资源的保存路径。
1.5.3 相关现象解析(1)为什么form表单的action属性值加上斜杠会报错A、原因分析为什么struts.xml的<package/>标签的namespace属性值前加了斜杠,而form表单的action属性值前加上斜杠却会报错?struts.xml的<package/>标签的namespace属性中的路径属于后台路径,加上斜杠,表示其是相对于当前项目的根的路径,即表示的路径为http://127.0.0.1:8080/primary/下的test/login。
form表单的action属性值中的路径属于前台路径,加上斜杠,表示其是相对于Web服务器的路径,即表示的路径为http://127.0.0.1:8080/下的test/login.action。
服务端表示若要访问命名空间test下的login这个Action,则需要提交如下请求:http://127.0.0.1:8080/primary/test/login.action而客户端提交的请求却是http://127.0.0.1:8080/test/login.action。
该请求当然无法访问到想要的Action资源。
那为什么form表单的action属性值去掉斜杠后就没错了呢?去掉斜杠的相对路径,其参照路径变为了当前的访问路径。
而只所以可以看到当前的index.jsp这个页面,那是因为当前的访问路径是http://127.0.0.1:8080/primary/。
而去掉斜杠后的路径,就是相对于这个路径的访问路径。
此时form表单提交请求的路径test/login.action就会变为了如下路径:http://127.0.0.1:8080/primary/test/login.action而这个路径当然可以访问到指定的Action资源了。