javaweb-Servlet

1.Servlet的定义

servlet(server applet) 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet

tomcat是servlet的一个容器
访问静态还是动态都是要servlet的

2.servlet的简易访问模型

 

上面的是静态资源,直接访问的,而servlet先拿到服务器的请求,分析请求后处理把结果从库里取出来翻译成html代码(静态资源)在发送给客户端

3.Servlet入门实例

step1. 创建一个动态JavaWeb项目,src目录下创建一个servlet类-----HelloServlet,实现接口 Servlet

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{
	//只被调用一次,第一次请求Servlet时,创建Servlet的实例,调用构造器
	public HelloServlet() {
		System.out.println("构造器 HelloServelt()...");
	}
	
	//该方法用于初始化Servlet,就是把该Servlet装载入内存
	//只被调用一次,在创建好实例后立即被调用
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("初始化方法 init()...");
	}
	
	//被多次调用,每次请求都会调用service方法。实际用于响应请求的
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("执行方法主体 service()...");
	}
	//只被调用一次,在当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servlet所占用的资源
	@Override
	public void destroy() {
		System.out.println("servlet 销毁时调用方法 destroy()...");
	}

	@Override//可以先忽略,不常用
	public ServletConfig getServletConfig() {
		return null;
	}

	@Override//可以先忽略不常用
	public String getServletInfo() {
		return null;
	}


}

快捷键的使用ctrl+1添加未实现的方法

web.xml中ctrl选中全限定名就会自动跳转到HelloServlet里

 

step2.在 web.xml 文件中配置上面创建的 HelloServlet 映射关系(给servlet这个动态资源一个访问路径,才可以访问)

<!--给创建的 Servlet 配置映射关系  -->
<!注册servlet到项目中 -->
  <servlet>
<!--servlet-name给要注册的servlet起名字,与类名一样最好 -->
  	<servlet-name>helloServlet</servlet-name>
  	<servlet-class>com.ys.servlet.HelloServlet</servlet-class>
                	<!--servlet的完整名称-->  
  </servlet>
  
  <servlet-mapping>
<!--当前那个servlet分配路径,与上面的那个name是有区别 -->
  	<servlet-name>helloServlet</servlet-name>
  				<!-- 与上面配置的 servlet-name 名字要对应,一个servlet可以有多个 servlet-mapping  -->
  	<url-pattern>/hello</url-pattern>  
                <!--访问路径(相对于项目的路径)--> 
  </servlet-mapping>

step3.把项目部署到tomcat上

右键->Add an的Remove->选择HelloServlet->finish

启动tomcat

输入访问路径http://localhost/HelloServlet/hello

 

4.Servlet生命周期

我们通过上面的实例,可以看到也就是只有第一次才会执行 构造器和 init() 方法,后面每次点击都只调用 service() 方法。那这是为什么呢?

 

上面这幅图可以这样理解:

  1、客户端向 Web 服务器发送请求,服务器查询 web.xml 文件配置。根据请求信息找到对应的 Servlet。

  2、Servlet 引擎检查是否已经装载并创建了该 Servlet 的实例对象,如果有,则直接执行Y,否则执行N,

  3、Web 服务器加载 Servlet,并调用 Servlet 构造器(只会调用一次),创建 Servlet 的实例对象。并调用 init() 方法,完成 Servlet 实例对象的初始化(只会调用一次)。

  4、Web 服务器把接收到的 http 请求封装成 ServletRequest 对象,并创建一个 响应消息的 ServletResponse 对象,作为 service() 方法的参数传入。(每一次访问都会调用一次该方法)

  5、执行 service() 方法,并将处理信息封装到 ServletResponse 对象中返回

  6、浏览器拆除 ServletResponse 对象,形成 http 响应格式,返回给客户端。

  7、Web 应用程序停止或者重新启动之前,Servlet 引擎将卸载 Servlet实例,并在卸载之前调用 destory() 方法

5.tomcat容器等级

 

6.servlet相关对象-servletconfig(接口)

在Servlet 的配置文件中,可以用一个或多个<init-param>标签为servlet配置一些初始化参数。

当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给Servlet。进而,程序员通过Servlet对象得到当前servlet的初始化参数信息。

获取ServletConfig中初始化信息步骤:

1 . 创建私有变量:

private ServletConfig config = null;(扩大作用域,原来的只是作为参数传递,通过全局变量就最终可以返回这个对象)

2、重写init方法,令 this.config = config,从而获取ServletConfig对象

3、获取<init-param>中的配置信息

/获取初始化参数
String value1 = this.config.getInitParameter("x1");
//获得配置文档中<inti-param>标签下name对应的value
String value2 = this.config.getInitParameter("x2");
//获取所有初始化参数
Enumeration e = this.config.getInitParameterNames();
while(e.hasMoreElements()){
      String name = (String) e.nextElement();
      String value = this.config.getInitParameter(name);
      System.out.println(name+"="+value);
}

 

4、开发中ServletConfig的作用有:

   获取字符集编码:

String charset = this.config.getInitParameter("charset");

  获得数据库连接信息:

String url = this.config.getInitParameter("url");
String username = this.config.getInitParameter("username");
String password = this.config.getInitParameter("password");

  获得配置文件:

String configFile = this.config.getInitParameter("config");

7.GenericServlet讲解(优化了解)

实现了Servlet接口,并帮我们做了一些常用操作
1.init方法 妥善的保存config对象并实现getServletInfo,getServletConfig,
2.增加一个空参init方法,供开发人员初始化,为了防止开发人员重写 原生init方法
3.service方法空实现=> 声明成抽象(强制开发人员实现该方法)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值