web开发过程中关于路径问题的总结
约束:
- 相对路径概念-
./
代表当前目录、../
代表上级目录- 示例的所有文件都基于
http://127.0.0.1:8080/test
路径开放,test为对应的contextPath
前端
HTML
标签的img
、link
、script
、form
标签- css文件的
background
属性- js文件的ajax请求,这里特指
Jquery
插件
HTML标签
img标签的src属性
绝对路径-语法为/
开头,其绝对路径是基于[scheme]://[serverName]:[port]
此路径
相对路径-语法为./
或者../
开头,相对的是当前html文件的路径示例:
<img src="/test/info/img/1234.png",即正确的引用需要带上contextPath
link标签的href属性
相对路径是相对于当前html文件的路径,绝对路径是相对于[scheme]://[serverName]:[port]
此路径,示例如下
<link ref="/test/css/default.css">,即也必须带上`contextPath`
- script标签的src属性
此处路径约束类同link标签,示例如下
<script type="text/script" src="/test/js/default/js"> //即也必须带上contextPath
- form标签的action属性
此处路径约束类同link标签,示例如下
<form action="${basePath}/info/get"></form> //必须携带contextPath
CSS
- background/background-img属性
此处路径类同HTML标签的img/link/script标签,示例如下
background:url(/test/info/img/1234.png) no-repeat center;//即必须带上contextPath
Jquery
ajax请求的url路径
- 绝对路径的写法与上述的标签写法类同,即必须带上
contextPath
,示例如下
$.ajax({
url:"/test/info/msg/get",
type:"get",
data:{},
callback:function(data){
}
});
- 相对路径是相相对于当前html引入文件的路径,示例如下
test.html文件引入下述js文件,其中test.html对应的绝对路径为http://127.0.0.1:8080/test/info/msg/test.html
<script src="/test/static/info/msg/manager.js"></script>
$.ajax({
url:"list" //请求的路径为`http://127.0.0.1:8080/test/info/msg/list`
//url:"./list" //同上
//url:"../../info/content/get" //请求为`http://127.0.0.1:8080/test/info/content/get`
});
- 绝对路径的写法与上述的标签写法类同,即必须带上
前台使用小结
HTML
标签的img
、link
、script
、form
标签以及css文件中的background
属性均遵循以下规则:
/
开头,此路径均是相对于[scheme]://[serverName]:[port]
此路径,在本文中便是http://127.0.0.1:8080
,所以如果在Tomcat/Jetty这样的web容器中,倘若contextPath
不为空,则务必带上contextPath
属性所有的资源加载路径建议均转换为绝对路径加载,以免不必要的404错误
Jquery
的ajax api
中的url路径
绝对路径的概念与第一点一致并建议使用绝对路径来进行访问,其中的
contextPath
可以通过前端模板视图工具,比如freemarker:<#assign basePath='${Application["basePath"]}'/>
来建立全局变量相对路径的编写则需要注意
I. html文件或者JSP页面在Tomcat/Jetty等web容器中的绝对访问路径是什么,比如spring mvc会对html页面的映射有一定的配置,所以所有的访问路径均需要转化为访问controller层的路径,即关注@Controller
中的@RequestMapping()
注解
II. 在明白上述第一点的情况下,在上述绝对路径的基础上使用相对路径的规则即可
后端
这里只罗列下servlet关于路径的api以及spring mvc的路径使用
Servlet获取路径
示例路径为http://127.0.0.1:8080/test/info/msg/manager.html
request.getContextPath()
返回上下文路径,此处为/test
request.getServletPath()
返回servlet对应的路径,此处为/info/msg/manager.html
,即不包含contextPath
request.getRequestURI()
返回请求的完整路径,此处为/test/info/msg/manager.html
,即包含contextPath
spring mvc的路径配置
<!-- 静态资源映射 -->
<mvc:resources mapping="/static/**" location="/static/"/>
<!-- 视图配置 即对html页面的映射-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="pages/" />
<property name="suffix" value=".html" />
<property name="contentType" value="text/html;charset=UTF-8" />
<!-- 设置requestContext变量的名称 -->
<property name="requestContextAttribute" value="request" />
<!-- 配置是否在生成模板内容之前把HTTPsession中的数据放入model中 -->
<property name="exposeSessionAttributes" value="true" />
<!-- 配置是否在生成模板内容之前把HTTPrequest中的数据放入model中 -->
<property name="exposeRequestAttributes" value="true" />
<!-- 使用spring lib时 是否暴露 RequestContext 变量 默认为true -->
<property name="exposeSpringMacroHelpers" value="true" />
</bean>
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer>
<property name="templateLoaderPath" value="/WEB-INF/views/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">utf-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
简单看下其相关的Controller层对页面的路径映射,前台的ajax请求的相对路径便可针对此处的@RequestMapping()
注解来完成相应的编写
@Controller
public class HtmlPageControl {
@RequestMapping(value="/**/*.html")
public void redirect(HttpServletRequest request){
String contextPath = request.getContextPath() ;
//设置basePath让前台获取
if(request.getSession().getServletContext().getAttribute("basePath")==null){}
request.getSession().getServletContext().setAttribute("basePath",contextPath) ;
}
//返回为**/*的模式
String requestURI = request.getRequestURI() ;
int start = contextPath.length() + 1;
int end = requestURI.lastIndexOf(".html") ;
return requestURI.substring(start,end) ;
}
}
小结
- 此点切记:前台对于后台spring mvc需要确认html/jsp资源在其Controller层的映射,因为js文件只是被HTML/JSP文件所包含,所以ajax请求中的
url
属性如果采用相对路径则是针对HTML/JSP文件在Controller中的路径- 前台所有的请求路径均建议使用绝对路径来完成
web开发过程中关于路径问题的总结的更多相关文章
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- web开发中目录路径问题的解决
web开发当中,目录路径的书写是再常用不过了,一般情况下不会出什么问题,但是有些时候出现了问题却一直感到奇怪,所以这里记录一下,彻底解决web开发中路径的问题,开发分为前端和服务端,那么就从这两个方面 ...
- web项目中各种路径的获取(复制,为以后好找资源)
web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获 ...
- WEB应用中的路径问题及乱码问题
1 WEB应用中的路径问题 在web应用中,由于使用转发跳转路径时,地址栏不变.此时使用相对路径(../)存在404现象. 故使用绝对路径,解决web应用的路径问题. 什么是绝对路径,以 “/” 开 ...
- web开发过程中经常用到的一些公共方法及操作
进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...
- 理解java Web项目中的路径问题
本文以项目部署在tomcat服务器为例,其他相信也是一样的. 先说明请求页面的写法,在web中,页面路径主要写的有以下几种 1.请求重定向 2.浏览器的请求被服务器请求到新页面(我称为“转发”) 3. ...
- web项目中的路径问题
“/”表示根路径 1.“/”代表的意思不是固定的,是要根据具体的方法,才能知道在该方法中"/"所代表的含义,同样相对路径也不是固定的,需要根据具体的方法来判断具体是相对哪个路径的相 ...
- 解决servlet在web.xml中的路径跳转问题
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...
- Web开发中的路径问题总结
原文地址:http://zzqrj.iteye.com/blog/806909 路径问题在Web开发中算是令人比较蛋疼的问题,尤其是用相对地址时,同样的代码,在不同的目录结构中竟然会出现有对有错的结果 ...
随机推荐
- Centos7网络配置-转载
一. 查看网络地址: centos7取消了ifconfig命令,使用ip addr命令查看IP地址 二.配置网络 用VirtualBox安装的CentOS7,安装完成后,发现无法上网,于是到网上查了一 ...
- [学习OpenCV攻略][002][Ubuntu下OpenCV安装]
配置环境 操作系统 Ubuntu 12.04 OpenCV版本 opencv-1.0.0 学习书籍 <学习OpenCV> Liunx软件安装方法主要有3种: 1.编译安装,也就是通过编译源 ...
- PHP安全之webshell和后门检测
基于PHP的应用面临着各种各样的攻击: XSS:对PHP的Web应用而言,跨站脚本是一个易受攻击的点.攻击者可以利用它盗取用户信息.你可以配置Apache,或是写更安全的PHP代码(验证所有用户输入) ...
- vmstat & mpstat & w
vmstat # vmstat 3 2procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- ...
- myeclipse中git的使用
1.右键项目,team-->commit,勾选修改了的文件,点击commit(将更新提交到本地仓库)2.右键项目,team-->pull,合并本地仓库和远程服务器仓库,pull后有一些文件 ...
- phpstorm(或webstorm) 打开后 一直停留在scanning files to index....,或跳出内存不够的提示框
记得3月份做项目时就遇到过这个问题,当时解决的 ,但是忘记怎么解决的啦,所以 ,写博文是多么的重要啊. 说明: 在npm install 后,会出现Scanning files to index .. ...
- css cursor属性-显示的光标的类型(形状)的用法和定义
在网页布局的时候,在特定的地方,光标形状各有区别.这个时候,就需要用到css的cursor属性.根据自身需要选择设置鼠标指针样式. 定义和用法 cursor 属性规定要显示的光标的类型(形状). 该属 ...
- Python 爬取美女图片,分目录多级存储
最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图: 整体研究周期 2-3 天, ...
- Java数据持久层框架 MyBatis之API学习十(Logging详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- [one day one question] Vue单页面应用如何保证F5强刷不清空数据
问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...