本系列博客汇总在这里:请求对象 request 和响应对象 response 汇总


目录


一、请求和相应的路径问题

  1. 新建一个 java web 工程后在 WebRoot/dir1( dir1 需要新建) 下新建 1.html ;在 WebRoot 下新建 2.html
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_绝对路径
  2. 新建 servlet,命名为 HelloServlet,继承 HttpServlet
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_java_02
  3. 修改配置文件
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_java_03
  4. 在 1.html 和 2.html 分别通过超链接访问 HelloServlet

二、路径分为相对路径和绝对路径两种写法

  1. 相对路径,根据当前资源路径与目标资源路径,寻找相对位置关系,通过 ​​" . "​​ (当前目录) 和 ​​" . . "​​ (上一级目录) 访问目标资源。
    (1)html 访问 HelloServlet
    当前路径 http://localhost/reqresp_demo/dir1/1.html
    目标路径 http://localhost/reqresp_demo/hello
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_路径问题_04
    重新启动 tomcat ,地址栏访问 http://localhost/reqresp_demo/dir1/1.html ,然后点击通过相对路径(相对地址栏输入路径)的方式跳转访问 servlet
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_java_05
    (2)html 访问 HelloServlet
    当前路径 http://localhost/reqresp_demo/2.html
    目标路径 http://localhost/reqresp_demo/hello
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_绝对路径_06
    重新启动 tomcat ,地址栏访问 http://localhost/reqresp_demo/2.html ,然后点击通过相对路径(相对地址栏输入路径)的方式跳转访问 servlet
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_java_07
    说明:相对路径,总需要分析当前路径与目标路径对应关系,编写规则会根据当前路径不同而不同,实际项目当中我们可能很少使用!

  2. 绝对路径(完整路径)不需要考虑当前路径与目标路径之间的关系
    (1)1.html
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_路径问题_08
    重新启动 tomcat ,地址栏访问 http://localhost/reqresp_demo/dir1/1.html ,然后点击通过绝对路径(完整路径)的方式跳转访问 servlet
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_html_09
    (2)2.html
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_路径问题_10
    重新启动 tomcat ,地址栏访问 http://localhost/reqresp_demo/2.html ,然后点击通过绝对路径(完整路径)的方式跳转访问 servlet
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_html_11
    带有协议完整路径 (跨网站):http://localhost/reqresp_demo/hello
    以 / 开始路径 (同一个站点内) :/reqresp_demo/hello
    服务器端和客户端对于 / 的区别
    客户端访问路径:/reqresp_demo/hello
    服务器内部路径:/hello, 多用于服务器跳转, 页面包含(jsp)
    请求对象 request 和响应对象 response(1)_请求和相应的路径问题_java_12

三、以上操作完整源码

  • HelloServlet
  • package com.wyx.servlet;
    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 HelloServlet extends HttpServlet
    {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
    System.out.println("doGet被访问了");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
    {
    doGet(req, resp);
    }
    }
  • web.xml
  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="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>HelloServlet</servlet-name>
    <servlet-class>com.wyx.servlet.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <!-- /相当于 http://localhost:8080/reqresp_demo/ -->
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    </web-app>
  • 1.html
  • <!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>1.html相对路径</h1>
    <a href="../hello">点击访问Servlet</a>

    <hr>

    <h1>1.html绝对路径</h1>
    <!--
    绝对路径访问目标地址的方式1
    缺点:写死了ip和端口,这样的不灵活,一旦ip和端口改变,所有的链接就都废了,不建议使用该种方式
    -->
    <a href="http://localhost/reqresp_demo/hello">绝对路径点击访问Servlet第一种方式</a>
    <br>
    <!--
    使用/项目名称/目标路径, /代表绝对路径项目名称之前的路径
    -->
    <a href="/reqresp_demo/hello">绝对路径点击访问Servlet第二种方式</a>

    </body>
    </html>
  • 2.html
  • <!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>2.html相对路径</h1>
    <a href="./hello">相对路径点击访问Servlet</a>
    <br>
    <a href="hello">相对路径点击访问Servlet1</a>

    <hr>

    <h1>2.html绝对路径</h1>
    <!--
    绝对路径访问目标地址的方式1
    缺点:写死了ip和端口,这样的不灵活,一旦ip和端口改变,所有的链接就都废了,不建议使用该种方式
    -->
    <a href="http://localhost/reqresp_demo/hello">绝对路径点击访问Servlet第一种方式</a>
    <br>
    <!--
    使用/项目名称/目标路径, /代表绝对路径项目名称之前的路径
    -->
    <a href="/reqresp_demo/hello">绝对路径点击访问Servlet第二种方式</a>

    </body>
    </html>
  • 工程文件下载

如有错误,欢迎指正!