servlet基础知识汇总

servlet需要掌握的

在这里插入图片描述

什么时候servlet

实际上servlet是一个类
在这里插入图片描述
在这里插入图片描述
本身jsp都要翻译成一个Java原文件,然后再编译成一个class文件,然后生成的结果再响应到客户端去
所以jsp页面本身就是一个类,它继承自servlet,则servlet类也就是一个Java的类

servlet体系结构

接口

不会直接实现接口,而是继承已经实现类的接口
GenericServlet是通用类,他的子类HTTPServlet
service?
在这里插入图片描述

servlet接口

在这里插入图片描述

ServletConfig

在这里插入图片描述

servlet生命周期

注意是谁实例化,一般我们直接用即可
servlet容器有Tomcat,所以是Tomcatnew一个实例
在这里插入图片描述
注意init()和destroy()只会出现一次
在这里插入图片描述

代码操作继承GenericServlet类

继承GenericServlet类,在Java Resource-src下面创建一个MyServlet类,继承GenericServlet类
在这里插入图片描述

加上初始化和销毁的方法
在这里插入图片描述

package test01;

import java.io.IOException;

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

public class MyServlet extends GenericServlet {
	
	//添加一个构造方法
	public MyServlet() {
		System.out.println("constructor");
	}
	
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		//如果service方法被调用,就会输出service
		System.out.println("service");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init");
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy");
	}
}

然后再去配置下web.xml,告诉用户访问哪个地址可以访问这个网站
工作中可能会用注解配置,但是原理要了解

<?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>test01</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>
  
  <servlet>
  <!-- name和class必写,而且顺序name要在前面,名字可以任写,但是建议是要对应的类名 -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- 要完整的类名+包名 -->
  <servlet-class>test01.MyServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,里面的name和class也是必写 -->
  <servlet-mapping>
 	 <servlet-name>MyServlet</servlet-name>
 	  <!-- 虚拟路径,随便写 -->
 	 <url-pattern>/xxx/hhh</url-pattern>
  </servlet-mapping>
</web-app>

可以配置多个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>test01</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>
  
  <servlet>
  <!-- name和class必写,而且顺序name要在前面,名字可以任写,但是建议是要对应的类名 -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- 要完整的类名+包名 -->
  <servlet-class>test01.MyServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,里面的name和class也是必写 -->
  <servlet-mapping>
 	 <servlet-name>MyServlet</servlet-name>
 	  <!-- 虚拟路径,随便写 -->
 	 <url-pattern>/xxx/hhh</url-pattern>
  </servlet-mapping>
  
    <servlet>
  <!-- name和class必写,而且顺序name要在前面,名字可以任写,但是建议是要对应的类名 -->
  	<servlet-name>MyHttpServlet</servlet-name>
  	<!-- 要完整的类名+包名 -->
  <servlet-class>test01.MyHttpServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,里面的name和class也是必写 -->
  <servlet-mapping>
 	 <servlet-name>MyHttpServlet</servlet-name>
 	  <!-- 虚拟路径,随便写 -->
 	 <url-pattern>/MyHttpServlet</url-pattern>
  </servlet-mapping>
  
  
</web-app>

然后去浏览器输入虚拟地址,但是浏览器空白,因为没有写out ,但是控制台有
在这里插入图片描述
在这里插入图片描述
浏览器每刷新一次,都输出service,但是init和destory只会出现一次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

servlet类

GenericServlet抽象类

在这里插入图片描述

HttpServlet抽象类

继承httpServlet类,必须要重写doXXX方法
在这里插入图片描述
service,是客户端判断了到底是get方法还是post方式请求,然后去调用doXXX方法

servletRequest接口

在这里插入图片描述

servletResponse接口

在这里插入图片描述
在servlet里如果获得out这个内置对象
在这里插入图片描述

package test01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MyHttpServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//out
		PrintWriter out=response.getWriter();
		out.print("<h1>MyHTTPServlet</h1>");
	}
}

out是网页输出,但是一般不需要这样做,因为跳转即可
在这里插入图片描述

HttpServletRequest接口

在这里插入图片描述
举例
在这里插入图片描述
这两句效果一样
在这里插入图片描述

servletConfig接口

在这里插入图片描述
servlet的上下文就是应用程序application了
在这里插入图片描述

如何快捷新建一个servlet类

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
此时自动生成一个servlet类

package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")//这是注解,有了注解就不要写配置文件(就是web.xml文件),否则会报错,("/TestServlet")里面可改成xxx/aaa
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//可在这里写代码
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {

//这是版本号的序列id,不写也不回报错,但是会警告,建议加上
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().print("<h1>xxxxxx</h1>");
	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

在这里插入图片描述
不加就显示警告,添加即可
在这里插入图片描述

ServletContext接口

如何使用servlet类实现登陆成功(代码操作)

为了避免乱码,写servlet时建议都写
在这里插入图片描述
???待定

获取servlet初始化参数

配置完,可以去获取这个值
使用servletConfig接口的getInitParameter()方法获取它的值
在这里插入图片描述
在这里插入图片描述
到所写的HelloServlet类里通过名字获取servlet初始化参数
在这里插入图片描述
然后在浏览器通过名字访问

定义全局配置

1、定义一个上下文的参数,实际上是保存在application对象里面的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结servlet

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章