Selvlet

Web资源

  1. 在http协议当中,规定了请求和响应双方,客户端和服务器端。与web相关的资源,有两种分类
    1. 静态资源   html、css、js
    2. 动态资源   servlet/jsp

Servlet

  1. 其实就是一个java程序,运行在我们的web服务器上,用于接受和响应客户端的http请求
  2. 更多的是配合动态资源来做。当然静态资源也需要使用到servlet,只不过tomcat里面已经定义好了一个DeafaultServlet

入门实现HelloServlet

  1. 写一个Web工程,要有一个服务器tomcat
  2. 运行测试Web工程
    1. 新建一个类,实现Servlet接口
    2. 配置Servlet   用意:告诉服务器,我们的应用有这么写个servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HelloWeb0</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
<!--   向tomcat报告,我这个应该里有这个servlet,名字叫做HelloServlet,具体的路径是/HelloWeb/src/servlet/HelloServlet.java -->
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>
  
<!--   注册servlet的映射。selvletName:找到上面注册的具体的servlet,url-pattern:在地址栏上的path -->
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/a</url-pattern>
  </servlet-mapping>
</web-app>
package 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{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("HelloServlet.....");
	}

}

执行过程

Servlet的通用写法

Servlet(接口)-------GenericServlet---------HttpServlet(用于处理http的请求)

定义一个类,继承HttpServlet,复写doGet和doPost

package servlet;


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet02 extends HttpServlet{
	
	//Get请求会来这个方法
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
		System.out.println("Get.....");
	}
	
	//Post请求回来这个方法
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
		System.out.println("Post.....");
	}
	
}

生命周期

  1. 从创建到销毁的一段时间

生命周期方法

  1. 从创建到销毁所调用的方法   3个看代码
package 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 HelloServlet03 implements Servlet{
	
	//1.在创建该servlrt的实例时,就执行该方法
	//一个servlet只会初始化一次,init方法只会执行一次
	//默认情况下是,初次访问该servlet,才会创建实例
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("HelloServlet03初始化.......");
	}
	
	
	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}
	
	//2
	//只要客户端来了一个请求,就执行该方法
	//该方法一次请求执行一次
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("HelloServlet03  service....");
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
	
	//3.servlet销毁的时候,就会执行该方法
	/*
	 * 1.该项目从tomcat移除
	 * 2.正常关闭tomcat就会执行  shutdown.bat
	 */
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("HelloServlet03  destory....");
	}
	
}

doGet和doPost 不算生命周期方法。所谓的生命周期是指,从对象的创建到销毁一定会执行的方法,但是这两个方法不一定会执行。

Servlet创建实例提前

  1. 默认情况下,只要在初次访问servlrt的时候,才会执行init方法。
  2. 那么这个时候初次访问,可能会在init中逗留太多时间
  3. 解决:在配置的时候,使用load-on-startup元素来指定,给指定的数字越小,启动越早。一般不写负数,从2开始

ServletConfig

通过这个对象,可以获取servlet在配置的时候的一些信息

package servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServletConfig extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//ServletConfig  可以获取servlet在配置的一些信息
		
		//得到servlet配置对象,专门用于在配置servlet的信息
		ServletConfig config=getServletConfig();
		
		//获取的是配置servlet里面servlet-name的文本内容
		String servletName=config.getServletName();
		System.out.println("servletName="+servletName);
		
		String address=config.getInitParameter("address");
		System.out.println("address="+address);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
}

扫描二维码关注公众号,回复: 3678650 查看本文章

为什么需要有这个????

  1. 加入我们自己开发的一些应用,要使用到了一些技术,或者一些代码,我们不会。但是有人写出来,他的代码放在了自己的servlrt类里面。
  2. 刚好这个servlet里面需要一个数字或者叫做变量值,但是这个值不能是固定了。所以要求使用到这个servlei的公式,在注册servlet的时候,必须在web.xml里面声明init-params
  3.  

猜你喜欢

转载自blog.csdn.net/weixin_42230478/article/details/81414360