1.首先什么是Servlet?
servlet是一个运行在服务器端的小程序,Servlet是对支持Java的服务器的一般扩充它是一种动态加载的模块,为来自Web服务器的请求提供服务。它完全运行在Java虚拟机上。由于它在服务器端运行,因此它不依赖于浏览器的兼容性。。
1.1.如何开发一个Servlet?
第一步.创建一个java类,然后继承javax.Servlet.HttpServlet
第二部.在默认的web.xml中添加如下代码(在</welcome-file-list>下)
<servlet>
<servlet-name>servlet的名字</servlet-name>
<servlet-class>servlet的类名</servlet-class>
</servlet>
<servlet-mapping>
<!--跟servlet元素中的servlet-name相同-->
<servlet-name>servlet的名字</servlet-name>
<!--定位一个servlet的URL-->
<url-pattern>servlet的URL</url-pattern>
</servlet-mapping>
1.2.什么是Servlet容器?
负责处理客户请求,把请求传给Servlet并把结果返回给客户。不同程序的容器实际实现可能有所变化,但容器与Servlet之间的接口是由Servlet API定义好的,这个接口定义了Servlet容器在Servlet上调用的方法传递个Servlet对象类。
1.3.Servlet核心类和接口有哪些,分别的作用是什么?
1.4.Servlet生命周期,原理?
(1)Servlet容器创建的一个实例
(2)容器调用该实例的init()方法
(3)如果容器对该Servlet有请求,则调用此实例的service()方法
(4)容器在销毁本实例前调用它的destory()方法
(5)销毁并标记该实例已供作为垃圾回收
原理:首先在浏览器上输入服务器端口号建立连接,然后通过http协议打包这串数据,向服务器端发送,服务器端收到这个请求和xml中的数据进行比对,然后通过servlet容器调用java内部封装好的service()方法,request接收请求处理数据,在service(request,response)方法内实地操作数据,request结束以后,通response响应,取出数据,之后用Servlet将取出的数据进行打包,发送到浏览器,浏览器响应数据包中的数据取出,生成页面。
1.5.Html表单的处理?
<form method="post" action="/Servlet/web">
<input type="submit" value="提交">
1.6.get和post的区别?
(1)get是从服务器上获取数据,post是向服务器端传送数据
(2). get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
(3). get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
(4)在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
1.7.转发和重定向定义和特点,使用方法?
a.重定向: response.sendRedirect(""),以前的request中存放的变量全部失效,并进入一个新的request作用域,客户端完成的;
b. 转发: getRequestDispatcher(""),以前的request中存放的变量不会失效,就像把两个页面拼到了一起,服务器端完成的;
2.什么是Cookie?
浏览器与服务器之间是使用HTTP进行通信,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此无论发送第一次或者是很多次请求,服务器端都当做是第一次处理,
为了弥补这个缺陷,Netscape开发了一个cookie这样有效的工具用来保存用户的个人信息。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段,当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。
2.1如何创建一个Cookie,以及生存时间和路径cookie的限制?
// new一个Cookie对象,键值对为参数
3.什么是Session?
Session中文是“会话”的意思,浏览器访问服务器时,服务器会创建一个 session 对象(该对象有一个唯一的 id, 一般称为sessionId)。服务器在缺省情况下,会sessionId 以 cookie 机制发送给浏览器。当浏览器再次访问服务器时,会将 sessionId 发送给服务器。服务器依据 sessionId 就可以找到对应的 session 对象。通过这种方式,就可以管理用户的状态。
3.1.如何获取Session?
HttpSession session = request.getSession();
不 request.getSession(true)等价。
3.2Session的常用方法?
object getAttribute(String name) 返回指定属性的属性值
Enumeration getAttributeNames() 返回所有可用属性名的枚举
String getCharacterEncoding() 返回字符编码方式
int getContentLength() 返回请求体的长度(以字节数)
String getContentType() 得到请求体的MIME类型
ServletInputStream getInputStream() 得到请求体中一行的二进制流
String getParameter(String name) 返回name指定参数的参数值
Enumeration getParameterNames() 返回可用参数名的枚举
String[] getParameterValues(String name) 返回包含参数name的所有值的数组
String getProtocol() 返回请求用的协议类型及版本号
String getScheme() 返回请求用的计划名,如:http.https及ftp等
String getServerName() 返回接受请求的服务器主机名
int getServerPort() 返回服务器接受此请求所用的端口号
BufferedReader getReader() 返回解码过了的请求体
String getRemoteAddr() 返回发送此请求的客户端IP地址
String getRemoteHost() 返回发送此请求的客户端主机名
void setAttribute(String key,Object obj) 设置属性的属性值
String getRealPath(String path) 返回一虚拟路径的真实路径
3.3Session的生命周期,以及如何删除session?
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
2. session的删除:调用Session的invalidate方法。
HttpSession ht=req.getSession(true);
//从session中删除user属性
//ht.removeAttribute(要删除的attribute的name);
ht.removeAttribute("user");
3.4.禁止Cookie以后,如何继续使用Session?
Java Servlet API 中提出了跟踪 Session 的另一种机制,假如客户端浏览器不支持 Cookie,Servlet 容器能够重写客户请求的 URL,把 Session ID 添加到 URL 信息中。HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
1) url 重写是什么?
2) 如何实现 url 重写?
a. encodeURL(String url);
b. encodeRedirectURL(String url);
4.什么是dao?
用于规范实现类! 实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类DAO类!
5.什么是过滤器?
servlet 规范当中定义的一种特殊的类,用于对 servlet 容器的调用过程进行拦截,过滤掉相应的字符。
5.1过滤器的初始化以及优先级?
Servlet 引擎先调用过滤器的 doFilter 方法初始化,依据<filter-mapping>的先后顺序依次执行。
6.什么是监听器?
servlet 规范当中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理。
6.1如何写一个监听器?
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CountListener implements HttpSessionListener{
private int count = 0;
@Override
public void sessionCreated(HttpSessionEvent arg0) {
count++;
HttpSession session = arg0.getSession();
ServletContext sctx = session.getServletContext();
sctx.setAttribute("count", count);
}
//session对象被销毁,会执行该方法
public void sessionDestroyed(HttpSessionEvent arg0) {
count--;
HttpSession session = arg0.getSession();
ServletContext sctx = session.getServletContext();
sctx.setAttribute("count", count);
}
}