javaWeb应用中路径问题

1."/"的使用:        

给服务器使用: "/" 表示在当前web应用的根目录(tomcat里面的指定项目中webRoot下)
给浏览器使用: "/"  表示在webapps的根目录下

2.查询流程:

给浏览器使用

例子:   url=/W项目名/资源名

先定位"/"然后定位项目名;之后到web.xml中寻找是否有url-pattern的值为"资源名",如果有,定位到对应的Servlet;

如果没有,到webRoot根目录下找有没有对应的资源名;如果有,定位,如果没有就报404错误;

给浏览器使用:

例子:url=/资源名

在本项目web.xml中寻找是否有url-pattern的值为"资源名",如果有,定位到对应的Servlet;

如果没有,到webRoot根目录下找有没有对应的资源名;如果有,定位,如果没有就报404错误;

3.具体问题分析:

1) 转发:
            request.getRequestDispatcher("/target.html").forward(request, response);

转发是服务器内部的跳转,"/"是给服务器使用的,表示当前web应用的根目录,这句代码的含义是:转发到webRoot/target.html

2)重定向
       重定向是服务器给浏览器发送响应之后,浏览器根据响应头中附带location再次请求新页面的过程.这个地址是给浏览器用的:

例子:response.sendRedirect("/Web_demo/target.html");

由于webapps的根目录有多个项目,所以需要指定具体的项目名;

3)html页面的超连接href
例子:

        response.getWriter().write("<html><body><a href='/Web_demo/target.html'>超链接</a></body></html>)

由于超链接是给浏览器使用,所以"/"表示webapps根目录下

4) html页面中的form提交地址
        response.getWriter().write("<html><body><form action='/Web_demo/target.html'><input type='submit'/></form></body></html>)

同上

4 读取web应用下的资源文件

1)"."的使用
         "." 代表java命令运行目录。

         在java项目中,java命令运行目录就是根目录
         在javaweb项目中java命令运行目录在tomcat/bin目录下(Servlet在服务器上运行,而打开服务器的文件startup.bat在bin目录下)
          结论: 在web项目中, . 代表在tomcat/bin目录下开始,所以不能使用这种相对路径。

  2)getRealPath
         getRealPath读取,自动定位到本项目中的WebRoot根目录,返回资源文件的绝对路径,
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");

 3). getResourceAsStream()

        getResourceAsStream得到资源文件,自动定位到本项目中的WebRoot根目录,返回的是输入流
        InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop = new Properties();
        prop.load(in);

5 读取web应用工程名

getContextPath():

     获取的是本工程名

猜你喜欢

转载自blog.csdn.net/weixin_40775755/article/details/81506128
今日推荐