頁面跳轉+路徑問題


 

 

 

  

絕對路徑:是從盤符開始的路徑,形如             // 多用在后台中
C:\windows\system32\cmd.exe
相對路徑:是從當前路徑開始的路徑                //多用在前端

 

/開頭的通常表示絕對路徑:

/表示站點路徑的場景如下(其他情況是在服務器上跳轉  / 表示項目的根)

(1)  重定向

(2)    超鏈接

(3)    action表單

 

在web項目中,為了安全,可能需要把jsp文件放在WEB-INF目錄下,這樣如果我們的頁面中出現超鏈接a標簽或者js的location.href去直接轉向到WEB-INF下的某一個jsp頁面,那么就會引用不到,因為這樣的請求方式是客戶端的請求,而WEB-INF頁面只對服務端開放,對客戶端是不可見的。(只能通過轉發的方式進入)

 

1  超鏈接  

<body>
	<a href="/tiaozhuan/views/index.jsp">超鏈接jsp跳轉</a>   //進入jsp頁面
	<a href="/tiaozhuan/servletA">超鏈接跳服務器(注解)</a>
	<a href="/tiaozhuan/servletB">超鏈接跳服務器(web.xml)</a>
</body>


(1)   方式1  通過注解進入servlet
@WebServlet("/servletA")
public class ChaoLianJieServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet"+Thread.currentThread().getName());
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doPost"+Thread.currentThread().getName());
		//doGet(req, resp);
	}

(2)  方式2  通過web.xml配置進入servlet
public class ChaoLianjieServlet1 extends HttpServlet{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("ChaoLianjieServlet1 +doPost");
		doGet(req, resp);
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}	
}


web.xml


<servlet>
  	<servlet-name>servletB</servlet-name>
  	<servlet-class>com.rl.chaolianjie.ChaoLianjieServlet1</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servletB</servlet-name>
  	<url-pattern>/servletB</url-pattern>
  </servlet-mapping>
  

 action :

 

<form  method="post" action="/tiaozhuan/servletB">

	<input type="submit" value="submit"/>
</form>



<servlet>
  	<servlet-name>servletB</servlet-name>
  	<servlet-class>com.rl.chaolianjie.ChaoLianjieServlet1</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servletB</servlet-name>
  	<url-pattern>/servletB</url-pattern>
  </servlet-mapping>
  

public class ChaoLianjieServlet1 extends HttpServlet{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("ChaoLianjieServlet1 +doPost");
		//doGet(req, resp);
	}
}

重定向和轉發:

 

<form  method="post" action="/tiaozhuan/servletA">

	<input type="submit" value="submit1"/>
</form>

<form  method="get" action="/tiaozhuan/servletA">

	<input type="submit" value="submit2"/>
</form>


@WebServlet("/servletA")
public class ChaoLianJieServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.sendRedirect("/tiaozhuan/views/index.jsp");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.getRequestDispatcher("/views/index.jsp").forward(req, resp);
		
	}

  讀取文件/獲取初始化參數:

    1  配置

<servlet>
  	<servlet-name>servletB</servlet-name>
  	<servlet-class>com.rl.chaolianjie.ChaoLianjieServlet1</servlet-class>
  	<init-param>
  		<param-name>name</param-name>
  		<param-value>zhang</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>

  

 

    2   獲取

        



      String path=getServletContext().getRealPath("/file/web.xml");    System.out.println(path); BufferedReader br=new BufferedReader( new FileReader(new File(path))); System.out.println(br.readLine()); //獲取初始化參數 String name=getServletContext().getInitParameter("name"); String nameconf=getServletConfig().getInitParameter("name"); resp.getWriter().print(name+"getServletContext");//null resp.getWriter().print(nameconf+"getServletConfig");//有值

  

1.FileTest.class.getResource("")
  得到的是當前類FileTest.class文件的URI目錄。不包括自己!

  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/

  2.FileTest.class.getResource("/")
  得到的是當前的classpath的絕對URI路徑。

  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

  3.Thread.currentThread().getContextClassLoader().getResource("")
  得到的也是當前ClassPath的絕對URI路徑。

  如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

  4.FileTest.class.getClassLoader().getResource("")
  得到的也是當前ClassPath的絕對URI路徑。

 

服務器上:沒加 /

System.out.println("bb"+Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println("cc"+ChaoLianJieServlet.class.getResource(""));

 

bbfile:/D:/work/eclipse/workspaceOne/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/tiaozhuan/WEB-INF/classes/
ccfile:/D:/work/eclipse/workspaceOne/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/tiaozhuan/WEB-INF/classes/com/rl/chaolianjie/

 

服務器上 :  加 了/

System.out.println("aa"+Thread.currentThread().getContextClassLoader().getResource("/"));
System.out.println("dd"+ChaoLianJieServlet.class.getResource("/"));

 

aafile:/D:/work/eclipse/workspaceOne/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/tiaozhuan/WEB-INF/classes/
ddfile:/D:/work/eclipse/workspaceOne/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/tiaozhuan/WEB-INF/classes/

 

 

本地:

URL path=FileResourse.class.getResource("/");
System.out.println(path);     // file:/D:/work/eclipse/workspaceOne/tiaozhuan/build/classes/
URL path1=FileResourse.class.getResource("");
System.out.println(path1);    //file:/D:/work/eclipse/workspaceOne/tiaozhuan/build/classes/com/rl/chaolianjie/
URL a=Thread.currentThread().getContextClassLoader().getResource("");
System.out.println(a);          //file:/D:/work/eclipse/workspaceOne/tiaozhuan/build/classes/
URL b= Thread.currentThread().getContextClassLoader().getResource("/");
System.out.println(b);         null
URL c=Thread.currentThread().getClass().getResource("");
System.out.println(c);         null
URL path2 = Thread.currentThread().getContextClassLoader().getResource("/");
URL path3 = Thread.currentThread().getContextClassLoader().getResource("");
System.out.println(path2);      null
System.out.println(path3);     file:/D:/work/eclipse/workspaceOne/tiaozhuan/build/classes/

 

  服務器上:加了/  Thread.currentThread().getContextClassLoader().getResource("/")和當前類.class.getResource("/")的值都是classpath的絕對URI路徑

       不加/  Thread.currentThread().getContextClassLoader().getResource("")得到的是classpath的絕對URI路徑     而當前類.class.getResource("")的值是包結構下

 

  本地   加了/    當前類.class.getResource("/") 是classpath 下絕對URI    , Thread.currentThread().getContextClassLoader().getResource("/")是null

       不加/   當前類.class.getResource("")是當前孢結構下          T hread.currentThread().getContextClassLoader().getResource("")  是 classpath 下 絕對URI 路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM