Javaweb开发了解前端知识七、Servlet(一)


1.Servlet技术

2.Servlet类的继承体系

3.ServletConfig

4.ServletContext

1.Servlet技术

a) 什么是Servlet

ServletjavaWeb的三大组件。Servlet程序,Listener监听器。Filter过滤器。

Servlet程序主要是运行在Tomcat服务器上。

Servlet程序的作用:接收客户端的请求。响应给客户端数据。

b) 手动实现Servlet程序

1、编写一个类去实现Servlet接口

2、实现Servlet程序中的service方法(处理业务的方法)

3、web.xml中去配置Servlet程序的访问地址

 

Servlet程序的源代码:

public class HelloServlet implements Servlet {

	/**
	 * 	Servlet程序接收客户端的请求,并且响应数据<br/>
	 *  service在每请求进来 的时候,负责 处理业务
	 */
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("HelloServlet 程序被访问了~");
	}
}

web.xml中的配置:


<!-- servlet标签用来配置一个Servlet程序 -->
	<servlet>
		<!-- 给你要配置的Servlet程序起一个名称,一般放的是类名(可以任意自定义) -->
		<servlet-name>HelloServlet</servlet-name>
		<!-- servlet-class标签是配置Servlet程序的全类名 -->
		<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
	</servlet>
	<!-- servlet-mapping是配置Servlet程序的访问地址 -->
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<!-- 
			url-paatern是配置访问地址。
			/hello 表示http://ip:port/工程名/hello
		 -->
		<url-pattern>/hello</url-pattern>
</servlet-mapping>

a) Servlet的生命周期

1、先执行Servlet的构造方法

2、执行Servlet程序的init初始化方法

 

构造方法和init初始化方法,只是第一次访问的时候由Tomcat服务器来调用,只调用一次

 

3、执行Service方法 (每次访问都会被调用)

 

4、执行destroy方法(服务器停止,停止web工程

b) 模拟GET请求和POST请求的分发

请求分为GET请求和POST请求。(一般GET请求和POST请求有可能会做不同的业务操作)

服务器如何区分 GET请求和POST请求。


/**
	 * 	Servlet程序接收客户端的请求,并且响应数据<br/>
	 *  service在每请求进来 的时候,负责 处理业务
	 */
	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
//		System.out.println("HelloServlet 程序被访问了~");
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		// getMethod返回是GET或POST,返回请求的方式
		String method = httpRequest.getMethod();
		System.out.println(method);
		if ("GET".equals(method)) {
			// 如果是GET请求,执行get业务
			doGet();
		} else if ("POST".equals(method)) {
			//执行post请求的业务操作
			doPost();
		}
		
	}
	/**
	 * 这是GET请求需要做的工作
	 */
	public void doGet() {
		System.out.println("doGet 这是GET请求");
	}
	/**
	 * 这是POST请求需要做的工作
	 */
	public void doPost() {
		System.out.println("doPost 这是POST请求");
	}

a) 通过继承HttpServlet实现Servlet程序

 

在实现的开发中,我们都是使用HttpServlet抽取类去实现Servlet程序。

1、编写一个类去继承HttpServlet

2、重写doGet方法和doPost方法

3、web.xml中去配置Servlet程序的访问地址

 

HelloServlet2

public class HelloServlet2 extends HttpServlet {

	/**
	 * doGet方法,是GET请求的时候,会自动的调用
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("这是GET请求,调用了doGet方法");
	}

	/**
	 * doPost方法,是POST请求的时候,会自动的调用
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("这是POST请求,调用了doPost方法");
	}

}

web.xml中的配置:

<servlet>
		<servlet-name>abc</servlet-name>
		<servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>abc</servlet-name>
		<!-- url-pattern 中 /ccc 表示http://ip:port/工程名/ccc
				<br/>
			 url-pattern以斜线打头,配置的地址跟在工程名的后面
			 
			 web.xml中有了修改之后一定要重启Tomcat服务器才能生效
			 
			 在浏览器地址栏中输入地址,然后敲 回车是GET请求
		  -->
		<url-pattern>/ccc</url-pattern>
</servlet-mappi

2.Servlet类的继承体系


我们在重写doGet方法或doPost方法的时候,方法体内,一定不能调用super.doGetsuper.doPost代码。否则会报405错误

3.ServletConfig

我们所有的类都是由tomcat服务器进行创建。我们负责使用。

ServletConfig类它封装了Servlet程序的配置信息。

a) ServletConfig类的三大作用

1、获取Servlet程序在web.xml中配置的名称

2、获取在web.xml中配置的初始化参数

3、获取ServletContext对象

public class ConfigServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void init(ServletConfig config) throws ServletException {
//		1、获取Servlet程序在web.xml中配置的名称
		System.out.println("在web.xml中配置的servlet-name名称:" + config.getServletName());
//		2、获取在web.xml中配置的初始化参数
		System.out.println("username初始化参数值:" + config.getInitParameter("username"));
		System.out.println("url初始化参数值:" + config.getInitParameter("url"));
//		3、获取ServletContext对象
		System.out.println( config.getServletContext() );
	}
}

web.xml中的配置:

<servlet>
    <servlet-name>ConfigServlet</servlet-name>
    <servlet-class>com.atguigu.servlet.ConfigServlet</servlet-class>
    <!-- init-param 是给Servlet程序配置一个初始化键值对参数 -->
    <init-param>
    	<!-- param-name是参数名 -->
    	<param-name>username</param-name>
    	<!-- param-value是参数值 -->
    	<param-value>root</param-value>
    </init-param>
    <!-- init-param 是给Servlet程序配置一个初始化键值对参数 -->
    <init-param>
    	<!-- param-name是参数名 -->
    	<param-name>url</param-name>
    	<!-- param-value是参数值 -->
    	<param-value>jdbc:mysql://localhost:3306/test</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ConfigServlet</servlet-name>
    <url-pattern>/configServlet</url-pattern>
  </servlet-mapping>

注意:ServletConfig是在GenericServlet类中持有的引用。当我们需要在自己自定义的Servlet程序中重写init(ServletConfig)初始化方法的时候。

一定要调用super.init(config); 否则父类中的ServletConfig就不能得到初始化

4.ServletContext

a) 什么是ServletContext?

1、ServletContext对象是一个接口。

2、ServletContext在一个web工程中只有一个对象实例(也是由Tomcat服务器创建)。

3、ServletContext是一个域对象。

什么是域对象?

域对象指的是可以像map一样存取数据的对象。

put setAttribute 保存数据

get getAttribute 获取数据

域指的保存和获取数据的范围。ServletContext对象它的数据操作范围是整个web工程。

ServletContext对象在web工程启动的时候创建。在web工程停止的时候销毁。

b) ServletContext类的四个作用

1、它可以获取在web.xml中配置的上下文参数<context-param>

2、它可以获取到当前web工程的工程名(工程路径)

3、它可以获取web工程发布到服务器上之后。文件或目录在服务器磁盘上的绝对路径。

4、它可以像map一样存取数据。

protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// b)ServletContext类的四个作用
		ServletContext ctx = getServletContext();
		// 1、它可以获取在web.xml中配置的上下文参数<context-param>
		System.out.println("上下文初始化参数password的值:"
				+ ctx.getInitParameter("password"));
		System.out.println("上下文初始化参数driverClass的值:"
				+ ctx.getInitParameter("driverClass"));
		// 2、它可以获取到当前web工程的工程名(工程路径)
		// getContextPath()获取当前工程名
		System.out.println(ctx.getContextPath());
		// 3、它可以获取web工程发布到服务器上之后。文件或目录在服务器磁盘上的绝对路径。
		// getRealPath是获取指定的路径的资源在服务器上的绝对路径。
		// / 斜线,表示 根,
		// / 斜线 在web工程中 表示到http://ip:port/工程名/ 映射到 代码的WebContent目录
		System.out.println(ctx.getRealPath("/"));
		System.out.println("WebContent/css的绝对路径是:" + ctx.getRealPath("/css"));
		System.out.println("WebContent/imgs/ludashi.jpg的绝对路径是:" + ctx.getRealPath("/imgs/ludashi.jpg"));
	}

web.xml中的配置:

 <context-param>
    <param-name>password</param-name>
    <param-value>root</param-value>
  </context-param>
  <context-param>
    <param-name>driverClass</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>

 Javaweb开发了解前端知识六、Tomcat



猜你喜欢

转载自blog.csdn.net/mxcsdn/article/details/80555955
今日推荐