一、JSP九大内置对象
输出输入对象
1.out:用于向客户端、浏览器输出数据。
2.request(HttpServletRequest类):用于接收客户端请求信息。
3.response(HttpServletResponse类):封装了服务器的响应,用于响应客户端。
通信控制对象
4.session(HttpSession类):保存会话信息。
5.application:相当于一个全局表量,实现不同用户的信息共享。
6.pageContext:提供对其他八个对象的访问。
servlet对象
7.page(Object类):代表JSP本身,相当于java中的this引用变量。
8.conf(ServletConfig类):封装应用请求的配置信息。
异常对象
9.exception:封装JSP执行过程中发生的异常和错误信息。
二、Servlet生命周期
当有一个servlet请求被Web服务器接收到,服务器先调用init()方法进行初始化。知道servlet对象被销毁,init()方法只会被调用一次。
此后每次用户请求时,Web服务器都会调用service()方法来处理请求。service会检查用户请求方式,选择调用doGet或者doPost等方法。
调用destroy()销毁servlet对象,destroy也只调用一次,最后JVM垃圾回收器进行回收。
三、JSP和servlet的区别与联系
JSP(Java Server Pages):java服务器页面,其根本是简化servlet的设计。
servlet:是java编写的服务端程序,主要功能是交互式地浏览和修改数据,生成动态Web内容。
JSP代码执行前,会被服务端的JSP引擎转换为.java文件,然后由JSP引擎调用Java编译器,将其.java文件编译为.class文件,然后由JVM执行。
servlet本身是.java文件,编译后由JVM执行。
JSP更擅长页面的表示,其中也可以嵌入java代码。而servlet主要是java代码,负责业务逻辑控制。
四、doGet和doPost的区别
form表单中默认是get方式,超链接中也是get方式。
1、get提交的表单数据会存放在URL地址后,可以直接看到,安全性低。post提交的表单数据存放在http协议消息体中,无法直接看到,安全性高。
2、get提交方式数据量长度有限,一般不超过2kb,post提交方式没有大小限制,更适合大规模的数据传输。
3、get方式在用户刷新时不会有任何提示,post会弹出提示框,问用户是否重新提交。
五、JSP四个作用域
1、page:在当前的JSP页面有效,跳转后无效。
2、request:从一个请求被处理到返回响应整个过程有效。数据被转发到其他jsp页面依然有效。
3、session:在当前会话有效,也就是说从一个浏览器开启到关闭都有效。
4、application:相当于全局变量,只要不被手动删除,或关闭web服务器,在任何浏览器中都有效。
六、转发和重定向的区别
1、转发是在服务端行为,客户端并不知道。而重定向是客户端行为。
2、转发的速度快,重定向慢。
3、转发是同一个请求,而重定向是两个不同的请求。
4、转发的URL地址栏不会变,重定向会变成请求的新地址。
5、转发后request域中的信息可访问到,重定向不能。
6、转发可以访问WEB-INF文件夹,重定向不能。
注释:转发和重定向原理。
转发过程:客户首先发送一个请求到服务端,服务端匹配servlet,servlet执行时调用getRequestDispacher()方法,把请求直接转发给指定的test.jsp,整个流程都是在服务端进行的,也都是在同一个请求完成的,servlet和test.jsp共享同一个request。
重定向过程:客户端发送第一个请求,服务端匹配servlet,servlet调用sendRedirect()方法,这个方法是response的方法,服务端返回这个响应,告诉客户端你需要再发送一个请求去访问test.jsp。客户端接收到服务端的这个响应后,就立刻发出第二个新请求,去请求test.jsp。两个请求互不干扰,相互独立,所有之前的request域里的值,重定向的test.jsp都访问不到。
七、session的失效时间设置
1、在servlet中用session.setMaxInactiveInterval(int interval)方法设置失效时间,以秒为单位的。
2、在web.xml里设置:(已分钟为单位)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3、tomcat的conf文件夹下的web.xml里设置,同上。(已分钟为单位)
八、乱码问题及解决
1、JSP页面中,设置<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
2、servlet中,request.seCharacterEncoding(“utf-8”);
3、把获取到的字符串,转成byte数组,在转成”utf-8”字符集。例如:
String s = request.getgetParameter("name");
byte[] b = s.getbytes(“iso-8859-1”);
String s2 = new String(b,”utf-8”);