1.Servlet生命周期
①服务器加载Servlet
②创建Servlet实例
只有第一次请求Servlet时,创建Servlet实例,调用构造器
③初始化init()
只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet
④service()处理用户请求
可以被多次调用,每次请求都会调用service方法,实际用于响应请求的,根据用户请求的类型(get或post)调用doGet或者doPost方法。
⑤destory()销毁
只被调用一次,在当前Servlet所在的web应用被卸载前调用,用于释放当前Servlet所占用的资源
2.转发和重定向的区别
①请求转发与重定向本质区别:
请求转发只发出一个请求,请求重定向发出2个请求
②请求转发时服务器内部跳转,所在地址栏上的路径不会改变
请求重定向时浏览器在次发送请求,地址栏上的路径会发生改变
③请求转发只能在当前应用内部跳转
重定向可以在内部跳转也可以跳出当前应用
④请求转发时,因为是内部跳转,他的路径写法是“/资源路径”
重定向,它的路径需要些 /工程名/资源路径
⑤请求转发,可以共享request
重定向不可以,因为每一次都是一个新的request
⑥请求转发是通过request发起 request.getRequestDispatcher().forward();
重定向response发起,response.sendRedirect();
3.JSP常用内置对象及其方法
①request:客户端的请求信息被封装在request对象中,通过它才能了解用户的需求,然后做出响应
②response:包含了响应客户请求的有关信息,但在JSP中使用很少
③pageContext:页面的上下文,是PageContext的一个对象,可以从该对象中获取到其他8个隐含对象,也可以获取到当前页面的其他信息
④session:指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,知道客户端与服务器断开连接为止
⑤application:代表当前web应用,是ServletContext对象,能实现用户间数据的共享,可存放全局变量,它开始于服务器的启动,直到服务器的关闭,在此期间,此对象一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命周期
⑥config:当前JSP对应的Servlet的ServletConfig对象,可获取该Servlet的初始化参数(开发时基本不用),需要通过映射的地址才可以。
⑦out:JspWriter对象,调用out.println()可以直接把字符串打印到浏览器上
⑧page:page对象就是指向当前JSP页面本身,类型为Object,有点类似于类中的this,几乎不使用
⑨exception:该对象是一个例外对象,只有页面是一个错误页面,即isErrorPage设置为true的时候(默认为false)才能使用,否则无法编译。
4.Get和Post的区别
①GET在浏览器回退时是无害的,而POST会再次提交请求。
②GET产生的URL地址可以被Bookmark,而POST不可以。
③GET请求会被浏览器主动cache,而POST不会,除非手动设置。
④GET请求只能进行url编码,而POST支持多种编码方式。
⑤GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
⑥GET请求在URL中传送的参数是有长度限制的,而POST么有。
⑦对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
⑧GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
⑨GET参数通过URL传递,POST放在Request body中。
#####################################################################
①本质:
get是向服务器索取数据的一种请求,而post是向服务器提交数据的一种请求
②服务器端获取值得方法
get方式提交的数据,服务器端使用request.QueryString获取变量的值
post方式提交的数据,服务器端使用request.Form获取数据
③安全性
get方式安全性低,post方式较安全。但是post方式执行效率要比get方式差一些
5.Session和Application区别
①session是会话变量,只要同一个浏览器没有被关闭,session对象就会存在。因此在同一个浏览器窗口中,无论向服务器发送多少请求,session对象只有一个。但是如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,但是我们可以通过编写程序进行修改这个session的生命周期的时间。session.setMaxInactiveInterval(10000);//用来设置session的有效期为10000秒,超出这个范围将失效。
并且通过session对象可以存储或者读取客户的相关信息,例如用户名或购物信息等,可以通过session对象的setAttribute(String name,Object obj)方法和getAttribute(String name)的方法实现。注意的是getAttribute()方法的返回值是Object类型,如果将获取到的信息赋给String类型的变量,则需要进行强制类型转换或者调用其的toString()方法。
session.setAttribute("user","小名");
String user=(String)session.getAttribute("user");
②application它类似于系统的全局变量,用于保存所有程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁的时候,所有用户都可以享用该application对象。它的生命周期可以说是最长的。但是其应用程序初始化的参数是要在web.xml文件中进行设置的,通过<context-param>标记配置应用程序初始化参数。也就是说同时再打开另一个浏览器,他们使用的都是同一个application对象。
6.Sevlet和JSP的关系
servlet是用java语言编写的,是一个java类。主要功能是用来接受、处理客户端的请求,并把处理结果返回到客户端显示。Jsp是servlet发展后期的产物。在没有jsp之前,servlet利用输出流动态生成整个HTML页面,输出内容包括每一个HTML标签和每个在HTML页面中出现的内容。HTML文件包含大量标签和大量静态文本及格式等,以及所有的表现逻辑,包括布局、色彩及图像等。这些内容都必须耦合在java代码中,这样就导致servlet开发效率低下,令人不胜其烦。jsp出现后弥补了不足,因为jsp文件是通过在标准的HTML页面中插入java代码形成的。其静态的部分无需java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用java脚本控制。所以jsp技术出现后,主要用jsp文件来动态生成HTML文件,然后返回客户端显示。现在的servlet,当需要将整个页面作为结果返回时,不再由其自己去处理,而是调用jsp文件。