jsp和servlet路径跳转问题

    我经常被jsp和servlet页面之间跳转的时候因为路径问题弄得头晕,特地在此进行总结,给大家看也是给我自己看,共勉,一起加油,写的不好请留言,我会改正。

目录结构如下:


web.xml文件配置如下:

<servlet>
      <servlet-name>servlet</servlet-name>
      <servlet-class>servlet.Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
       <servlet-name>servlet</servlet-name>
       <url-pattern>/servlet/Servlet</url-pattern>
  </servlet-mapping>


servlet.java文件如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//设置页面的编码格式
		response.setContentType("text/html;charset=UTF-8");
		//创建一个printWriter对象,用来在网页上输出内容
		PrintWriter out=response.getWriter();
		out.println("我是Servlet");
	}

index.jsp文件如下:

<body>
    <!--使用相对路径访问HelloSevlet-->
    <a href="servlet/Servlet">访问Servlet</a>
</body>

输出结果:

点击此链接(访问Servlet)


----------------------------------------------------------------------------------------------------------------

如果在超链接中一个一加了“/”会出现404错误,因为超链接中的第一个/表示服务器的根目录

<body>
    <!--使用相对路径访问HelloSevlet-->
    <!-- /servlet/Servlet表示服务器的根目录,会显示404错误 -->
    <a href="/servlet/Servlet">访问Servlet</a>
</body>
点击访问Servlet会出现如下情况,注意访问的地址显示为“http://localhost:8080/servlet/Servlet”

----------------------------------------------------------------------------------------------------------------

上面在jsp中的超链接方式是使用了相对定位方式,下面使用绝对定位,由于我用的是eclipse,所以直接填以下方式

    <!-- 使用绝对路径访问servelt,可以使用path变量来使用,也就是request.getContextPath() -->
    <a href="<%=request.getContextPath()%>/servlet/Servlet">使用绝对路径访问Servlet</a><br>

显示结果:

----------------------------------------------------------------------------------------------------------------

另外表单中action的url地址写法和超链接方式相同,我就不在这里重复了。

----------------------------------------------------------------------------------------------------------------

在index.jsp页面中我新加一条语句,用来跳转至TestServlet(注意在web.xml中要配置servlet)

<a href="servlet/TestServlet">访问TestServlet,实现路径跳转问题</a><br>

test.jsp初始页面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>test.jsp</h1>
   <hr>
</body>
</html>

在TestServlet中,我们先实验重定向方式,使用超链接中的相对路径看看会有什么效果

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//请求重定向方式跳转到jsp页面
		response.sendRedirect("test.jsp");
	}

显示结果如下:

注意url地址为http://localhost:8080/dsf/servlet/test.jsp,使用相对路径会在当前文件下查找test.jsp文件,

当前路径为http://localhost:8080/dsf/servlet

----------------------------------------------------------------------------------------------------------------

我们应该在TestServet中使用request.getContextPath()方法再拼上后面的路径。

//请求重定向方式跳转到jsp页面
		response.sendRedirect(request.getContextPath()+"/test.jsp");

显示结果:

----------------------------------------------------------------------------------------------------------------

当我们在TestServelt中使用服务器内部跳转时,使用相对路径跳转

request.getRequestDispatcher("test.jsp").forward(request,response);

显示结果如下:

因为是服务器内部跳转,因此上面的地址不变,此时我们要看报错的信息,HTTP Status 404 - /dsf/servlet/test.jsp

在dsf/servlet目录下找不到test.jsp

----------------------------------------------------------------------------------------------------------------

当我们使用一下方式时,加了一个"/"

	request.getRequestDispatcher("/test.jsp").forward(request,response);
显示结果如下

这个“/”表示项目的根目录。

我们也可以这样写

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

返回上层目录再查找test.jsp文件


本文,根据慕课网整理而来。

猜你喜欢

转载自blog.csdn.net/lxh123456789asd/article/details/80055537