1、说一说Servlet的生命周期?
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的 init,service和destroy方法表达。当用户第一次发送请求的时候, Servlet被服务器实例化(一旦被实例化,就会驻留在内存里面,供后续访问的需要),之后容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
2、JAVA SERVLET API中forward() 与redirect()的区别?
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用 forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。
3、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
4、四种会话跟踪技术
会话作用域ServletsJSP 页面描述
page是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include
指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于
forward 指令和 include 动作的关系)
session是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
5,
JSP的内置对象及方法。
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,
header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
6.内置对象的作用域分为4种
a、page 当前页面。
b、session 同一个网站内。
c、request 从上一页到下一个页面。
d、application 同一个网站内。
7. 介绍一下servlet的工作原理
8.提交表单请求时,post和get有哪些区别?
在FORM提交的时候,如果不指定Method,则默认为GET请求.
1> get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2>get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
3> get安全性非常低,post安全性较高。
4>对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据
9. <%@include...%> 静态包含与<jsp:include...> 动态包含 之间的区别?
静态包含试编译时包含,动态包含试运行时包含;
<%@include...%>每次被加载进来的页面都需要单独编译,<jsp:include...>加载与被加载页面动态整合,一起编译,无须单独编译被加载;
<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数,静态INCLUDE用 include伪码实现,不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %> 。
添加:
6.说出在
JSP 页面里是怎么分页的? 页面需要保存以下参数:
总行数:根据 sql 语句得到总行数 每页显示行数:设定值 当前页数:请求参数 页面根据当前页数和每页行数计算出当前页第一行行数, 定位结果集到此行,
对结果集 取出每页显示行数的行即可。
7, get 和 post 的区别?
1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。
2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面, 并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在
form 的数据体中, 按照变量和值相对应的方式,传递到 action 所指向 URL。
3、Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多
服务器、 代理服务器或者用户代理都会将请求 URL 记录到日志文件中, 然后放在某个地方, 这样就可能会有一些隐私的信息被第三方看到。 另外,
用户也可以在浏览器上直接看到 提交的数据, 一些系统内部消息将会一同显示在用户面前。 Post 的所有操作对用户来说都是 不可见的。
4、 传输的数据量小, Get
这主要是因为受 URL 长度限制; Post 可以传输大量的数据, 而 所以在上传文件只能使用 Post(当然还有一个原因,将在后面的提到) 。
5、Get 限制 Form
表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字 符集。
6、Get 是 Form 的默认方法。
8、如何现实 servlet 的单线程模式? <%@ page
isThreadSafe=”false”%>
11.描述 Cookie 和 Session 的作用,区别和各自的应用范围,Session 工作原理。 cookie 记录在客户端,session 记录在服务器端;cookie 因为保存在客户端,所以不是很
安全,保存在服务器端会更安全。 cookie 有长度限制, session 没有。 每一个 session 在服务端有一个 sessionID 作一个标识。 存储的数据量大;浏览器的
Cookies 不能超过 300 个,并且每个不能超过 4KB,因此总 Cookie 文件大小限制在 1200KB 之内。 Cookie
是在客户端开辟的一块可长期存储用户信息的地方;Session 是在服务器内存中 开辟的一块存储用户信息的地方;当客户第一次访问服务器时,服务器在内存创建对应的
Session 给访问客户,当客户离开或时间过期时;服务器自动 销毁 Session; Session 是由容器管理的。
12. 列出 Jsp 中包含外部文件的方式,两者有何区别。
1:<jsp:include page="b.jsp" /> 2: <%@ include file="b.jsp"> 区别 1:<jsp:include page="b.jsp" />(先执行,后包含)此标签表示法:能动态区别加
进来的是动态页面还是静态页面,对于静态页面则直接将资源包含(仅取其文本)。
<%@ include file="b.jsp">此指令表示:静态地包含页面,不管其内容如何,不过是静态 页面还是动态页面都首先将页面的内容先加进来。
区别 2:<jsp:include page="b.jsp"
/>可以分开写成: <jsp:include page="b.jsp" ><jsp:param name="参数名" value="参数值"/></jsp:include>这样就可以传递参数。
13. 说明 Jsp 中 errorPage
的作用,应用范围。 表示错误页的操作,在一般的站点中,只要一个程序出现了错误,就是产生了异常,则
可以统一跳转到一个页面进行显示,那么这种操作就属于错误页的处理, 要想进行错误页的设置,需要满足以下两个条件:
1、在错误能够处理的页上的 page
指令中,增加:isErrorPage="true",表示可以处理错误
2、在每一个页面指定 errorPage,指向 isErrorPage 为 true 的页面。
如果希望配置一种全局的错误处理,则可以在 web.xml 中进行配置 <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page>
<error-page> <exception-type>java.lang.NullPointException</exception-type> <location>/error.jsp</location> </error-page>
一旦发生错误就会跳转到指定页面,此方法属于服务器跳转
14.Jsp 和 Servlet 中的请求转发分别如何实现。
jsp request.getRequestDispatcher("/*.jsp").forward(request,response); servlet sendRedirect(); forward();
15,servlet 如何得到服务器的 name,port,info?
ServletRequest.getServletName(); ServletRequest.getServletPort(); ServletRequest.getServletInfo();
16,servlet 如何得到客户端信息? ServletRequest.getRemoteAddr(); ServletRequest.getRemoteHost();
17, filter的作用是什么?主要实现什么方法?doFilter()方法中 参数 request,response 的全称 是什么?
filter 使用户可以改变一个 request 和修改一个 response,它并不是一个 servlet,不能产生 一个 response。 它能在一个 request 到达 servlet 之前预处理 request,也可以在离开 servlet 时处 理
response.换句话说,filter 其实是一个“ servlet chaining” (servlet 链)。一个 filter 包括: 在 servlet 调用之前截获 在 servlet 调用之前检查 servlet
request 根据需要修改 request 头 和 request 数据 根据需要修改 response 头 和 response 数据 在 servlet 调用之后截获
Filter 接口定义了三个方法: 1, void setFilterConfig(FilterConfig config); //设置 filter 的配置对象 2, FilterConfig getFilterConfig();//返回 filter 的配置对象 3, doFilter(ServletRequest
req,ServletResponse res,FilterChain chain);//执行 filer 工作。 request 全称: HttpServletRequest response 全称: HttpServletResponse
18, 当容器调用 servlet 的 destory()方法的时候, servlet 会马上销毁么? 如果当时这个 servlet 正在执行其他任务或者线程呢?
是的, 当容器调用 servlet 的 destory()方法的时候,servlet 会马上销毁,但是容器在调 用 destory() 方法之前,会等 servlet 的 service()方法结束剩余的任务。
19,我们没有写 servlet 的构造方法,那么容器是怎么创建 servlet 的实例呢? 容 器 会 自 动 为 servlet 写 一 个 无 参 的 构 造 方 法 , 并 通 过
Class.forName(className).newInstance()来创建 servlet 实例 20,页面间对象传递的方法? request,session,application,cookie
3,JSP中动态include和静态include的区别
答:动态include用jsp:include动作实现,它总是会检查所包含文件中的变化,适合用于包含动态页面,并且可以代参数
静态include用include伪码实现,并不会检查包含文件的变化,适用于包含静态页面
4,两种跳转方式分别是什么有什么区别?
答:1.forward跳转:<jsp:forward page="跳转页面地址" />
2.response跳转:response.sendRedirect("跳转页面地址");
两种跳转的区别如下:
1.forward跳转:
a.服务器端跳转,地址栏不改变;
b.执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源);
c.request设置的属性在跳转后的页面仍可以使用;d.使用<jsp:param name="参数名" value="参数值" />传递参数。
2.response跳转:a.客户端跳转,地址栏改变;b.所有代码执行完毕后跳转;c.跳转后的页面不能使用上一个页面的request属性;d.使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。
7,说说四种会话跟踪技术
答:1,page是代表与一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有任何的include指令,但是没有include动作)表示。这既包括servlet又包括被编译成servlet的jsp页面。
2,request是代表与web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件
3,session代表与用于某个web客户端的一个用户体验相关的对象和属性,一个web会话可以也经常会跨越多个客户机请求。
4,application是代表与整个web应用程序相关的对象和属性,这实质上是跨越多个web应用程序,包括多个页面、请求和会话的一个全局作用域。
9,如何防止在JSP或servlet中的输出不被browser保存在cache中? (response的学习 http协议的学习)
答:把一下脚本加入到jsp文件中即可
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
%>