Servlet规范

Servlet规范

简介

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容。

Servlet是接收请求的规范,所有的资源都是由Servlet来处理的,有一个默认的Servlet来接受web.xml(初始化配置文件)中匹配不到的资源
全局的web.xml

Servlet实现

实现步骤
1.自定义类,实现Servlet接口
2.着重实现service方法

public class HelloKitty implements Servlet {
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("HelloKitty被初始化了");
	}
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("接收到请求了");
		response.getWriter().write(new Date().toString());
	}
	public void destroy() {
		System.out.println("HelloKitty被销毁了");
	}

	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

	@Override
	public String getServletInfo() {
		return null;
	}

3.到web.xml文件中注册Servlet

<!-- 注册Servlet的类 -->
	<servlet>
		<!-- name:随意 -->
		<servlet-name>HelloKitty</servlet-name>
		<!-- 对应的Servlet的类完整类名 -->
		<servlet-class>web01.HelloKitty</servlet-class>
	</servlet>
	<!-- Servlet类对应的资源访问方式 -->
	<servlet-mapping>
		<!-- 和servlet-name一致 -->
		<servlet-name>HelloKitty</servlet-name>
		<!-- 资源路径:随意 -->
		<url-pattern>/HelloKitty</url-pattern>
	</servlet-mapping>

4.访问测试:

http://localhost:8080/web01/HelloKitty

在这里插入图片描述

Servlet生命周期

Servlet周期包括:
---------------init初始化,
--------------service
--------------destroy销毁

init()
public void init(ServletConfig config) throws ServletException {
		// ServletConfig: Servlet相关配置,一个Servlet对应一个config
		// 作用一:获得Servlet对应的name
		// <servlet-name>HelloKitty</servlet-name>
		String servletName = config.getServletName();
		System.out.println(servletName);
		// 作用二:获得Servlet自己的初始化配置信息
		String driver = config.getInitParameter("driver");
		System.out.println(driver);
		
		// Enumeration<String> names = config.getInitParameterNames();
		// 作用三:获得ServletContext对象
		ServletContext context = config.getServletContext();
		System.out.println(context);
	}
ServletContext ->AplicationContext

应用上下文:属于应用,一个应用只有一个上下文
生命周期:
-----------------创建:服务器开启
-----------------销毁:服务器关闭

获得ServletContext
ServletContext context = config.getServletContext();

通过请求对象获得Servlet

request.getServletContext();
context作用

1.获得应用名 /xx

String path = context.getContextPath();

2.获得应用的全局参数

				//web.xml中:
			  <context-param>
			  <param-name>location</param-name>
			  <param-value>com.jdbc.mysql.Driver</param-value>
			  </context-param>
String parameter = context.getInitParameter("location");

3.通过应用中资源的相对路径获得资源的绝对路径
有三个文件存放地址为:
src/a.txt
WebContent/b.txt
WEB-INF/c.txt

			String a = context.getRealPath("WEB-INF/classes/a.txt");
			String b = context.getRealPath("b.txt");
			String c = context.getRealPath("WEB-INF/c.txt");
			System.out.append(a+"\n"+b+"\n"+c);

4.域对象:存取数据使用 - Map<String,Object>
ServletContext域
域范围:参考生命周期
向域中存数据:setAttribute(key, value)
取出数据 :value getAttribute(key)
删除数据 : removeAttribute(key);

Servlet什么时候创建:
默认第一次接收请求时创建,在web.xml中添加标签< load-on-startup >10< /load-on-startup >,可以设置为服务器开启式创建
Servlet什么时候销毁:
服务器关闭销毁
在这里插入图片描述

Servlet设计模式 - 单例模式

单例模式:应用执行过程中,只有一个对象的模式,叫做单例模式
单例模式又分:懒汉模式和饿汉模式

懒汉模式 - 使用对象时,才创建对象
private static SingleDemo2 single;
//将构造器私有化,不能通过new方法获得对象
	private SingleDemo2() {
		
	}
	// 可能存在线程同步并发的问题,需要上锁
	//通过该方法获得single对象
	public static synchronized SingleDemo2 print() {
		if(single == null) {
			single = new SingleDemo2();
		}	
		return single;
	}
饿汉模式 - 类加载时,对象就已经创建好
private static SingletonDemo single = new SingletonDemo();
		//1.不能直接new,私有化构造器
		private SingletonDemo() {
			
		}
		//类加载时,对象就已经创建好 - 饿汉模式
	public static SingletonDemo print() {
		return single;
	}

HttpServlet 类 间接实现了Servlet接口

HttpServlet实现了service方法,调用了自己的sevicce方法
判断请求方式后,调用doGet/doPost

public class HelloServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().write("hello ...");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值