zoukankan      html  css  js  c++  java
  • Servlet路径跳转问题

    Servlet中路径跳转(服务器端跳转)JSP

    1.相对路径

     注意这里的相对含义,相对于谁而言
    经过多次试验总结,servlet相对路径跳转相对于servlet配置的xml路径(或servlet3.0注解路径)
    如下:
    //XML文件
    <servlet-mapping>
    <servlet-name>RegServlet</servlet-name>
    <url-pattern>/servlet/RegServlet</url-pattern>
    </servlet-mapping>
    项目目录:
                         
    Servlet中相对路径
    request.getRequestDispatcher("../userinfo.jsp").forward(request,response);
    这里的servlet路径配置在/servlet/RegServlet下(即根目录下的setvlet/目录下),则 ../ 目录则倒回到根目录下,而userInfo.jsp同样位于根目录下
        
    第二种情况servlet3.0中的注解情况
    @WebServlet("/RegServlet")    //新特性 访问地址直接配置好了
    如下:
    同样的项目目录,则在servlet中访问则需要如下修改:
    request.getRequestDispatcher("userinfo.jsp").forward(request, response); //相对路径方式
    解释:因为系统注解的servlet配置在根目录(‘/’意味着根目录)下,则意味userInfo.jsp与servlet文件位于同一目录下,可以直接访问

    2. 绝对路径
            绝对路径则相对而言简单很多,
            这里注意一点,对照着上面的目录图,我们要理解到,服务器在解析路径时,'src','WebRoot',这些文件夹其实都忽略了,这样说或许不准确,但便于理解,也解释说,则两个目录下的文件,都是在同一个根目录下,
            如果访问同一个Jsp页面,这绝对路径的表示方式如下:
    request.getRequestDispatcher("/userinfo.jsp").forward(request, response);// ‘/’表示根目录 绝地路径

    Servlet中路径跳转(请求重定向跳转)JSP

    请求重定向( response.sendRedirect () )跳转多用下面的方式:
    response.sendRedirect(request.getContextPath()+"/userinfo.jsp"); //这里使用的是加上了上下文的绝对路径
    解释:服务器在解析绝对路径时,比浏览器解析绝对路径时,,多了一部分,这部分就是项目名,也就是,上下文环境
    或者使用相对路径,这里的相对于与上面的相对是同一样含义(servlet配置的访问路径,这里配置的是/RegSevlet),则相对路径的表示方式为:
    response.sendRedirect("userinfo.jsp"); //这里使用的是相对路径

    Servlet的路径跳转

    一、JSP跳转到Servlet

    1、相对路径,如href="servlet/TestServlet" 如果写成"/servlet/TestServlet"会报错,因为第一个“/”表示的是【服务器根目录】

    2、绝对路径,通过内置成员变量path实现,如href="<%=path%>/servlet/TestServlet" ,path得到的是项目根目录,如【http://localhost:8080/ServletDemo】

    其中path指的就是:

    例子:

        <!--使用相对路径访问HelloServlet -->
        <!-- /servlet/HelloServlet 第一个/表示服务器的根目录 -->
        <a href="servlet/HelloServlet">访问HelloServlet!</a><br>
        <!-- 使用绝对路径 访问HelloServlet,可以使用path变量:path变量表示项目的根目录-->
        <a href="<%=path%>/servlet/HelloServlet">访问HelloServlet!</a><br>

    二、Servlet跳转JSP

    1、请求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");

    request.getContextPath()获得项目根目录,或者通过"../xxx.jsp"取得上层路径得到

    2、服务器内部转发: request.getRequestDispatcher("../xxx.jsp").forward(req,resp);

    request.getRequestDispatcher("/test.jsp").forward(request, response);  /斜线表示项目的根目录

    小结:Servlet都可以通过../xxx.jsp获取路径

    三、web.xml的路径

    web.xml的<url-pattern>必须以“/”开头,“/”表示项目的根目录

    JSP页面上使用相对路径和绝对路径调用servlet web.xml的<url-pattern>必须以“/”开头,“/”表示项目的根目录

    如果在Servlet中使用请求重定向方式跳转到其他jsp页面,则需要:

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

    服务器内部跳转路径: 

    request.getRequestDispatcher("/test.jsp").forward(request,response);//这里的斜线表示项目的根目录

    或者

    request.getRequestDispatcher("../test.jsp").forward(request,response);//“..”表示回到上层目录也就是根目录;

    PS:如果<url-pattern>带一层路径 如:<url-pattern>/servlet/loginServlet</url-pattern>,则内部转发的时会从WebRoot/servlet/路径下找jsp页面。

    如果要转发的页面不在WebRoot/servlet/路径下,则需要“..”回到上层或根目录再定位到jsp页面,如下:

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

    如果要转发的页面在WebRoot/servlet/路径下,则如下:

    request.getRequestDispatcher("/test.jsp").forward(request,response);
  • 相关阅读:
    图解:在资深架构师眼中的架构应该是怎样的?
    面试必看|面试官之间的“潜规则”
    职业规划:专属程序员的巡礼之年
    互联网企业如何应对网站架构演化带来的“蝴蝶效应”
    阿里首席架构师,是如何选择并落地架构方案的
    你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
    大型分布式电商系统架构演进史?
    大厂面试官:Java工程师的“十项全能”
    打包签名时出现Conversion to Dalvik format failed with error 1
    Android项目混淆打包
  • 原文地址:https://www.cnblogs.com/alsf/p/9194268.html
Copyright © 2011-2022 走看看