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) 请求的方式:GET
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号:HTTP/1.1 - 请求头
key : value 组成的不同键值对
例如:
POST请求格式:请求行+请求头+请求体
- 请求行
(1) 请求的方式:POST
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号:HTTP/1.1 - 请求头
key : value 组成的不同键值对
(空行) - 请求体
即发送给服务器的数据
例如:
常用请求头的说明
- Accept: 表示客户端可以接收的数据类型
- Accpet-Languege: 表示客户端可以接收的语言类型
- User-Agent: 表示客户端浏览器的信息
- Host: 表示请求时的服务器 ip 和端口号
常见GET和POST请求
GET:
- form标签 method=get
- a 标签
- link 标签引入 css
- Script 标签引入 js 文件
- img 标签引入图片
- iframe 引入 html 页面
- 在浏览器地址栏中输入地址后敲回车
POST : form标签 method=post
4. Http协议——响应
响应格式:响应行+响应头+响应体
-
响应行
(1) 响应的协议和版本号
(2) 响应的状态码
(3) 响应状态描述符 -
响应头
key : value(空行)
-
响应体
即回传给客户端器的数据
例如:
附常见的响应码:
200——表示请求成功
302——表示请求重定向
404——表示发送的请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500——表示服务器已经收到请求,但是服务器内部存在错误(写的代码有问题)
5. MIME类型说明
例子——Content-Type: text/HTML
- MIME 是 HTTP 协议中的数据类型。
- MIME 的英文全称是"Multipurpose Internet Mail Extensions" ——多功能 Internet 邮件扩充服务。
- MIME 类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。