通过部署描述文件(web.xml)可以配置哪些功能?
【参考答案】
1、配置项目的欢迎页面。
2、配置Servlet访问URL
3、配置Web 容器、Servlet的初始化参数
4、配置错误页面,可以通过异常编号进行错误页面跳转。
5、Servlet加载优先级。
6、Web容器监听器。
7、Web请求过滤器。
8、设置会话的过期时间。
JSP与SERVLET区别
【参考答案】
JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成,擅长于流程控制;而.JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页,同时在MVC设计模式中JSP充当视图层,而Servlet位于控制层。另外JSP也是Servlet技术的扩展,本质上就是Servlet,就是JSP的另一种简易体现形式,因为JSP编译后就是一个“类servlet”,再经由JVM编译生成Java类文件来执行。
request对象的主要方法
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParametervalues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
request.getAttribute() 和request.getParameter() 有何区别?
【参考答案】
request.getAttribute()获取在请求对象中设置的属性,该方法返回对象为Object类型;
request.getParameter()方法是获取指定的请求参数值,返回值为String类型的字符串。
jsp有哪些内置对象?作用分别是什么? 分别有什么方法?
【参考答案】
答:JSP共有以下9个内置的对象:
1)request 用户端请求,此请求会包含来自GET/POST请求的参数
2)response 网页传回用户端的回应
3)pageContext 网页的属性是在这里管理
4)session 与请求有关的会话期
5)application servlet 正在执行的内容
6)out 用来传送回应的输出
7)config servlet的构架部件
8)page JSP网页本身
9)exception 针对错误网页,未捕捉的例外
具体说明如下:
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实例
JSP的常用指令
【参考答案】
共三种,分别是:
1)<%@include >用来在JSP页面包含静态资源
2)<%@taglib >用来指定JSP页面标签类型
3)<%@page >用来指定页面相关属性
页面间对象传递的方法
【参考答案】
request、session、application、Cookie等,其中比较常用的像request、Session。request主要是应用在同一请求周期内,可能进行对象或参数的共享传递。而Session主要可以应用于同一客户端会话周期内进行参数属性的共享。
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
【参考答案】
public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
String s=new String(text.getBytes(“iso8859-1”),”gb2312”)
<jsp:include>与<%@include>的区别
【参考答案】
上面两种都是在当前页面加载或包含另一页面内容,而使用<jsp:include>动作标签实现时它总是会检查所含文件中的变化,适合用于包含动态页面,并且包含的页页要符合web容器语法要求,因为被包含的页面会被web引擎进行编译和加载,同时包含时会发送http请求,所以可以携带参数。
而<%@include>是用伪码实现,定不会检查所含文件的变化,只是简单的将被加载的资源拷贝到了当前,而这种包含更多的是一种重用,不能实现参数共享。
如何实现Servlet单线程
【参考答案】
<%@ page isThreadSafe="false"%>
实现会话跟踪有哪几个方式?
【参考答案】
1、URL重写
2、隐藏表单域
3、Cookie
4、Session
Servlet对象的生命周期?
【参考答案】
当然由web容器进行创建管理的对象主要有application,session,request,page这四个级别的对象,而这4种级别的对象,根据它们自身的特点来管理所持的对象,如:request中的对象的生命周期就是在请求范围内,Session在是会话周期内,page是在当前JSP Page内,Application是在服务器启、停的周期内。
浏览器页面与Tomcat的交互过程?
【参考答案】
当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:
(1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序
(2)再由java编译器对这个Servlet进行编译,得到可执行class文件
(3)再由JVM解释器来解释执行class文件,生成向客户端发送的应答,然后发送给客户端
以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。
什么是断点续传,HTTP是否支持上传下载,原理?
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。客户端在请求时,除了其它的信息外,需要增加一条参数,告诉服务器从哪里开始传,在读取时从指定的字节数的开始位向后读取。简单示例:
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 100000; //表示从100000字节位置开始读取。
// 定位文件指针到 nPos 位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
// 从输入流中读入字节流,然后写到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);
}