博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP&Servlet路径问题
阅读量:6982 次
发布时间:2019-06-27

本文共 5975 字,大约阅读时间需要 19 分钟。

hot3.png

如果带WebRoot,那么js、css、img都应该放到WebRoot目录下,否则访问会有问题。千万不要放在WEB-INF下,因为WEB-INF下的内容只有服务器转发可以访问到,出于安全考虑。

如果不带有WebRoot目录,那么可以放在WEB-INF外面(建立的文件夹中)。

一、JSP、Servlet中的相对路径

a) 在JSP

/”代表站点(服务器)根目录http://127.0.0.1/

b)     在Servlet

/”代表Web应用的根目录http://127.0.0.1/JSP_Servlet_Path/

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

相对路径/a/a.jsp中/相对于web应用的根目录,所以相当于请求跳转到绝对路径

response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");

因为重定向中的方法是传递给浏览器,用于重新发送请求的,而在浏览器端“/”代表,相对于站点根目录,所以这里必须要加上/JSP_Servlet_Path,这样浏览器重新请求的地址为:http://127.0.0.1/JSP_Servlet_Path/b/b.jsp

package com.jsp_servlet_path.rqq; import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; public class JSP_Servlet extends HttpServlet {     @Override    public voiddoGet(HttpServletRequest request, HttpServletResponse response)                    throwsServletException, IOException {                               doPost(request,response);    }     @Override    public voiddoPost(HttpServletRequest request, HttpServletResponse response)                        throwsServletException, IOException {               System.out.println(request.getContextPath());                //请求转发,在服务器端,"/"代表(相对于)web应用http://localhost:8000/JSP_Servlet_Path/               //所以请求转发的绝对路径为http://localhost:8000/JSP_Servlet_Path/a/a.jsp                // request.getRequestDispatcher("/a/a.jsp").forward(request,response);               //请求重定向,将方法中的地址参数传递给浏览器,让浏览器重新发送请求,               //"/"代表(相对于)服务器站点http://localhost:8000/               //所以相当于浏览器重新请求了绝对路径http://localhost:8000/JSP_Servlet_Path/b/b.jsp               response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");               //response.sendRedirect(request.getContextPath()+ "/b/b.jsp");    }}

二、JSP中加入basePath

<%    String path = request.getContextPath();    String basePath= request.getScheme()+"://"        +request.getServerName()+":"        +request.getServerPort()+path+"/";%>
<%=basePath%>">

    注:相当于所有的href相对路径前面都加入了:

               http://localhost:8000/JSP_Servlet_Path/

三、JSP与Servlet相互访问

  
    
JSP_Servlet
    
com.jsp_servlet_path.rqq.JSP_Servlet
  
  
    
CopyOfJSP_Servlet
    
com.jsp_servlet_path.rqq.CopyOfJSP_Servlet
  
   
    
JSP_Servlet
    
/servlet/JSP_Servlet
  
  
    
CopyOfJSP_Servlet
    
/servlet/CopyOfJSP_Servlet
  
   
    
index.jsp
  
<%@ page language="java"import="java.util.*"pageEncoding="GBK"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>      
<%=basePath%>">      
My JSP 'index.jsp' starting page         
         
         
            
         
         
     
   This is index.jsp page. 
   <%--href中隐含了basePath,因为
<%=basePath%>">--%>   
a.jsp(a/a.jsp)
   
a.jsp(/JSP_Servlet_Path/a/a.jsp)
   
c.jsp(a/c/c.jsp)
   
e.jsp(a/c/e/e.jsp)
   
   
   
JSP_Servlet(servlet/JSP_Servlet)
JSP_Servlet(/JSP_Servlet_Path/servlet/JSP_Servlet)
    
请求JSP_Servlet,并转发给CopyOfJSP_Servlet  
package com.jsp_servlet_path.rqq; import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; public class JSP_Servlet extends HttpServlet {     @Override    public voiddoGet(HttpServletRequest request, HttpServletResponse response)                    throwsServletException, IOException {                               doPost(request,response);    }     @Override    public voiddoPost(HttpServletRequest request, HttpServletResponse response)                        throwsServletException, IOException {            System.out.println(request.getContextPath());            //请求转发,在服务器端,"/"代表(相对于)web应用http://localhost:8000/JSP_Servlet_Path/            //所以请求转发的绝对路径为http://localhost:8000/JSP_Servlet_Path/a/a.jsp            // request.getRequestDispatcher("/a/a.jsp").forward(request,response);            //请求重定向,将方法中的地址参数传递给浏览器,让浏览器重新发送请求,            //"/"代表(相对于)服务器站点http://localhost:8000/            //所以相当于浏览器重新请求了绝对路径http://localhost:8000/JSP_Servlet_Path/b/b.jsp            response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");            //response.sendRedirect(request.getContextPath()+ "/b/b.jsp");             Stringstr_i = request.getParameter("i");             int i =new Integer(str_i);             switch(i) {                    case 0:                        request.getRequestDispatcher("/index.jsp").forward(request,response);                        System.out.println("index.jsp");                        break;                    case 1:                        request.getRequestDispatcher("/a/a.jsp").forward(request, response);                        System.out.println("a.jsp");                        break;                    case 2:                        request.getRequestDispatcher("/b/b.jsp").forward(request,response);                        System.out.println("b.jsp");                        break;                    case 3:                        request.getRequestDispatcher("/a/c/c.jsp").forward(request,response);                        System.out.println("c.jsp");                        break;                    case 100:                        request.getRequestDispatcher("/servlet/CopyOfJSP_Servlet").forward(request,response);                        System.out.println("forward to CopyOfJSP_Servlet");                        break;                    default:                        System.out.println("default");                        return;             }    }}

转载于:https://my.oschina.net/fairy1674/blog/549314

你可能感兴趣的文章
一个数组实现两个栈
查看>>
Fedora 27 命令行提示符修改
查看>>
Erlang 简易安装和卸载
查看>>
Windows Server 2012 R2 DirectAccess功能测试(3)—App2服务器安装及配置
查看>>
Shell 十三问学习笔记2
查看>>
Juniper-R&S-BGP(1):一些写在前头的基础知识
查看>>
python flaskfeng封装跨域请求头和封装json格式
查看>>
【搜索引擎基础知识2】网络爬虫
查看>>
Aptana Studio 3 汉化
查看>>
phonegap+jquerymobile开发android的心得(4)
查看>>
python 使用PyTesser--安装
查看>>
无需编译,1分钟安装Ubuntu官方构建的最新版Linux内核
查看>>
解压即用,Ubuntu上Nginx/Apache/PHP编译打包
查看>>
table设置border没有空隙
查看>>
Maven的setting.xml 配置详解
查看>>
Python3.7源码在windows(VS2015)下的编译和安装
查看>>
10_css选择符类型1.html
查看>>
修改 liteide 的 godoc 文档样式
查看>>
Java学习笔记(35)——Java集合07之TreeMap
查看>>
甲骨文推Oracle WebLogic应用服务器12c
查看>>