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">
  • 相关阅读:
    TensorflowJS 教程
    理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
    Wireshark 过滤 基本语法
    LSTM如何解决梯度消失或爆炸的?
    K-Means ++ 和 kmeans 区别
    LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数
    python 多进程练习 调用 os.system命令
    TLS 改变密码标准协议(Change Cipher Spec Protocol) 就是加密传输中每隔一段时间必须改变其加解密参数的协议
    ssl tls 证书链 根证书和叶证书查询
    TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
  • 原文地址:https://www.cnblogs.com/luiyuying/p/8981593.html
Copyright © 2011-2022 走看看