Servlet,通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。
Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
Servlet是一种比JSP更早的动态网页编程技术。在没有JSP之前,Servlet也可同时充当视图层、业务逻辑层及持久层角色。
JSP(Java Server Pages):是一种实现普通静态HTML和动态HTML混合编码的技术。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容,并且将结果以HTML(或者XML)页面的形式发送回浏览器。
一个JSP文件其实也是一个Servlet,当一个JSP文件第一次被请求时,JSP引擎把该JSP文件解释转换为Servlet。
JSP并没有增加任何本质上不能用Servlet实现的功能。在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。
主要区别:
1> JSP以文件名称为请求地址,而Servlet需要配置映射地址。
2> Servlet中没有内置对象,JSP中友内置对象。
3> JSP更偏向于页面展示,而Servlet更偏向于业务处理。
JSP九大内置对象:
1> page对象
页面对象,页面上下文对象,在当前页面有效。
2> request对象
一个请求有效。该对象封装了表单提交的信息和get传递的信息,通过调用该对象相应的方法可以获取封装的信息。
3> session对象
一个会话有效。可以完成会话期的管理。
4> appliaction对象
服务器启动后就产生了这个application对象。
5>response对象
对客户的请求做出动态的响应,向客户端发送数据。
6> cookie对象
cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户电脑上保存信息并且随后再取回它。
7>out对象
out对象时一个输出流,用来向客户端输出数据。Out对象用于各种数据的输出。
8> config对象
配置对象。
9> exception对象
在处理异常的网页中可以直接访问exception隐式对象。
Servlet的生命周期:
1> 初始化
当web应用启动时,servlet容器会调用servlet的init()方法。servlet中有俩个init()方法,一个带有参数,一个不带有参数。原因是:带参数的init()方法,需要调用父类的init()方法,否则就报错,设计者为了程序员的疏忽,而扩展了一个不带参数的init()方法。
根据启动级别的不同初始化的阶段也不相同,配置了启动级别,在服务器启动时,就初始化;如果没有配置,当第一个请求时,进行初始化。
初始化时,可以加载该servlet配置的参数,即使用标签init-param配置的参数。
servlet只初始化一次,也就是说是单例的。
2> 运行
当客户端相应请求时,调用servlet中相应的方法。
doGet()方法,处理get请求。
doPost()方法,处理post请求。
其他doDelete()、doHead()、doOptions()、doPut()和doTrace()方法,还没有应用,为扩展而预留出来的。
3> 销毁
当web应用终止时,servlet容器会调用destory()方法。然后销毁servlet对象。
package com.nice;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NiceServlet extends HttpServlet {
private static final long serialVersionUID = -2725864234106838841L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
@Override
public void init() throws ServletException {
super.init();
}
@Override
public void destroy() {
super.destroy();
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doDelete(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doHead(req, resp);
}
@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doOptions(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPut(req, resp);
}
@Override
protected void doTrace(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doTrace(req, resp);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.service(req, resp);
}
@Override
public void service(ServletRequest sreq, ServletResponse sresp)
throws ServletException, IOException {
super.service(sreq, sresp);
}
}
配置Servlet(web.xml):
NiceServlet
com.nice.NiceServlet
init_name
init_value
1
NiceServlet
/servlet
init-param: 初始化参数。
load-on-startup:启动级别。当值大于等于0,时,表示启动时,初始化该servlet。
url-pattern:servlet的请求地址,可以配置*号。如: *.do,可以匹配:前边是任何字符+"."+do的请求。