Servlet接口定义了5个方法,个中前三个方法与Servlet生命周期干系:

void init(ServletConfig config) throws ServletExceptionvoid service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOExceptionvoid destory()java.lang.String getServletInfo()ServletConfig getServletConfig()

Web容器加载Servlet并将实在例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;要求到达时调用Servlet的service()方法,service()方法会根据须要调用与要求对应的doGet或doPost等方法;当做事器关闭或项目被卸载时做事器会将Servlet实例销毁,此时会调用Servlet的destroy()方法。

转发(forward)和重定向(redirect)的差异?

jsppostservlet还不明确Jsp和Servlet有什么差别 HTML

forward是容器中掌握权的转向,是做事器要求资源,做事器直接访问目标地址的URL,把那个URL 的相应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道做事器发送的内容是从哪儿来的,以是它的地址栏中还是原来的地址。

redirect便是做事器端根据逻辑,发送一个状态码,见告浏览看重新去要求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到做事器保护起来资源,但是可以从一个网站redirect到其他网站。

forward更加高效,以是在知足须要时只管即便利用forward(通过调用RequestDispatcher工具的forward()方法,该工具可以通过ServletRequest工具的getRequestDispatcher()方法得到),并且这样也有助于隐蔽实际的链接;在有些情形下,比如须要访问一个其它做事器上的资源,则必须利用重定向(通过HttpServletResponse工具调用其sendRedirect()方法实现)。

JSP有哪些内置工具?浸染分别是什么?

JSP有9个内置工具:

request:封装客户真个要求,个中包含来自GET或POST要求的参数;response:封装做事器对客户真个相应;pageContext:通过该工具可以获取其他工具;session:封装用户会话的工具;application:封装做事器运行环境的工具;out:输出做事器相应的输出流工具;config:Web运用的配置工具;page:JSP页面本身(相称于Java程序中的this);exception:封装页面抛出非常的工具。

JSP和Servlet是什么关系?

ervlet是一个分外的Java程序,它运行于做事器的JVM中,能够依赖做事器的支持向浏览器供应显示内容。
JSP实质上是Servlet的一种大略单纯形式,JSP会被做事器处理成一个类似于Servlet的Java程序,可以简化页面内容的天生。

Servlet和JSP最紧张的不同点在于,Servlet的运用逻辑是在Java文件中,并且完备从表示层中的HTML分离开来。
而JSP的情形是Java和HTML可以组合成一个扩展名为.jsp的文件。

有人说,Servlet便是在Java中写HTML,而JSP便是在HTML中写Java代码,当然这个说法是很片面且不足准确的。
JSP侧重于视图,Servlet更侧重于掌握逻辑,在MVC架构模式中,JSP适宜充当视图(view)而Servlet适宜充当掌握器(controller)。

讲解JSP中的四种浸染域。

答:JSP中的四种浸染域包括page、request、session和application,详细来说:

page代表与一个页面干系的工具和属性。
request代表与Web客户机发出的一个要求干系的工具和属性。
一个要求可能超过多个页面,涉及多个Web组件;须要在页面显示的临时数据可以置于此浸染域。
session代表与某个用户与做事器建立的一次会话干系的工具和属性。
跟某个用户干系的数据该当放在用户自己的session中。
application代表与全体Web运用程序干系的工具和属性,它本色上是超过全体Web运用程序,包括多个页面、要乞降会话的一个全局浸染域。

实现会话跟踪的技能有哪些?

由于HTTP协议本身是无状态的,做事器为了区分不同的用户,就须要对用户会话进行跟踪,大略的说便是为用户进行登记,为用户分配唯一的ID,下一次用户在要求中包含此ID,做事器据此判断到底是哪一个用户。

1)URL 重写:在URL中添加用户会话的信息作为要求的参数,或者将唯一的会话ID添加到URL结尾以标识一个会话。

2) 设置表单隐蔽域:将和会话跟踪干系的字段添加到隐式表单域中,这些信息不会在浏览器中显示但是提交表单时会提交给做事器。

这两种办法很难处理超过多个页面的信息通报,由于如果每次都要修正URL或在页面中添加隐式表单域来存储用户会话干系信息,事情将变得非常麻烦。

3)cookie:cookie有两种,一种是基于窗口的,浏览器窗口关闭后,cookie就没有了;另一种是将信息存储在一个临时文件中,并设置存在的韶光。

当用户通过浏览器和做事器建立一次会话后,会话ID就会随相应信息返回存储在基于窗口的cookie中,那就意味着只要浏览器没有关闭,会话没有超时,下一次要求时这个会话ID又会提交给做事器让做事器识别用户身份。

会话中可以为用户保存信息。
会话工具是在做事器内存中的,而基于窗口的cookie是在客户端内存中的。

如果浏览器禁用了cookie,那么就须要通过下面两种办法进行会话跟踪。
当然,在利用cookie时要把稳几点:首先不要在cookie中存放敏感信息;其次cookie存储的数据量有限(4k),不能将过多的内容存储cookie中;再者浏览器常日只许可一个站点最多存放20个cookie。

当然,和用户会话干系的其他信息(除了会话ID)也可以存在cookie方便进行会话跟踪。

4)HttpSession:在所有会话跟踪技能中,HttpSession工具是最强大也是功能最多的。
当一个用户第一次访问某个网站时会自动创建HttpSession,每个用户可以访问他自己的HttpSession。

可以通过HttpServletRequest工具的getSession方法得到HttpSession,通过HttpSession的setAttribute方法可以将一个值放在HttpSession中,通过调用HttpSession工具的getAttribute方法,同时传入属性名就可以获取保存在HttpSession中的工具。

与上面三种办法不同的是,HttpSession放在做事器的内存中,因此不要将过大的工具放在里面,纵然目前的Servlet容器可以在内存将满时将HttpSession中的工具移到其他存储设备中,但是这样势必影响性能。

添加到HttpSession中的值可以是任意Java工具,这个工具最好实现了Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则在序列化时就会涌现非常。

过滤器有哪些浸染和用法?

Java Web开拓中的过滤器(filter)是从Servlet 2.3规范开始增加的功能,并在Servlet 2.4规范中得到增强。
对Web运用来说,过滤器是一个驻留在做事器真个Web组件,它可以截取客户端和做事器之间的要求与相应信息,并对这些信息进行过滤。

当Web容器接管到一个对资源的要求时,它将判断是否有过滤器与这个资源干系联。
如果有,那么容器将把要求交给过滤器进行处理。
在过滤器中,你可以改变要求的内容,或者重新设置要求的报头信息,然后再将要求发送给目标资源。

当目标资源对要求作出相应时候,容器同样会将相应先转发给过滤器,在过滤器中你可以对相应的内容进行转换,然后再将相应发送到客户端。

常见的过滤器用场紧张包括:对用户要求进行统一认证、对用户的访问要求进行记录和审核、对用户发送的数据进行过滤或更换、转换图象格式、对相应内容进行压缩以减少传输量、对要求或相应进行加解密处理、触发资源访问事宜、对XML的输出运用XSLT等。

过滤器干系的接口紧张有:Filter、FilterConfig和FilterChain。

监听器有哪些浸染和用法?

Java Web开拓中的监听器(listener)便是application、session、request三个工具创建、销毁或者往个中添加修正删除属性时自动实行代码的功能组件,如下所示:

ServletContextListener:对Servlet高下文的创建和销毁进行监听。
ervletContextAttributeListener:监听Servlet高下文属性的添加、删除和更换。
HttpSessionAttributeListener:对Session工具中属性的添加、删除和更换进行监听。
ServletRequestListener:对要求工具的初始化和销毁进行监听。
ServletRequestAttributeListener:对要求工具属性的添加、删除和更换进行监听。
HttpSessionListener:对Session的创建和销毁进行监听。

补充:session的销毁有两种情形:

session超时(可以在web.xml中通过<session-config>/<session-timeout>标签配置超时时间);通过调用session工具的invalidate()方法使session失落效。