Servlet的介绍

JSP本质其实就是Servlet,已经编写好的JSP部署到Web容器之后,Web容器会把JSP编译成Servlet。

直接使用Servlet的缺点:Servlet开发效率非常低,特别是当使用Servlet生成表现层页面时,页面中所有的HTML标签,都需要采用Servlet的输出流来输出。而且Servlet的标准的Java类,必须由程序猿开发、修改,美工人员难以参与Servlet页面的开发;所以Servlet很难再展现层使用。

从MVC流行之后,Servlet的责任就开始明确,只是作为一个控制器来使用。不在需要生成页面标签,也不作为视图层角色使用;

Servlet是一个服务器端小程序,也是一个特殊的Java类,这个Java类必须继承HttpServlet,每个Servlet可以响应客户端的请求。

doGet:响应客户端GET请求、doPost:响应客户端POST请求、doPut:响应客户端PUT请求、doDelete:响应客户端DELETE请求

事实上,客户端请求通常只有 GET 和 POST 两种,Servlet为了响应这两种请求,必须重写doGet()和doPost();大部分时候,Servlet对所有的请求响应是完全一样的,所以,可以只重写一个方法,重写 service()方法。

HttpServlet 还包含两个方法:

init():创建Servlet实例时,调用该方法的初始化Servlet资源。

destroy():销毁Servlet实例时,自动调用该方法的回收资源。

通常无须重写 init()和 destroy()方法,除非是初始化某些资源初始化方法,回收某些资源初始化方法,例如:关闭数据库连接池;

JSP/Servlet 的生命周期

由Web容器控制,创建 Servlet 实例有两个时机,

客户端第一次请求某个 Servlet 时,系统创建该 Servlet 的实例;大部分 Servlet 都是这种 Servlet ;

Web应用启动时立即创建 Servlet 实例,即 load-on-startup Servlet

1.创建 Servlet 实例

2.Web容器调用 Servlet 的 init 方法,对 Servlet 进行初始化

3.Servlet初始化后,将一直存在于容器中,用于响应客户端请求。如果客户端发送GET请求,容器调用 Servlet 的 doGet 方法处理并响应请求;如果客户端发送POST请求,容器调用 Servlet 的 doPost 方法处理并响应请求;或者统一使用service()方法处理来响应用户请求

4.Web容器决定销毁 Servlet 时,先调用 Servlet 的 destroy 方法,通常在关闭 Web 应用之时销毁 Servlet 

load-on-startup 的 Servlet

应用启动时就创建Servlet,通常是用于 某些后台服务的Servlet,或者需要拦截很多请求的Servlet,这种Servlet通常作为基础Servlet使用,提供重要的后台服务

配置load-on-startup Servlet的方法:

1>  在web.xml 文件中通过<servlet .../>元素的 <load-on-startup .../> 子元素进行配置

2>  通过@WebServlet Annotation 的 loadOnStartUp 属性决定

<load-on-startup> 元素 和 loadOnServletStartUp 属性都只接受一个整型值,这个整型值越小,Servlet就优先实例化

举个简单的实例:

	@WebServlet(loadOnServletStartUp)
	public class TimerServlet extends HttpServlet{
		public void init( ServletConfig config ) throws ServletException{
			super.init(config);
			Timer t = new Timer( 1000,new ActionListener(){
					public void actionPerformed(ActionEvent  e){
						System.out.println(new  Date());
					}
				} );
			t.start();
		}
	}

这个Servlet没有提供service()方法,表明不能响应用户请求,所以无需配置URL映射;由于不接受用户请求,所以只能在应用启动时实例化;

在 web.xml中配置

<span style="white-space:pre">	</span><servlet>
		<servlet-name> timerServlet </servlet-name>  //名字
		<servlet-class> lee.TimerServlet </servlet-class>  //实现类
		<load-on-startup> 1 </load-on-startup><span style="white-space:pre">	</span>//相当于@WebServlet的 loadOnStartUp 属性
	</servlet>	

配置 Servlet 的时候,还可以额外的配置参数:

例如:

	@WebServl(name ="testServlet")
		,urlPatterns = { “ /testServlet ” } 
		,initParams={
			@WebInitParam( name=" driver ", value = " com.mysql.jdbc.Driver " ),
			@WebInitParam( name=" url", value = " jdbc:mysql://localhost:3306/javaee " ),
			@WebInitParam( name=" user ", value = " root " ),
			@WebInitParam( name=" password", value = " 123456 " ) } )

调用的方法为:

String driver = config.getInitParameter( "driver" ); 

在 web.xml 中配置,这个就比较常见了!

<span style="white-space:pre"></span>

	<servlet>
		<servlet-name> timerServlet </servlet-name>  //名字
		<servlet-class> lee.TimerServlet </servlet-class>  //实现类
		<load-on-startup> 1 </load-on-startup>	//相当于@WebServlet的 loadOnStartUp 属性
	</servlet>	
	<init-param>
		<param-name> driver </param-name>
		<param-value> com.mysql.jdbc.Driver </param-value>
	</init-param>	
	<init-param>
		<param-name> url</param-name>
		<param-value> jdbc:mysql://localhost:3306/javaee </param-value>
	</init-param>	

	<init-param>
		<param-name> user</param-name>
		<param-value> root </param-value>
	</init-param>	
	<init-param>
		<param-name> password </param-name>
		<param-value> 123456 </param-value>
	</init-param>	

使用 Servlet 作为控制器:

Servlet 充当控制器,,作用类似于调度员,所有用户请求都发送给 Servlet ,Servlet 调用 Model 来处理用户请求,然后由 JSP 来呈现处理结果;

Model一般由 JavaBean 充当,所有的业务逻辑、数据访问逻辑都在 Model 中实现;实际上隐藏在 Model 下面的有很多丰富的组件,例如:DAO、领域对象等;

Servlet 负责接收客户端请求,既不直接对客户端输出响应,也不处理用户请求;

Servlet 中写入一些验证登录,跳转返回的信息;

DAO 中定义一些链接数据库的接口,以及插入、删除、新增等操作;

JSP 负责页面展示的过程





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值