`
japankn
  • 浏览: 213372 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

关于struts2的命名空间和jsp页面中路径问题

阅读更多

http://brightmyfuture.blog.sohu.com/116716733.html

    经常被Jsp、Servlet中相对路径和绝对路径问题给搅匀,今天被这个问题结合Struts2的namespace彻底弄的找不到北了,研究了一天,终于大彻大悟,彻底搞懂了这个问题,赶快记下来。
    页面脚本有两种状态,分别是在IDE中的Develop状态以及部署在Web Server以后的运行状态。这两种状态的相对路径是完全不一样的,如果在这混淆了那代码在部署运行后崩溃的几率达到十有八九了。在IDE中的Develop状态相对的是真实的本页面的相对路径,而在Web Server中处于运行状态的相对路径就不在是前面所述了,而是相对于URL的路径。
  比如配置了如下片段:
<struts>
     <package name="oss" extends="struts-default">   
        <action name="login" class="trh.oss.action.login.LoginRegisterAction">
            <result name="success">/login.jsp</result>
        </action>     
        <action name="*">
            <result>/pages/{1}.jsp</result>
       </action>   
    </package>   
</struts>
    假设有一个访问请求http://localhost:8080/oss/register.action,Struts2的FilterDispatcher将返还register.jsp页面,在物理文件路径上目录结构如下:
/pages
------register.jsp
------registeritem.jsp
------/images
-------------Main_Top.htm
-------------Main_Left_register.htm
-------------Main_Bottom.htm
    register.jsp处于IDE中(如果不用IDE,在本地文件系统中也是一样的)代码如下:
<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>用户注册</title>
        <meta http-equiv=Content-Type content="text/html; charset=gb2312">
        <meta content="MSHTML 6.00.2900.2668" name="generator">
    </head>
    <frameset border="0" frameSpacing="0" rows="118,*,22" frameBorder="no" cols="*">
        <frame name="topFrm" src="images/Main_Top.htm" noResize scrolling="no">
        <frameset border="0" frameSpacing="0" rows="*" frameBorder="no" cols="180,*">
            <frame name="leftFrm" src="images/Main_Left_register.htm" frameBorder="0" noResize>
            <frame name="rightFrm" src="registeritem.jsp" frameBorder="0">
        </frameset>
        <frame name="bottomFrm" src="images/Main_Bottom.htm" noResize scrolling="no">
    </frameset>
    <noframes></noframes>
</html>
    OK!没有任何的问题,可以正常显示。然后令人郁闷的是将其部署在Server上崩溃了,我上午调了一上午,用尽各种办法,什么根路径,什么basePath之类的全用了,就是崩溃,就是不行。
    原因在哪?相对路径是相对URL的路径,不是相对本地文件系统的路径。在本地开发的时候相对的是本地文件系统的路径,而在服务器上运行的时候是相对于URL的访问路径。故怎么办呢?已经说的很简单了,Struts2的核心有两个组件分别是Action组件和拦截器组件,Struts2是用Package对其进行管理的,定义包的时候有一个属性叫做namespace,将其制定为pages就一切OK了。
    这样一个完整的请求响应过程为如下:
    1.客户端发出http://localhost:8080/oss/pages/register.action
    2.服务器断Struts2的核心控制器FilterDispatcher截获此请求,用

<action name="*">这个Action的定 义来匹配此请求,并返还/pages/register.jsp物理视图资源,此页面中用到了四个相对路径,全都是相对http://localhost:8080/oss/pages的相对路径。
    3.回传给客户端生成的静态页面。
    一切OK了!路径啊路径,很神奇。

分享到:
评论

相关推荐

    Struts2之命名空间详解及JSP文件上传了解案例struts009

    在Struts2中,命名空间(Namespace)是一个重要的概念,用于组织和分隔应用程序的不同部分,使得配置更加清晰和模块化。文件上传功能则是Struts2提供的一种方便用户上传文件的机制,对于处理如图片、文档等上传需求...

    struts2中命名空间的使用

    ### Struts2中命名空间的使用 #### 一、引言 在开发Web应用程序时,随着项目的扩大,可能会...通过上述介绍和示例,我们可以看到Struts2中命名空间的配置和使用并不复杂,但合理的设计对于大型项目的成功至关重要。

    struts2命名规范

    2. **空间名(Namespace)**:在Struts2中,命名空间用于区分不同的URL路径,每个Action都可以关联一个或多个命名空间。空间名通常与包名保持一致,但并不强制。例如,如果Action类位于`com.example.myapp.actions`...

    struts2 路径问题

    6. **Action上下文路径**:在Struts2中,ActionContext包含了当前请求的路径信息。开发者可能需要在Action中获取请求URL、应用根路径等,以构建动态的路径。不正确的路径构造可能导致资源找不到。 7. **URL重写**:...

    struts2 跳转至404 页面的解决方案

    总之,解决Struts2跳转至404页面的问题需要对整个应用的配置进行仔细检查,从Action、命名空间、拦截器到结果类型、资源路径,甚至包括服务器和IDE的设置。理解Struts2的工作原理,结合日志信息,通常可以找出导致...

    Struts2教学视频

    Namespace是Struts2中用于组织Action的一种方式,可以看作是Action的命名空间。它有助于避免Action名称冲突,同时提供了更灵活的URL映射策略。 **四、标签** 标签在struts.xml中定义一个配置包,可以包含多个Action...

    struts2简单案例

    - **Action类**:在Struts2中,Action类是处理用户请求的中心组件,它封装了业务逻辑,并通过调用Service层来处理实际的业务操作。 - **配置文件**:`struts.xml`是Struts2的主要配置文件,用于定义Action、结果...

    struts2_namespace代码

    Namespace在Struts2中的作用至关重要,它是Action配置的一个关键部分,用于组织和隔离Action,使得一个大型项目中的多个Action能够有序地管理。 Namespace主要功能: 1. **URL映射**:Namespace可以看作是Action的...

    Struts2经典笔记

    关于Action路径(Action_Path),笔记指出Struts2的路径问题与JSP路径不同。在JSP中,路径问题可能导致资源定位错误,因此建议使用绝对路径,尤其是在涉及到动态生成的链接时。`&lt;base&gt;`标签在此场景下特别有用,它...

    Struts2约定优于配置

    Convention 插件可以通过设置 struts-plugin.xml 文件中的 &lt;constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/&gt; 来配置 Action 类存在的路径搜索包。这个配置将所有包含...

    Struts2的bug----------关于Struts2中找不到Action的

    然而,正如标题所示,“Struts2的bug——关于Struts2中找不到Action的”,这个问题可能困扰了许多开发者。在Struts2框架中,Action是核心组件,用于处理用户请求并执行业务逻辑。当系统报告找不到Action时,这通常...

    struts2+spring2+ibates

    3、struts.xml中命名空间和拦截器的使用。 4、sqlmapconfig.xml中传入参数和result的设置,只需要将得到的值result映射到有此属性的类对象. 5、JSP/Servlet中获得当前应用的相对路径和绝对路径 JSP中获得当前应用的...

    Struts2中Struts.xml配置文件详解

    例如,在上面的代码中,我们定义了一个名为 "com.kay.struts2" 的 Package,该 Package 扩展自 "struts-default" Package,并定义了一个名为 "/test" 的命名空间。 Interceptor 元素 Interceptor 元素是 Struts....

    struts2学习笔记(完美总结)——转自OPEN经验库

    OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...

    struts2 xml

    在Struts2中,XML配置文件(通常命名为struts.xml)是整个框架的基石,它负责设置Action、拦截器、结果页面以及其他关键组件。 **1. 包配置(Package Configuration)** 包在Struts2中扮演着组织和管理的角色,它...

    struts2注解登陆

    首先,让我们深入了解一下Struts2中的注解。Struts2框架支持JSR-250和JSR-303等标准注解,同时也提供了一些自定义注解来增强功能。例如,`@Action`注解用于标记一个方法为Struts2的动作,这个方法将在用户请求时被...

    Struts2注解开发jar

    描述中提到的`struts2-convention-plugin-2.3.15.jar`是这个插件的一个特定版本,它包含了处理Struts2中注解所需的所有类和资源。 在Struts2中,注解开发的关键在于`@Action`、`@Result`、`@Results`、`@Namespace`...

    MyEclipse开发Struts2

    在Struts2中,JSP页面主要作为视图层,使用Struts2的标签库来处理用户交互。在JSP页面的顶部,你需要引入Struts2的标签库: ```jsp &lt;%@ taglib prefix="s" uri="/struts-tags"%&gt; ``` 这使得你可以在页面中使用如`s:...

    Struts2小程序源代码

    2. **Namespace**: Namespace是Struts2中的命名空间概念,它用于组织和分隔Action,避免URL冲突。`Struts2_0200_Namespace`可能展示了如何在struts.xml配置文件中定义和使用命名空间,以及如何根据命名空间来映射...

Global site tag (gtag.js) - Google Analytics