1. ServletConfig 类

  • ServletConfig 对象是由Tomcat(服务器)负责创建,我们负责使用。
  • 每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。

ServletConfig 类的三个作用:

  • 可获取 Servlet 程序的别名——servlet-name的值 (xml中的配置)
  • 获取初始化参数 init-param(xml中的配置)
  • 获取ServletContext对象
<!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
<servlet>
    <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
    <servlet-name>HelloServlet</servlet-name>
    <!--servlet-class 是 Servlet 程序的全类名-->
    <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
    <!--init-param 是初始化参数-->
    <init-param>
        <!--是参数名-->
        <param-name>username</param-name>
        <!--是参数值-->
        <param-value>root</param-value>
    </init-param>
    <!--init-param 是初始化参数-->
    <init-param>
        <!--是参数名-->
        <param-name>url</param-name>
        <!--是参数值-->
        <param-value>jdbc:mysql://localhost:3306/test</param-value>
    </init-param>
</servlet>

        <!--servlet-mapping 标签给 servlet 程序配置访问地址-->
<servlet-mapping>
    <!--servlet-name 标签的作用是告诉服务器, 我当前配置的地址给哪个 Servlet 程序使用-->
    <servlet-name>HelloServlet</servlet-name>
    <!--
    url-pattern 标签配置访问地址 <br/>
    以为 /斜杠在服务器解析的时候, 表示地址为: http://ip:port/工程路径
    所以 /hello 表示:http://ip:port/工程路径/hello
    -->
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
@Override
    public void init(ServletConfig servletConfig) throws ServletException {
    	//注意:重写init方法时必须调用父类的init方法
    	super.init(servletConfig);
        System.out.println("2.init初始化方法");
        System.out.println("HelloServlet的别名是" + servletConfig.getServletName());
        System.out.println("初始化参数username的值是" + servletConfig.getInitParameter("username"));
        System.out.println("初始化参数username的值是" + servletConfig.getInitParameter("url"));
        System.out.println(servletConfig.getServletContext());
    }

若使用继承HttpServlet 类的方式实现Servlet程序,重写init方法时许调用super,否则无法获取ServletConfig。

public class HelloServlet2 extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
}

2. ServletContext 类

  • ServletContext 是 javaweb 四大域之一(是一个域对象)
  • ServletContext 是一个接口,它表示 Servlet 上下文对象
  • 一个 web 工程,只有一个 ServletContext 对象实例。
  • ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

什么是域对象? 域对象是可以像Map一样存取数据的对象。

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

	//1、获取web.xml中配置的上下文参数context-param 
	ServletContext context = getServletConfig().getServletContext();
	String username = context.getInitParameter("username"); 
	System.out.println("context-param 参数 username 的值是:" + username); 
	System.out.println("context-param 参数 password 的值是:" +
	context.getInitParameter("password")); 
	
	//2、获取当前的工程路径,格式: /工程路径
	System.out.println( "当前工程路径:" + context.getContextPath() ); 3、获取工程部署后在服务器硬盘上的绝对路径
	/** * / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录<br/> */
	System.out.println("工程部署的路径是:" + context.getRealPath("/")); 
	System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css")); 
	System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
	
	//ServletContext 像Map 一样存取数据
	System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));
	context.setAttribute("key1", "value1"); 
	System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
	<param-name>username</param-name>
	<param-value>context</param-value>
</context-param>

<context-param>
	<param-name>password</param-name>
	<param-value>root</param-value>
</context-param>

3. Http协议——请求

客户端给服务器发送数据叫请求。 服务器给客户端回传数据叫响应。

其中请求分为:

  • GET 请求
  • POST 请求

一般来说,我们发送get是希望从服务器上获取数据,而post请求需要向服务器传送数据。

GET请求格式:请求行+请求头

  1. 请求行
    (1) 请求的方式:GET
    (2) 请求的资源路径[+?+请求参数]
    (3) 请求的协议的版本号:HTTP/1.1
  2. 请求头
    key : value 组成的不同键值对

例如:

ServletResponse修改header host servlet name_servlet

POST请求格式:请求行+请求头+请求体

  1. 请求行
    (1) 请求的方式:POST
    (2) 请求的资源路径[+?+请求参数]
    (3) 请求的协议的版本号:HTTP/1.1
  2. 请求头
    key : value 组成的不同键值对
    (空行)
  3. 请求体
    即发送给服务器的数据

例如:

ServletResponse修改header host servlet name_servlet_02

常用请求头的说明

  • Accept: 表示客户端可以接收的数据类型
  • Accpet-Languege: 表示客户端可以接收的语言类型
  • User-Agent: 表示客户端浏览器的信息
  • Host: 表示请求时的服务器 ip端口号

常见GET和POST请求

GET:

  1. form标签 method=get
  2. a 标签
  3. link 标签引入 css
  4. Script 标签引入 js 文件
  5. img 标签引入图片
  6. iframe 引入 html 页面
  7. 在浏览器地址栏中输入地址后敲回车

POST : form标签 method=post

4. Http协议——响应

响应格式:响应行+响应头+响应体

  1. 响应行
    (1) 响应的协议和版本号
    (2) 响应的状态码
    (3) 响应状态描述符
  2. 响应头
    key : value
    (空行)
  3. 响应体
    即回传给客户端器的数据

例如:

ServletResponse修改header host servlet name_java_03


附常见的响应码:

200——表示请求成功

302——表示请求重定向

404——表示发送的请求服务器已经收到了,但是你要的数据不存在(请求地址错误)

500——表示服务器已经收到请求,但是服务器内部存在错误(写的代码有问题)

5. MIME类型说明

例子——Content-Type: text/HTML

  • MIME 是 HTTP 协议中的数据类型。
  • MIME 的英文全称是"Multipurpose Internet Mail Extensions" ——多功能 Internet 邮件扩充服务。
  • MIME 类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。