Java Web学习(31): Servlet学习(四)

       Servlet路径

       绝对路径:一个资源的完整路径;

       相对路径:相对于当前资源的路径;

       在进行路径说明的时候首先声明一点,如果新建的项目工程中带有WebRoot目录,那么js、css、img都应该放

WebRoot目录下,否则访问会有问题。千万不要放在WEB-INF下,因为WEB-INF下的内容只有服务器转发可以访

到,处于安全考虑;如果新建的项目工程中不带有WebRoot目录,那么可以放在WEB-INF外面建立的文件夹中。

那么使用Eclipse创建的Web工程项目是下面的目录结构:

       Java Web学习(31): Servlet学习(四)_第1张图片

       JSP中的路径问题

       在JSP页面中加入basePath:

<%
  //获取项目名
  String path = request.getContextPath();
  /* http://localhost:8080/项目名/ */
  String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

       在JSP页面中的标签中加入:


       创建一个PathServlet

package com.servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class PathServlet
 */
@WebServlet(name="PathServlet" ,urlPatterns={"/PathServlet"})
public class PathServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PathServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}


	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("

Hello PathServlet!

"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

       创建一个default.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
      //获取项目名
      String path = request.getContextPath();
      /* http://localhost:8080/项目名/ */
      String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






Servlet


       

Servlet路径问题

       
       <%-- href属性中隐含了basePath,因为 --%>                get方式请求PathServlet    

       运行结果:

       Java Web学习(31): Servlet学习(四)_第2张图片

       跳转的路径:http://localhost:8080/ServletDemo1/PathServlet

       修改default.jsp页面:

       Java Web学习(31): Servlet学习(四)_第3张图片

       运行结果:

       Java Web学习(31): Servlet学习(四)_第4张图片

       跳转的路径:http://localhost:8080/PathServlet

       因为在JSP页面中第一个斜线表示服务器的根目录,也就是http://localhost:8080/,所以会报404错误,因此找

不到路径。

       继续修改default.jsp页面:

       Java Web学习(31): Servlet学习(四)_第5张图片

       运行结果:

       Java Web学习(31): Servlet学习(四)_第6张图片

       跳转的路径:http://localhost:8080/ServletDemo1/PathServlet

       request.getContextPath()得到的是项目的根目录,同样表单中的action属性的URL地址的写法与超链接相同。

       注解中的路径问题

       注解中的路径也就是我们通常所说的web.xml配置文件中的标签之间的路径问

题。只不过是Servlet3.0更简单了。

       我们上面的例子中的注解为:

@WebServlet(name="PathServlet" ,urlPatterns={"/PathServlet"})

       注解中的urlPatterns中的第一个斜线表示项目的根目录,如果不加会报很严重的错误。这里需要我们小心谨慎一

定不要忘了加。Servlet3.0以下的版本只能在web.xml中配置,同样是小心。

       Java Web学习(31): Servlet学习(四)_第7张图片

       Servlet中的路径问题

       新建一个test.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
      //获取项目名
      String path = request.getContextPath();
      /* http://localhost:8080/项目名/ */
      String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






跳转页面


     

我是test.jsp页面!

       继续修改default.jsp页面代码:

       Java Web学习(31): Servlet学习(四)_第8张图片

       新建的TestServlet:

package com.servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class TestServlet
 */
@WebServlet(name="TestServlet" ,urlPatterns={"/TestServlet"})
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}


	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//使用请求重定向方式跳转到test.jsp页面
		/*
		 * 请求重定向,将方法中的地址参数传递给浏览器,让浏览器重新发送请求,
		 * "/"代表(相对于)服务器根目录http://localhost:8000/
		 * 所以相当于浏览器重新请求了绝对路径http://localhost:8000/项目名/test.jsp
        */
		//使用request.getContextPath()获取项目名
		response.sendRedirect(request.getContextPath() +"/test.jsp");
		//response.sendRedirect("/test.jsp");//错误的
	}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}


}

       运行结果:

       Java Web学习(31): Servlet学习(四)_第9张图片

       跳转路径为:http://localhost:8080/ServletDemo1/test.jsp

       修改TestServlet:

       Java Web学习(31): Servlet学习(四)_第10张图片

       运行结果:

       Java Web学习(31): Servlet学习(四)_第11张图片

       跳转路径为:http://localhost:8080/ServletDemo1/TestServlet

       因此我们推荐使用的是:

       *************************************************************************************
       请求重定向

       response.sendRedirect(request.getContextPath() +"/test.jsp");

       服务器内部转发

       request.getRequestDispatcher("/test.jsp").forward(request.response)

       *************************************************************************************

       

       推荐的关于路径问题的博文:

       http://blog.csdn.net/app19830306/article/details/8510545

       

你可能感兴趣的:(JavaWeb,Java,Web学习之路)