post与get之间的区别
他们是Http协议的两种常见请求方式。
- 数据传递长度:get长度比较小,post没有限制
- 数据传递方式:get使用URL传递参数值,post直接将参数值放入request body
- 数据传递安全性:get不安全,post安全
- 发送的数据包数量:get发送1个TCP数据包,post发送2个TCP数据包
首先发送一个request head(1个TCP数据包),服务器接收后返回100状态码,再发送request body(1个TCP数据包)- 缓存:get访问浏览器会产生缓存,但是post没有
重定向与请求转发的区别
重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址
response.sendRedirect("index.jsp");
请求转发(服务器):服务器直接转发请求,跳转并执行新页面
RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp");
requestDispatcher.forward(request, response);
- 重定向是客户端浏览器执行跳转;请求转发是服务器端直接跳转
- 重定向之后,客户端浏览器地址栏显示新的请求地址;
请求转发之后,客户端浏览器地址栏显示旧的请求地址;- 重定向代表一次新的请求;请求转发没有发起新请求
谈谈你对JSP九个内置对象的理解
JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。JSP中共包含9个内置对象,其中包含4个作用域对象和5个其它内置对象。
4个作用域对象(都可以利用setAttribute(String key,Object value)/getAttribute(String key)来存储/取出键值对数据,作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求),HttpSession(一次会话),ServletContext(整个web应用))
-
pageContext(page域)
1)page域指当前的jsp页面,作用范围是整个JSP页面,是四大作用域中最小的一个。
2)pageContex的生命周期是这个页面的运行时间,若你关掉这个页面,页面运行结束,pageContext就会消亡,数据也会失效。3)使用情况:只适合在一个页面中使用,在一个页面中定义变量,和保存在此页面中有用的数据。
-
request(request域)
1)request是指一次请求,即当用户访问web服务器的时候,web服务器会生成request和response对象,然后在service方法调用,完成用户的请求和对用户的响应。作用范围整个请求链。
2)request的生命周期是请求的周期,若请求一直转发下去,其生命并不会结束。当整个请求结束,request生命结束。在request保存的数据也会失效。
3)使用情况:用于一次请求在不同页面间的操作及参数传递,如表单的参数传递。
4)常用方法
request.getContextPath():获取项目运行时的应用的访问名称 request.getMethod():获取当前请求的方式 request.getRemoteAddr():获取客户端的IP地址 request.getLocalAddr():获取服务器的IP地址 request.getSession():获取当前Session会话对象 request.getRealPath():获取当前应用在服务器端的真实路径 request.getParameter():根据参数名称获取请求中的参数值 request.getServletContext():获取application对象 request.setCharacterEncoding("utf-8"):设置中文编码集,用于解决中文乱码 request.getRequestDispatcher():请求转发(服务器):服务器直接转发请求,跳转并执行新页面
-
session(session域)
1)session是指一次会话,当用户首次访问服务器时,服务器会根据每一个浏览器的请求创建一个session对象,每个用户有每个的session对象,相当于身份证,保存在服务器中。借助cookie技术来传递id属性,就可以在每次访问中找到自己的session。作用范围是一次会话。
2)session的生命周期是在服务器正常的情况下,在第一次调用request.getSession()方法时到销毁该session时结束。一次"会话"包含若干次"请求",会话结束有三折方式:客户端浏览器关闭;客户端超时(Tomcat默认为30分钟);服务器关闭。
3)使用情况:主要是网站用户的信息,购物车。
4)常用方法
session.getId():获取当前会话对象的ID session.getCreationTime():获取Session的创建时间 session.getLastAccessedTime();获取本次会话最后一次访问时间
-
application(ServletContext)
1)application即是servlet中的ServeltContext。application作用范围:整个Web应用。
2)ServletContext可以存数据,只要设置一次,整个web应用都可以访问到数据。
3)ServletContext生命周期在服务器启动时创建,在服务器关闭时销毁。
4)使用情况:每个用户都可以访问的数据,或者多个客户端共享数据。例如购物网站的首页,商品页等。
5)常用方法
application.getRealPath(""):获取应用真实路径
application.getContextPath():获取应用访问名称
application.getSessionTimeout():获取Session超时时间
5个其它内置对象
-
ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。
-
JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter。
-
HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。
常用方法
response.setContentType("text/html;charset=utf-8"):设置中文编码
response.getWriter():获取输出流
reponse.sendRedirect():重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址
- Object类的Page对象,处理jsp页面,是一个Servlet的实例。
- Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。
Servlet生命周期
Servlet生命周期包含实例化、初始化、服务和销毁四个阶段。
- 实例化:当客户端发起第一次请求时,Servlet容器启动,调用自身默认的无参构造方法servlet()来创建Servlet实例。
public LifeServlet() {
System.out.println("1.LifeServlet实例被创建");
}
- 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法(重写父类)初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作。
@Override
public void init() throws ServletException {
System.out.println("2.LifeServlet实例完成初始化!");
}
- 服务:Servlet容器调用Servlet的service()方法,根据请求方式不同,调用不同的doXXX方法处理请求。
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("3.LifeServlet实例调用服务");
}
- 销毁:当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法来销毁Servlet实例。
public void destroy() {
System.out.println("4.LifeServlet实例被销毁");
}
在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,但服务可以多次执行。
网友评论