注意点-随看随想

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表达式 $

比较

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


posted @ 2020-08-19 14:30  风冰水  阅读(126)  评论(0编辑  收藏  举报