Servlet知识总结

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对象,键值对为参数  

Cookie cookie = new Cookie("key", "cookie的value值");  
     如果cookie的值中含有中文时,需要对cookie进行编码,不然会产生乱码,使用
           URLEncoder.encode("cookie的value值","utf-8");
// 设置Cookie最大生存时间,以秒为单位,负数的话为浏览器进程,关闭浏览器Cookie消失  
cookie.setMaxAge(*24*60*60);  // 一天  
// 将Cookie添加到Response中,使之生效  
response.addCookie(cookie);  //addCookie后,如果已经存在相同名字的cookie,则最新的覆盖旧的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);

}

}

Unkonw Unkonw(你不知道一样东西,你也会不知道自己不知道这样东西)
原文地址:https://www.cnblogs.com/2014-1130/p/4363584.html