1、问题的出现:
一个web项目,有webcontent目录存放jsp文件、css、js、image等文件,有servlet的目录存放servlet类文件、dao类文件、common类文件、action类文件等等。在我们开发的过程中,经常需要各种跳转,由于文件众多,初始时没有考滤的很周全,各种相对路径、绝对路径一起上,导致越写到后面,出现的问题也越多,页面跳不了、js/css/图片文件找不到等等,然后又要调试一番,效率低下浪费了许多时间。
2、对于以上问题我们如何解决呢?
首先,我们要统一路径的写法。虽然相对路径写起来代码少,比较快,但是有时候目录的深度太高,导致../../这样的相对路径的寻址也不是很好管理,所以统一用绝对路径为好。但是用统一的路径的话,就必须弄一个变量,存放项目的根目录,这样我们写各种链接或跳转地址时,就直接用起这个变量就ok啦,看起来简洁许多。
3、具体实现:
我们都知道,在web中,地址是这样的->协议://主机名或ip地址:端口号/文件路径,这个文件路径就是从我们项目的根目录开始的,所以的到这一个url的方法我们用以下代码实现:
public static String getPath(HttpServletRequest request){ String scheme=request.getScheme();//获取协议类型名称 String name=request.getServerName();//获取web服务器名字 int port=request.getServerPort();//获取使用的端口号 String path=request.getContextPath();//获取当前项目的跟路径 String url=scheme+"://"+name+":"+port+path;//得到到项目根目录的绝对路径 //System.out.println(url); return url; }
我们获取各种关于服务器的信息可以用request对象里面的方法:
1)request.getScheme()方法不用多说,获取协议的名称,如http、https、ftp等等
2)request.getServerName()方法获取服务器名称,若是本地服务器就是localhost,这个也不用多说。
3)request.getServerPort()方法获取协议使用的端口号,这里本项目用了8080端口号。
4)request.getContextPath()获取当前项目的根路径,这个就要多说一点了。
当我们用的是tomcat服务器时,项目一般部署在tomcat下的webapps目录下面,但是部署有两种。
一种是直接把项目文件复制到webapps的ROOT目录下(当然,用eclipse开发时应该不是这样子,而是第二种方法),这样访问的时候在浏览器中直接用服务器名就可以访问到web内容,这样子用request.getContextPath()获取得到的是一个空字符"",注意不是null。
一种是在webapps下面建立一个以项目名称的目录,并将项目拷到这个目录。这样子用request.getContextPath()方法获得的是一个"/项目名称"的字符串。
本java web项目是第二种方法。
最后我们用->(协议://主机名或ip地址:端口号/文件路径即项目根目录)的形式生成了一个访问到项目跟目录的绝对路径。这就是我们要的url。
4、使用方法
既然我们有了得到根目录的绝对地址的方法,开始时我们将其封装到GLOBALS类中,然后在jsp页面中导入这个类,直接调用它的方法返回一个url来使用,在各种地方用在"<%="和"%>"之间插入url变量来使用。
如:
<link rel="stylesheet" href="<%=URL%>/css/admin/AdminIndex.css">
这样子的形式,这样当产生静态的页面是,即html页面返回给浏览器时,<%=URL%>就变成了实际的地址,不再是变量。
5、还有问题。
我们在jsp的指令标签和动作标签里面不能再用<%=URL%>这样子的形式嵌入了。除了这个<%=%>方法,我们还有一种和这个是等效的方法就是el表达式,语法结构:${expression}
详解:http://www.cnblogs.com/cyjch/archive/2012/02/08/2342387.html
jsp的动作标签里面是可以用${expression},即el表达式的。这样也就解决了页面所有的地址问题。
<jsp:include page="${URL}/admin/view/AdminRight.jsp"/>
6、还可以优化一下
我们在每个页面都设置了调用了那个方法,来获取url,可是感觉是没必要每次都运行那个方法,重复运行。后面想了想,如何在所有页面上弄一个全局的变量,哪里都可以获取。那就是session,可以用session来存,这样在每个页面只要通过session获取就可以了,没必要每次都要运行那个方法。
所以我们在用户首次访问时,就直接设置了session:
String url=GLOBALS.getPath(request); session.setAttribute("url", url);
然后在需要这个url的地方获取:
<%String URL=session.getAttribute("url").toString(); %>
相关推荐
在Java Web开发中,理解和掌握相对路径与绝对路径的运用是至关重要的,因为这直接影响到资源定位、页面跳转以及文件读写等操作的正确性。以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与...
Java Web 开发中路径问题的定义是开发人员在构建动态Web应用程序时必须理解的关键概念。路径问题主要涉及JSP页面、Servlet以及web.xml配置文件,它们之间的路径引用方式有所不同,容易造成初学者的困扰。 首先,JSP...
Java Web Struts2框架是Java企业级开发中的一个重要组成部分,它提供了一种MVC(Model-View-Controller)设计模式的实现,使得开发者能够更高效地构建动态、可维护的Web应用程序。Struts2框架是对早期Struts1的升级...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第二部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...
Java Web开发工具类主要指的是在构建Web应用程序时使用的各种实用工具和框架,这些工具和框架极大地简化了开发过程,提高了代码的可维护性和可扩展性。Struts2是其中非常著名的MVC(Model-View-Controller)框架,它...
在Java Web开发中,Servlet和JSP是两个关键的技术组件,它们被广泛用于构建动态、交互式的Web应用程序。本项目以"Servlet+jsp Java Web开发"为主题,采用经典的开发环境:MySQL数据库、Tomcat 6应用服务器、Eclipse...
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...
### Web中的路径问题详解 在Web开发中,正确处理路径是...综上所述,在Java Web开发中,理解和掌握正确的路径获取方法是非常重要的。开发者需要根据实际需求选择合适的路径获取方式,并确保代码的健壮性和可移植性。
路径跳转问题是Web开发中的一个重要方面,涉及到上下文路径、基本路径和URL的构建等多个环节。通过对这些概念的理解和技术实现的掌握,可以有效地解决路径跳转问题,提高Web应用的质量和性能。希望本文能够帮助...
在Java Web应用开发中,Struts框架帮助开发者组织代码,实现业务逻辑与用户界面的分离,提高了开发效率和应用的可维护性。 **1. MVC设计模式** MVC设计模式是软件工程中的一种经典架构,它将应用分为三个主要部分...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第一部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...
对于那些对Web概念模糊的人来说,本参考资料旨在提供一个清晰的学习路径,并帮助初学者全面了解Java Web开发的关键组件。 #### 二、核心API介绍 1. **PageContext**:`javax.servlet.jsp.PageContext` 是一个接口...
绝对路径的获取对于页面中的资源定位、链接跳转等方面都有着不可替代的作用。本文将详细介绍如何在Web开发中获得绝对路径的方法,并通过实例来解释具体的实现过程。 ### 一、理解绝对路径与相对路径 在开始之前,...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发...
综上所述,解决Struts2中路径无法跳转的问题需要全面检查项目配置、Action实现、结果类型和路径设置,以及可能的异常处理和环境配置。通过逐步排查,通常能找出问题的根源并进行修复。如果你在上述步骤中遇到困难,...
JSP(Java Server Pages)作为Java Web开发中的重要组成部分,提供了多个内置对象来简化Web应用的开发过程。这些对象可以直接在JSP页面中使用,无需显式声明,极大地提高了开发效率。以下是JSP中的9个基本内置组件:...
通过上述介绍,我们可以了解到Struts框架为Java Web应用开发提供了一套成熟而高效的解决方案。无论是初学者还是有经验的开发者,都能从中受益匪浅。希望本文能够帮助大家更好地理解和掌握Struts框架的核心知识。
在《精通Struts:基于MVC的Java Web设计与开发》这本书中,作者孙卫琴深入浅出地介绍了Struts框架的基础知识及高级应用技巧。本书共分为两卷,上卷主要讲解了Struts框架的基本概念、工作原理及其核心组件等;而下卷...
本教程涵盖了从基础到进阶的Java Web开发知识,包括JavaScript、DOM操作、表单验证、自定义Web服务器、Servlet、JSP、内置对象、JSTL、EL、Java Bean、过滤器、监听器、自定义标签、AJAX、自定义MVC框架、Spring IOC...