【Servlet 入门】

Servlet 是javaweb 三大组件之一

三大组件:

1 Servlet

2 filter

3listener

1.servlet-api 和 javax.servlet-api的区别

在正式查看Servlet源码前,我们首先要分清楚上述两个jar包的区别。

引用这两个构件都是 Servlet-Specificatoin Jar (Servlet 规范包),只不过因为版本升级:
3.1 之前的 Servlet API 构件叫做 servlet-api-xxx.jar
3.1 及之后的Servlet API 构件改名为 javax.servlet-api-xxx.jar

也就是说两者的区别其实就是版本上的区别,在下载源码包时注意对应的版本。

2.下载源码

据我刚才所说,下载源码时要注意相应的版本。但是从我的实际操作来看,查看servlet-api.jar,使用的是 javax.servlet-api的源码,源码能看问题也不大。
地址:http://www.java2s.com/Code/JarDownload/javax.servlet/javax.servlet-api-3.0.1-sources.jar.zip

3.搭建项目

3.1创建java web项目

Alt text

3.2查看未引入源码的HttpServlet

Alt text

3.3选中对应jar包,右键选择Properties

Alt text

3.4导入下载到的源码jar

Alt text

3.5导入成功

Alt text

点击HttpServlet 类名称

例如登录请求找的是登录servlet,注册请求找的是注册servlet,就像每一个话务员一样,每个人 负责的任务都是不一样的,

每一个servlet 负责的请求是不一样的,例如在访问百度的时候,就是大家都在访问一个功能,但是并没有出现站排的现象,所以那就是异步的并发的,会出现线程安全的问题,线程不安全的好处就是快

 

Servlet概述
特性:
单例,一个类只有一个对象;当然可能存在多个Servlet类!
线程不案例的,所以它的效率是高的!

Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。

1 什么是Servlet
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
接收请求数据(最重要的就接收请求数据,就像是话务员一样,也是先接收你的请求数据);
处理请求,
完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

2 实现Servlet的方式(由我们自己来写!)
实现Servlet有三种方式:
实现javax.servlet.Servlet接口;
继承javax.servlet.GenericServlet类;
继承javax.servlet.http.HttpServlet类(只有这一个类和http请求最接近的,用来处理http请求);
通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。
Servlet.java
publicinterfaceServlet{
public  void   init(ServletConfigconfig)throwsServletException;
public  ServletConfig     getServletConfig();
public  void   service(ServletRequestreq,ServletResponseres)
throws ServletException,IOException;
public   String    getServletInfo();
public    void    destroy();

}

一共就是五个方法

 

在创建servlet 的时候

一定要把这个导入进去,因为tomcat 当中含有servlet-api.jar.

因为servlet 不是jdk 当中的元素,所以采用的api 不是jdk,是

当继承了servlet 接口的时候就自动实现那个5种方法

package cn.itcast.web.servlet;

import java.io.IOException;
import java.util.Enumeration;

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

/*
 * 查看Servlet接口中的方法
 */
public class AServlet implements Servlet {
	/*
	 * 它也是生命周期方法
	 * 它会在Servlet被销毁之前调用,并且它只会被调用一次!
	 */
	@Override
	public void destroy() {
		System.out.println("destory()...");
	}

	/*
	 * 可以用来获取Servlet的配置信息
	 */
	@Override
	public ServletConfig getServletConfig() {
		System.out.println("getServletConfig()...");
		return null;
	}

	/*
	 * 获取Servlet的信息
	 */
	@Override
	public String getServletInfo() {
		System.out.println("getServletInfo()...");
		return "我是一个快乐的Servlet";
	}

	/*
	 * 它是生命周期方法
	 * 它会在Servlet对象创建之后马上执行,并只执行一次!(出生之后)
	 * 
	 */
	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		System.out.println("init()...");
		
		/*
		 * 获取初始化参数
		 */
		System.out.println(servletConfig.getInitParameter("p1"));
		System.out.println(servletConfig.getInitParameter("p2"));
		
		/*
		 * 获取所有初始化参数的名称
		 */
		Enumeration e = servletConfig.getInitParameterNames();
		while(e.hasMoreElements()) {
			System.out.println(e.nextElement());
		}
	}

	/*
	 * 它是生命周期方法
	 * 它会被调用多次!!!
	 * 每次处理请求都是在调用这个方法!
	 */
	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		System.out.println("service()...");
	}

}

servlet 当中的大部分方法不由我们来调用,由服务器来调用,并且servlet 当中你的对象不由我们来创建由服务器来创建现在我们用的是tomcat 那么就是由tomcat 来创建的,由tomcat 来调用,其实我们写的是片段程序,一些固定不变的是由tomcat 已经写好的,我们写的部分是变化的部分,这两部合在一起才是完整的web 应用

 

生命周期方法:


void   init(ServletConfig):它会在Servlet 对象创建之后马上执行,并只执行一次(出生之后);

voidservice(ServletRequestrequest,ServletResponseresponse):每次处理请求时都会被调用;

void  destroy():临死之前(1次):它会在Servlet 被销毁之前调用,并且它只会被调用一次

生命周期的调用过程

还有其他的两种方法

public  ServletConfig     getServletConfig(); 获取servlet的配置信息

public   String    getServletInfo(); 获取servlet 的信息,表示的对servlet 的描述信息,一般没什么用。

 

如何才能用浏览器访问servlet ,浏览器的url 和servlet 如何建立连接呢?

 

浏览器首先通过url-parttern 写的浏览器的地址,通过浏览器的地址找的Servlet的类

web.xml 配置

<servlet>
		<servlet-name>xxx</servlet-name>
		<servlet-class>cn.itcast.web.servlet.AServlet</servlet-class>
		<init-param>
			<param-name>p1</param-name>
			<param-value>v1</param-value>
		</init-param>
		<init-param>
			<param-name>p2</param-name>
			<param-value>v2</param-value>
		</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>xxx</servlet-name>
		<url-pattern>/AServlet</url-pattern>
	</servlet-mapping>

把服务器启动起来以后通过浏览器访问

http://localhost:8080/day09_1/AServlet

七月 07, 2018 1:37:46 上午 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
七月 07, 2018 1:37:46 上午 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 4090 ms
七月 07, 2018 1:37:46 上午 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
七月 07, 2018 1:37:46 上午 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.82
七月 07, 2018 1:37:48 上午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [117] milliseconds.
hell
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值