Java Servlet关键点详解

Java Servlet关键点详解

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

1、理解Servlet的生命周期

Servlet引擎控制着Servlet的生命周期

Servlet的生命周期由以下三个方法进行描述(五个生命周期阶段)

1)初始化 init(ServletConfig obj)

2)服务 service(servletRequest, servletResponse)

3)销毁 destroy()

在Servlet生命过程中发生一些事的话,Servlet引擎会调用Servlet实例上的这些方法进行处理。

2、什么是ServletConfig

Servlet使用请求参数来接受来自客户端的数据,以便处理请求。

一些特定的数据必须在Servlet初始化时提高给Servlet,这些数据专门针对某些客户端,但这些数据不是客户端通过请求参数提供的。

在Servlet初始化期间,使用初始化参数提供数据给Servlet,初始化参数是在Web部署描述符(web.xml)中设置的。

Servlet在运行期间都可以访问这些参数。

从一请求到另一请求,请求参数是可以发生改变的。

从一Servlet到另一Servlet,初始化参数也是可以发生改变的。

3、什么是ServletContext

可以在一个Servlet容器中部署多个Web应用。

每一个Web应用都在单独的环境中包含了自己的资源,这个单独的环境称之为Web应用的上下文或者叫ServletContext。

属于某个Web应用上下文的资源对于另一个Web应用的上下文来说,是无效的。

一个Servlet上下文包含了零到多个Servlet,针对每一个Servlet对象,Servlet容器都为之创建了单独的ServletConfig对象。

4、在Servlet中可以定义构造方法吗

是的。在Servlet这可以定义构造方法,但是我们不能显式地调用此构造方法,因为这是Servlet容器的工作。Servlet容器会创建Servlet对象,构造方法当然也由Servlet容器调用。

5、可以在Servlet的初始化init()方法内调用destroy()方法吗?会发生什么事?

是的,可以在Servlet的初始化init()方法内调用destroy()方法。

实际上,如果在init()方法中无事可做的话,容器会自动调用destroy()方法。

如果我们重写destroy()方法,并在init()方法中调用,那么destroy()方法将会得到执行。

6、GenericServlet和HttpServlet有何不同?

1)GenericServlet

是抽象类;它独立于协议;是Servlet类的子类;支持public void service(ServletRequest req,ServletResponse res)方法。

2)HttpServlet

也是抽象类;它依赖于Http协议;是GenericServlet类的子类;支持public void service()方法以及protected void service()方法、doGet()方法、doPost()方法、doPut()方法、doDelete()方法、doHead()方法、doTrace()方法、doOptions()方法等。

7、doGet()方法和doPost()方法有何不同

1)doGet()方法

完整的方法protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException;

处理的是HTTP GET请求;

请求参数添加到URL后,通过Header信息发送;

请求参数不能被加密;

使用doGet()方法发送的最大数据长度不能超过240字节。

2)doPost()方法

完整的方法Protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

处理的是HTTP POST请求;

请求参数以表单的形式提交;

请求参数可以被加密;

使用doPost()方法发送的数据长度无限制。

8、可以在一个Servlet中调用另一个Servlet吗?

是的,可以在一个Servlet中调用另一个Servlet,也即众所周知的Servlet间的通信。

通过使用RequestDispatcher对象可以做到Servlet间的通信。

RequestDispatcher rd=request.getRequestDispatcher("other servlet url name");
rd.forward(req, res);

9、forward()方法和sendRedirect()方法有何不同?

1)forward()方法

示例代码:

request.getRequestDispathcer("example.jsp").
forward(request, response);

用于在服务器域内把请求继续转发到可用的资源上。

2)sendRedirect()方法

示例代码:

response.sendRedirect("http://www.instanceofjava.com");

用于将请求重定向到其它的资源或域上。

10、怎样在一个Servlet的上下文获取另一个Servlet的信息?

使用setAttribute()方法可以获取另一个Servlet的信息:

Context.setAttribute("name", "value")
Context.getAttribute("name")
时间: 2024-10-25 19:52:08

Java Servlet关键点详解的相关文章

Servlet配置详解

1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义). 所有部署描述符文件的顶层(根)元素为web-app.请注意,XML元素不像HTML,他们是大小写敏感的.因此,web-App和WEB-APP都

Java多线程编程详解

线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问. 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法:通过在方法声明中加入 synch

Java路径操作详解

1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个 URL绝对路径. 相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在 Servlet中,"/"代表Web应用的根目录.和物理路径的相对表示.例如:". /" 代表当前目录, &q

java移位运算符详解[转]

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按

java 代理模式详解

java 动态代理(JDK和cglib) 设计模式这东东每次看到就明白可过段时间又不能很流利的说出来,今天就用详细的比喻和实例来加深自己的理解(小弟水平不高有不对的地方希望大家能指出来). (1)代理这个词生活中有很多比如在街边卖手机卡.充公交地铁卡的小商店他们都起了代理的作用,java中的代理跟这些小店商的作用是一样的.再比如我想在淘宝上开个服装店但又没有货源怎么办,这时候我就要跟淘宝上某一卖家联系做他的代理.我跟我的商家都要卖衣服(就好比我们都继承了卖衣服的接口sellClothesInte

设计模式 - 迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解

迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包含迭代器接口(iterator interface), import java.util.Iterator; 继承(

java内存泄露详解

很多人有疑问,java有很好的垃圾回收机制,怎么会有内存泄露?其实是有的,那么何为内存泄露?在Java中所谓内存泄露就是指在程序运行的过程中产生了一些对象,当不需要这些对象时,他们却没有被垃圾回收掉,而且程序运行中很难发现这个对象,它始终占据着内存却没有发挥作用. 我举这样一个例子,在现实开发中我们需要自定义一个先进后出的栈集合,代码如下: 这个代码看起来和运行起来都没问题,但是,这里有个很隐晦的问题,就是在pop()方法里面,我们首先找到集合最后一个元素的下标,然后按照下标从集合中取出,但是这

java移位运算符详解

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移).1.左移运算符左移运算符<<使指定值的所有位都左移规定的次数.1)它的通用格式如下所示:value << numnum 指定要移位值value 移动的位数.左移的规则只记住一点:丢弃最高位,0补最低位如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则按二进制形式把所有的

Java关键字synchronized详解

Java关键字synchronized详解 博客分类: Java综合 Java多线程thread互联网制造 synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法: 通过在方法声明中