`

java web开发中解决各种跳转和链接的路径的问题

 
阅读更多

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开发实战经典.pdf (高清版) Part1

    MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第一部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...

    李兴华Java Web开发实战经典(高清版) Part2

    MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第二部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    第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、服务器...

    java命名规范 开发规范

    d. 开发Service接口和Service接口实现,并在Action中通过set方法注入该Service; 接口文件:UserService 接口实现:UserServiceImpl 注入Service e. 开发DAO,DAO继承com.hikvision.xxx.HibernateBaseDAO; 示例 f...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    第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、服务器...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    第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、服务器...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    第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、服务器...

    轻量级java web MVC框架

    1、包括自动扫描绑定映射路径,只要在web.xml中指定扫描包,系统启动后会将请求url绑定到指定的处理方法上。如: 在web.xml中定义如下: &lt;param-name&gt;ScanPackage &lt;param-value&gt;com.mvc.controller&lt;/param-value&gt;...

    javaweb项目开发思路(通俗易懂)附源码

    1、如何开发项目 (a)了解用户需求(静态DEMO) (b)了解数据设计(表关系) 2、编码 (a)搭建开发框架 1、搭建Struts框架完成页面跳转 2、静态页面复制到工程中 WebRoot:(用户可以看) common:公共组件 css:css样式...

    java web 视频、电子书、源码(李兴华老师出版)

    MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、...

    网面图片抓取工具 java Web 应用

    javaWeb应用,需要布署在tomcat下 操作步骤: 1 解压GradImg.rar 2 把项目导入Eclipse 或 MyEclipse 进行编译 3 布署到tomcat下 4 启用应用输入...5 图片抓取后存放路径为:D:/img 需要先在D盘下创建img文件夹

    JAVA WEB框架,java网站一个模块只用写一个文件

    |___SzdwServlet.java 用户自己写的servlet,在public class 上面一行有如下说明:@WebServlet(name = "SzdwServlet", urlPatterns = {"/Szdw.jsp"})告诉tomcat这个servlet的名字和路径。 框架流程详解: 用户请求...

    Java web项目 常见问题汇总

    这是常见的页面不存在错误,建议仔细核查显示的网页是否存在(在运行的浏览器地址框中仔细查看当前路径,核实该路径是否正确,是否有路径错误,当前网页名字名字错误,使用了相对路径导致跳转出错等问题) ...

    java面试宝典

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    网页与Web程序设计 课件 ppt 机械工业出版社 part1

    本书还着重讲解了如何使用JavaScript进行客户端编程和如何开发Web数据库应用。  本书可作为高等院校“网页设计与开发”类课程教材,也可作为网站制作、Web程序设计培训教材,还可作为网页设计与Web编程爱好者的自学...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    IBM WebSphere Portal门户开发笔记01

    1、链接各种数据库驱动 225 2、FUTURE线程与超时控制 227 十六、WEBSPHERE PORTAL V6主题(THEME)和外表(SKIN)的开发(二) 229 十七、网页类 231 1、设置网站页面在客户端浏览器的解析模式 231 2、JS屏蔽网页错误不...

    DownloadFileByAjax_final

    Java Web在处理文件下载时,一般的解决方式是在java的控制层完成三个要素的处理,通过response返回到前端,在js中采用[removed](url)或者表单提交等方式完成下载。该种方式存在两个弊端,一是当后台无法获取文件或...

Global site tag (gtag.js) - Google Analytics