当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

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

发表于: 2009-12-16   作者:coral0212   来源:转载   浏览次数:
摘要: http://brightmyfuture.blog.sohu.com/116716733.html     经常被Jsp、Servlet中相对路径和绝对路径问题给搅匀,今天被这个问题结合Struts2的namespace彻底弄的找不到北了,研究了一天,终于大彻大悟,彻底搞懂了这个问题,赶快记下来。     页面脚本有两种状态,分
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页面中路径问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
经过悲剧的一周后,我更换了硬盘,原来的硬盘数据全部丢失了,惨痛的教训啊,以后一定要记得备份重
最近做项目时,引用了一个第三方的程序集,代码层面没有任何语法错误,编译提示:命名空间“System.
JSON主要创建如下两种数据对象: 由JSON格式字符串创建,转换成JavaScript的Object对象; 由JSON格
背景: 根据《Hive权威指南》上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义
1、写在开头的这些命名空间,代表就可以在mxml里面静态的使用这些空间下的标签,如果在as里动态的写
我之前有专门的文章讨论过在XML文件中的命名空间问题,事实上,这个命名空间的设计是XML规范中惹来
1.s:action标签概述 s:action标签功能为:在JSP页面中访问action类中的数据,执行某些操作,并返回相
最近遇到一个问题,弄的我很郁闷!就是只要jsp页面中使用到<s:action>标签,那么该页面上所引
前几天,在做毕业设计,突然遇到一个很郁闷的问题。 小弟做的是一个药品电子销售网站,用的struts2
最近,有需求需要传参数到jsp页面,但是不知道该如何传参数到jsp页面!!! 废话少说,贴代码。。。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号