zoukankan      html  css  js  c++  java
  • web工程中的各种路径(eclipse开发)

    目前遇到的 web 工程中要写url和路径的文件有 

    • webContent中.jsp/.html :action
    • src中的servlet类 : 映射地址、重定向、请求转发、访问资源文件(webContent中、src中)
    • src非servlet类的普通类 :访问资源文件(webContent中、src中)

    以下一一说明:

    .jsp/.html中的路径

      form表单提交的action中要写servlet(jsp)的路径

        1. 跳转到.jsp

          action中使用相对路径,相对于当前页面。

        

    <!-- from JSP1.jsp to JSP2.jsp --> 
    <!-- JSP1.jsp中的form --> 
    <form action="File/JSP2.jsp">
    <!-- from JSP2.jsp to JSP1.jsp --> 
    <!-- JSP2.jsp中的form --> 
    <form action="../JSP1.jsp">

        2.跳转到servlet1

        注意,路径与package产生的目录无关。

        

    //Servlet1.java 的映射地址
    @WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" })
    <!-- from JSP2.jsp to Servlet1 --> 
    <!-- JSP2.jsp中的form --> 
    <form action="../Servlet1">

    改变servlet的映射地址,使servlet映射到与JSP2.jsp一个文件夹下

    //修改servlet1的映射地址后
    @WebServlet(name = "Servlet1", urlPatterns = { "/File/Servlet1" })
    <!-- from JSP2.jsp to Servlet1 --> 
    <!-- JSP2.jsp中的form --> 
    <form action="Servlet1">

     再次改变servlet映射地址,servlet映射到虚拟目录下

    //再次修改servlet1的映射地址后,映射到virtualFile虚拟目录
    @WebServlet(name = "Servlet1", urlPatterns = { "/virtualFile/Servlet1" })
    <!-- from JSP2.jsp to Servlet1 --> 
    <!-- JSP2.jsp中的form --> 
    <form action="../virtualFile/Servlet1">

         3.更新:利用超链接<a>跳转到servlet,其中的href:

    //相对于当前jsp的相对路径跳转到servlet,同时传递参数id = 111,111为String类
    
    //在servlet页面可以通过 request.getPatameter("id")获取111
    <a href="servlet1?id=111">点击跳转到servlet1</a>

    src中的servlet类

    •     url注解中的要写servlet的映射地址
    •     servlet类访问webContent中的资源文件    Servlet1访问1.txt(按照tomcat中的工程结构)

    //Servlet1.java 的映射地址
    @WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" }) 
    //利用getServletContext().getRealPath()获取web工程的绝对路径
    String filePath = this.getServletContext().getRealPath("/sourceFile/1.txt");
    //filePath=// D:	omcatapache-tomcat-8.0.50-windows-x64apache-tomcat-8.0.50webapps	est3sourceFile1.txt
    BufferedReader br = new BufferedReader(new FileReader(filePath));

     

    •  访问src中的资源文件     Servlet1访问2.txt

    //Servlet1.java 的映射地址
    @WebServlet(name = "Servlet1", urlPatterns = { "/Servlet1" }) 
    //访问src中的文件,要按照tomcat中的工程目录获取绝对路径
    //servlet不要映射到虚拟目录
    String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/2.txt");
    BufferedWriter br = new BufferedWriter(new FileWriter(filePath));

     

    •  重定向到servlet(jsp),只能用相对路径  servlet1重定向到JSP2.jsp
    //重定向使用相对路径,url发生改变
    response.sendRedirect("File/JSP2.jsp");
    •  请求转发到servlet,可以 用相对路径、绝对路径 servlet1请求转发到Servlet2
    //相对路径
    RequestDispatcher rd = request.getRequestDispatcher("Servlet2");
    rd.forward(request,response);
    //绝对路径
    RequestDispatcher rd = request.getRequestDispatcher("/Servlet2");
    rd.forward(request,response);              

    src非servlet类的普通类

      

    •  普通类访问webContent中的资源文件  NormalClass中访问1.txt
    //利用class获取本类所在的目录(不含pacakage,只到classes),
    //利用getResource()获取资源文件绝对路径
    //在webContent中则要两次返回上级目录(WEB-INF,工程名URLTest)
    File filePath = new File(NormalClass.class.getClassLoader().getResource("../../sourceFile/1.txt").getPath());
    FileInputStream fn = new FileInputStream(filePath);
    •   普通类访问src中的资源文件  NormalClass中访问2.txt
    //利用class获取本类所在的目录(不含pacakage,只到classes),
    //利用getResource()获取资源文件绝对路径
    File filePath = new File(NormalClass.class.getClassLoader().getResource("2.txt").getPath());
    FileInputStream fn = new FileInputStream(filePath);

    注意:

    注意!! 第一次打开.jsp页面时,.jsp页面的所有相对路径都是相对.jsp页面的,然而从servlet转发到jsp页面时相对路径会变成相对于servlet的路径,会导致资源文件访问不到。

    如何避免:在所有相对路径前面加上 ${pageContext.request.contextPath}来获得相对web工程的目录。

    如:

    <!-- from JSP2.jsp to Servlet1 --> 
    <!-- JSP2.jsp中的form --> 
    <form action="../Servlet1">

     改为

    <!-- from JSP2.jsp to Servlet1 --> 
    <!-- JSP2.jsp中的form --> 
    <form action="${pageContext.request.contextPath}/Servlet1">
  • 相关阅读:
    广州公交百态之座位
    遍地大头者,岂尽聪明人
    小和尚
    c++中调用其他应用程序的方法(winexec shellexecute createprocess)
    MFC Is MVC
    Dialog Data Exchange
    MFC Extension dll VS Regular Dll
    Don't optimize prematurely
    Menu Basic
    Don't pessimize prematurely
  • 原文地址:https://www.cnblogs.com/luiyuying/p/8981593.html
Copyright © 2011-2022 走看看