javaWeb中使用URL的情况总结(相对路径)

来源:互联网 发布:好看的c语言编译器 编辑:程序博客网 时间:2024/06/06 10:01

绝对路径:

是从盘符开始的路径,形如C:\windows\system32\cmd.exe


相对路径:

1、“./” :表示文件目前所在的目录。
2、“../”:表示文件的上一层目录。
3、“/” :表示所在文件的一级目录。(就是在根目录下)

相对路径的例子:

1: C:\Program Files\other\index.htm

2: C:\Program Files\javaweb\test\01.htm

上面有两个绝对路径表示的文件路径!

问1:index.htm要想链接到01.htm这个文件,正确的链接应该是什么?

答1:../javaweb/test/01.htm”

问2:01.htm要想链接到index.htm这个文件,在01.htm文件里面应该是什么?
答2:“../../other/index.htm

Tomcat软件和Eclipse软件对于web项目的布局:

如图所示为Tomcat中部署的一个名叫“zuoye”的项目


如图所示为Eclipse中部署的一个名叫“zuoye”的项目的Navigator视图!




总结:

1、我们在发布了的javaWeb项目的代码中写的相对路径都是根据tomcat软件来进行查找的!
2、查找".class"文件(字节码文件)
a、java项目就在Eclipse的工作空间中的项目的bin为根目录下去找
b、web项目就在Tomcat的webapps下的项目的WEB-INF/classes目录下找(也可以在Navigator视图下,项目下的Build文件下看到,但是实际在Tomcat的webapps文件下的对应的项目下找)
3、查找".java"文件
a、在项目的src为根目录下去找(一般不会找".java"文件,因为没有什么可以用的地方,除了拷贝代码以外)
4、查找".HTML"文件
a、java项目就在workspace中的项目找
b、javaWeb项目就在Tomcat安装路径中的项目下找(但是也可以在Eclipse中项目下WebContent文件下看到,但是实际查找是在Tomcat中的webapps文件下的对应的项目下找)
5、javaWeb项目中不会找".java"文件,只会找".class"文件
6、java项目中一般不会找".java"和".class"文件,而是找".properties"、".txt"、".jpg"之类的文件

javaWeb中使用URL的时候经常用到相对路径,下面是我总结的一些关于有用到文件路径的地方!!

1、HttpServletResponse对象的重定向:(伪代码如下)

response.sendRedirect("signIn.html");

response.sendRedirect("/zuoye/signIn.html");

response.sendRedirect("http://localhost:8080/zuoye/signIn.html");

response.sendRedirect("/zuoye/sign");

注释:第一行伪代码:直接写需要重定向的文件全名就行了

第二行伪代码:以“/”加项目名开头,后接需要重定向的文件相对项目名的路径

第三行伪代码:绝对路径

第四行伪代码:以“/”加项目名开头,后接需要重定向的文件相对项目名的路径

注释:前三行代码是我所总结出来的表示路径方式!!

注意:重定向可以定位到html文件,也可以定位到servlet文件!

以下补充一个项目名“test_server_1”的重定向实例!

(如下两张图所示,重定向的路径不是以"/"开始的,所以会出现如是错误。正确格式请参照上面给的实例!)


2、请求转发:(伪代码如下)

request.getRequestDispatcher("sign").forward(request,response);

request.getRequestDispatcher("jsp/register.jsp").forward(request, response);

request.getRequestDispatcher("/jsp/register.jsp").forward(request,response);

注意:路径只能如上写相对路径,并且这个相对路径只除去项目名路径(最后有实例说明什么是项目名路径)和"/",不能写以“项目名路径”开始的相对路径!

下面的伪代码就是错误的!!

request.getRequestDispatcher("/zuoye/sign").forward(request,response);

3、JS代码中实现页面跳转:(伪代码如下)

window.location.href='http://127.0.0.1:8080/zuoye/welcome.html';

response.getWriter().write("<scripttype='text/javascript'>window.location.href='/zuoye/sign.html';</script>");

注释:第一行伪代码为JS文件里的代码,里面用的是绝对路径;

第二行伪代码是servlet文件里的代码,里面有的是相对路径。

4、JSP实现定时刷新:(真实代码如下)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var num = 2;
function time(){
if(num ==0){
/* window.location.href="/sign_JSP_EL_JSTL/jsp/welcome.jsp"; */
<%
response.setHeader("refresh", "3;/sign_JSP_EL_JSTL/jsp/welcome.jsp");
%>
}
document.getElementsByTagName("font")[0].innerHTML= num;
num--;
}
setInterval("time()",1000);
</script>
</head>
<body>
<h2>你好,你所访问的资源已经丢失,请访问其他资源,<font>3</font>秒后将转到welcome画面!!</h2>
</body>
</html>

注意:

上面代码中的红色部分为常用的两种方式,下面列出另一种方式(只需要写出文件名字,并且不能以“/”开头)

response.setHeader("refresh","3;welcome.jsp");

下面这种方式是错误的:

response.setHeader("refresh", "5;${pageContext.request.contextPath}/jsp/welcome.jsp");

注释:请求转发和定时刷新,其本质实现是一样的,只是表现不一样,一个可以实现定时的功能而已!

5、超链接标签:(伪代码如下)

<a href="/ssign/sign.html">登录</a>

<a href=" http://127.0.0.1:8080/ssign/sign.html">登录</a>

注意:调用HTML文件的路径可以写绝对路径,也可以在工作空间找其相对与项目名的相对路径(java项目则在workspace中找,web项目在Tomcat中找)

6、表单:(伪代码如下)

<form action="/zuoye/register" method="get">

<form action="register" method="post">

注释:这里的路径写的是servlet文件的路径,也可以写HTML文件的路径,可以参照上面两行代码进行手写。

注意:

使用第二种方式时,当前文件就在根目录下(Eclipse中看到直接在WebContent文件下)则是正确的,但是如果不在根目录下则会报错!!

原因是因为第二种方式会自动补全路径,而补充的路径为该文件相对根目录的路径

例:我们这里需要访问的register文件的相对路径为"/zuoye/register",而如果我们的文件是在WebContent/HTML下,则系统会把第二种的路径补全为"/zuoye/HTML/register",然后你就不喜欢看到的404页面就来了!!!

7、javaWeb项目中的web.xml配置文件:(具体配置信息如下)

<servlet-class>com.wq.servlet.Servlet_register</servlet-class>

注意:右击java类名 选择“Copy Qualified Name”就能得到这个类的全限定名 (全限定名:包名+类名)

8、驱动接口路径:(具体路径如下)

driverClass=com.mysql.jdbc.Driver

注意:驱动接口的路径就是jar包中的Driver接口类的路径(mysql-connector-java-5.1.7-bin.jar

9、连接mysql数据库的路径:(mysql的路径)

url=jdbc:mysql://localhost:3306/test

url=jdbc:mysql://127.0.0.1:3306/test

注释:localhost可以换成任何可以连接的mysql数据库所在的电脑的IP地址!!

10、类路径:(伪代码如下)

InputStream in =JDBC_Util.class.getResourceAsStream("/com/wq/config/DB.properties");

注意:

       getResourceAsStream(“/..”):

“/”:表示根目录,必须是以"/"为开头才行!!!!!!!

java项目中的是src为根目录

javaWeb项目中的是WEB-INF/classes为根目录

注意:

在javaWeb项目中获取".properties"文件只能使用类路径的方法,不能使用流的方式!

11、外部链接css文件:

<link href="../css/a.css" rel="stylesheet" type="text/css"/>

12、外部链接js文件:

<script type="text/javascript" src="../js/mydate.js">  </script>

13、图片标签:

<imgsrc="../img/mm.jpg" />

14、javaWeb项目中的导入的jar包路径:

web项目中jar包放在这个路径下!!

“\WebContent\WEB-INF\lib ”


总结:以上总结的几点用处,除了一些特例外不能用绝对路径,都可以使用绝对路径(以上有些没有写绝对路径)

另外补充两点:(JSP中获得项目名路径和项目全路径的方法)

JSP表达式:
<%=request.getContextPath() %>:项目名路径(/zuoye)

<%=request.getRealPath("/") %>:项目全路径(C:/...../zuoye)(此处用五个点表示中间路径)

EL表达式:

${pageContext.request.contextPath}:项目名路径