• 注意点-随看随想


    req.getContextPath()作用

    得到的是项目的虚拟路径:例如

    访问路径为:http://localhost:8080/blue/response.jsp

    request.getContextPath()得到的就是 /blue

    JSP/Servlet中的相对路径和绝对路径

      服务器端

    相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
    (不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)

    也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://127.0.0.1/webapp/的。

    请求转发:

    //跳转页面
    req.getRequestDispatcher("/WEB-INF/pages/store/company/update.jsp").forward(req, resp);
    

    ​ 客户端

    所有的html页面中的相对地址都是相对于服务器根目录(http://127.0.0.1/)的,
    而不是(根目录下的该Web应用的目录)http://127.0.0.1/webapp/的。

    请求重定向

    //加个标记参数
    //uri  : /store/company?operation=list
    @WebServlet("/store/company")
    public class CompanyServlet extends BaseServlet {
    }
    
    //请求重定向   地址改变、不可以共享request、绝对路径
    resp.sendRedirect(req.getContextPath() + "/store/company?operation=list");
    

    ${pageContext.request.contextPath}是JSP取得绝对路径的方法,

    等价于<%=request.getContextPath()%>

    也就是取出部署的应用程序名或者是当前的项目名称

    比如我的项目名称是demo1在浏览器中输入为http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>

    取出来的就是/demo1,而"/"代表的含义就是http://localhost:8080

    故有时候项目中这样写${pageContext.request.contextPath}/a.jsp


    include和iframe的区别

    https://www.cnblogs.com/JolinChan/p/4039523.html


    dao层的接口方法参数中为什么都要加上@Param注解

    因为java没有保存行参的记录,java在运行的时候会把List queryAll(int offset,int limit);中的参数变成这样:queryAll(int arg0,int arg1),这样我们就没有办法去传递多个参数。所以需要使用@Param注解给方法参数命名,然后在xml文件的该dao层方法对应的sql语句中就可以正常使用@Param注解的参数名


    param 和attribute的区别

    相同 : 二者都是封装在request中

    param: JSP-->Servlet [客户端]

    属性是在后台servlet中设置并获取的 , 用方法setAttribute(name, o) 和 getAttribute(name)实现;

    String getParameter(String name),即只能返回String类型数据。

    没有setParameter()这一说。

    attribute:Servlet-->Servlet/JSP [容器内]

    参数主要是将前端页面标签携带的信息(标签的name作为参数名,标签的value作为参数值)作为参数(可以类似地看成在前端页面设置参数)往后台传递数据

    void setAttribute(String name,Obejct o);
    Object getAttribute(String name);
    先在request中set,然后才能在request中get

    https://www.zhihu.com/question/325301954/answer/690322222


    session和request对象区别

    转自https://blog.csdn.net/lameraaa/article/details/103384993

    主要区别在于 生命周期不同

    request

    生命周期为一个请求,范围较小。

    不需要声明,系统自动封装了,可以直接用。

    存值:request.setAttribute(“名字”, 要存的值);

    取值:request.getParameter(“名字”);
         或者用EL表达式: ${名字}

    session

    生命周期为一次会话,一次会话内session存储的内容将一直存在。

    声明:HttpSession session = request.getSession();

    存值:session.setAttribute(“名字”, 要存的值);

    取值:session.getAttribute(“名字”)

    ​ 或者用EL表达式 ${sessionScope.所存值的对象 }

    比较

    request占用资源比较少,安全性比较高,但缺乏持续性。

    session相对来说对资源的消耗会大点,安全性相对来说也会稍微低点,但它生命周期长。

    如果可以使用request的情况下,尽量使用request ,因为相对于服务器来说资源的消耗还是比较重要的。

    重定向和转发

    (redirect)重定向的特点:

    1. 地址栏发生变化
    2. 重定向可以访问其他站点(服务器)的资源
    3. 重定向是两次请求。不能使用request对象来共享数据

    (forward)转发的特点:

    1. 转发地址栏路径不变
    2. 转发只能访问当前服务器下的资源
    3. 转发是一次请求,可以使用request对象来共享数据

    所以转发可以用request对象传值,重定向要用session对象传值


    getContextPath、getServletPath、getRequestURI的区别

    假定你的工程名称为projects,你在浏览器中输入请求路径:

    http://127.0.0.1:8080/projects/pages/newForm.jsp

    1、request.getContextPath()

    打印结果:/projects

    2、request.getServletPath()

    打印结果:/pages/newForm.jsp

    3、request.getRequestURI()

    打印结果 /projects/pages/newForm.jsp


    镜花水月
  • 相关阅读:
    python:linux中升级python版本
    robot:当用例失败时执行关键字(发送短信)
    robot:根据条件主动判定用例失败或者通过
    robot:List变量的使用注意点
    python:动态参数*args
    robot:linux下安装robot环境
    robot:循环遍历数据库查询结果是否满足要求
    爬虫结果数据完整性校验
    ChromeDriver与chrome对应关系
    Spring系列之AOP
  • 原文地址:https://www.cnblogs.com/fengbingshui/p/13529184.html
Copyright © 2020-2023  润新知