JSP&Servlet路徑問題

若是帶WebRoot,那麼js、css、img都應該放到WebRoot目錄下,不然訪問會有問題。千萬不要放在WEB-INF下,由於WEB-INF下的內容只有服務器轉發能夠訪問到,出於安全考慮。css

若是不帶有WebRoot目錄,那麼能夠放在WEB-INF外面(創建的文件夾中)。html

1、JSP、Servlet中的相對路徑

a) 在JSPjava

/」表明站點(服務器)根目錄http://127.0.0.1/web

b)     在Servlet瀏覽器

/」表明Web應用的根目錄http://127.0.0.1/JSP_Servlet_Path/安全

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

相對路徑/a/a.jsp中/相對於web應用的根目錄,因此至關於請求跳轉到絕對路徑app

http://127.0.0.1/JSP_Servlet_Path/a/a.jspjsp

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

由於重定向中的方法是傳遞給瀏覽器,用於從新發送請求的,而在瀏覽器端「/」表明,相對於站點根目錄http://127.0.0.1/,因此這裏必需要加上/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");
    }
}

2、JSP中加入basePath

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

    注:至關於全部的href相對路徑前面都加入了:

               http://localhost:8000/JSP_Servlet_Path/

3、JSP與Servlet相互訪問

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>JSP_Servlet</servlet-name>
    <servlet-class>com.jsp_servlet_path.rqq.JSP_Servlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CopyOfJSP_Servlet</servlet-name>
    <servlet-class>com.jsp_servlet_path.rqq.CopyOfJSP_Servlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>JSP_Servlet</servlet-name>
    <url-pattern>/servlet/JSP_Servlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CopyOfJSP_Servlet</servlet-name>
    <url-pattern>/servlet/CopyOfJSP_Servlet</url-pattern>
  </servlet-mapping>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
<%@ page language="java"import="java.util.*"pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPEHTMLPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
  <head>
   <basehref="<%=basePath%>">
   
   <title>My JSP 'index.jsp' starting page</title>
         <metahttp-equiv="pragma"content="no-cache">
         <metahttp-equiv="cache-control"content="no-cache">
         <metahttp-equiv="expires"content="0">   
         <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
         <metahttp-equiv="description"content="This is my page">
         <!--
         <linkrel="stylesheet" type="text/css"href="styles.css">
         -->
  </head>
 
  <bodybackground="/JSP_Servlet_Path/img/main1.jpg">
   This is index.jsp page. <br>
   <%--href中隱含了basePath,由於<basehref="<%=basePath%>">--%>
   <ahref="a/a.jsp">a.jsp(a/a.jsp)</a><br/>
   <ahref="/JSP_Servlet_Path/a/a.jsp">a.jsp(/JSP_Servlet_Path/a/a.jsp)</a><br/>
   <ahref="a/c/c.jsp">c.jsp(a/c/c.jsp)</a><br/>
   <ahref="a/c/e/e.jsp">e.jsp(a/c/e/e.jsp)</a><br/>
   <imgsrc="/JSP_Servlet_Path/img/2012317253390833.jpg"><br/>
   <imgsrc="a/main1.jpg"><br/>
   <ahref="servlet/JSP_Servlet?i=0">JSP_Servlet(servlet/JSP_Servlet)</a>
<a href="/JSP_Servlet_Path/servlet/JSP_Servlet?i=0">
JSP_Servlet(/JSP_Servlet_Path/servlet/JSP_Servlet)</a><br/>
    <ahref="servlet/JSP_Servlet?i=100">請求JSP_Servlet,並轉發給CopyOfJSP_Servlet</a>
  </body>
</html>
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;
             }
    }
}
相關文章
相關標籤/搜索