f.通过继承 HttpServlet 实现 Servlet程序
1.Servlet技术
a.什么是Servlet
2.Servlet->JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter程序、Listener监听器。
3. Servlet是运行在服务器上的一个java小程序,它可以(通过HTTP超文本传输协议)接收客户端发送过来的请求,并响应数据给客户端
b.手动实现Servlet程序
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--servlet标签给Tomcat配置Servlet程序 -->
<servlet>
<!--servlet-name标签 Servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.example.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签告诉服务器我当前配置的地址给哪个Servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签配置访问地址(自定义访问路径)
/ 斜杠在服务器解析的时候,表示地址为: http://ip:port/工程路径 <br/>
/hello 表示地址为: http://ip:port/工程路径/hello <br/>
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
package com.example.servlet;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.*;
public class HelloServlet implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet 被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
c.url地址如何定位到Servlet程序去访问
d.Servlet的生命周期
第一、二步,是在第一次访问的时候创建 Servlet 程序会调用
第四步,停止的时候才会执行
e.GET 和 POST 请求的分发处理
GET请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/Days2_war_exploded/hello" method="get">
<input type="submit" >
</form>
</body>
</html>
POST请求
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service === Hello Servlet 被访问了");
// 类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
// 获取请求的方式
String method=httpServletRequest.getMethod();
System.out.println(method);
// System.out.println("get请求");
// System.out.println("post请求");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service === Hello Servlet 被访问了");
// 类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
// 获取请求的方式
String method=httpServletRequest.getMethod();
if("GET".equals(method))
{
doGet();
}else if ("POST".equals(method))
{
doPost();
}
}
/**
* 做get请求的操作
*/
public void doGet()
{
System.out.println("get请求");
}
/**
* 做post请求的操作
*/
public void doPost()
{
System.out.println("post请求");
}
f.通过继承 HttpServlet 实现 Servlet程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet程序
1、编写一个类去继承 HttpServlet 类
3、到 web.xml中的配置 Servlet 程序的访问地址
package com.example.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet2 extends HttpServlet {
/**
*doGet() 在get请求时调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2 的doGet方法");
}
/**
*doPost() 在post请求时调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2 的doPost方法");
}
}
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.example.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
g.使用IDEA创建 Servlet 程序
package com.example.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class HelloServlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的doGet方法");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的doPost方法");
}
}
h.Servlet类的继承体系
2.ServletConfig类
a.ServletConfig 类的三大作用
1、可以获取Servlet程序的别名servlet-name 的值
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化");
//获取别名Servlet-name的值
System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
//获取初始化参数init-param
System.out.println("初始化参数username的值:"+servletConfig.getInitParameter("username"));
//获取ServletContext对象
System.out.println(servletConfig.getServletContext());
}
b.ServletConfig类的补充说明
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的ServletConfig 对象。
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.example.servlet.HelloServlet2</servlet-class>
<!--init-param是初始化参数-->
<init-param>
<!--是参数名-->
<param-name>username</param-name>
<!--是参数值-->
<param-value>root2</param-value>
</init-param>
</servlet>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2 的doGet方法");
//也可以使用
ServletConfig servletConfig=getServletConfig();
System.out.println(servletConfig);
//获取初始化参数init-param
System.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("重写了init初始化方法,做了一些工作");
}
3.ServletContext类
a.什么是 ServletContext?
1、ServletContext是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例
3、ServletContext 对象是一个域对象。
什么是域对象?
域对象 setAttribute() getAttribute() removeAttribute()
b. ServletContext类的四个作用
1、获取 web.xml 中配置的上下文参数context-param
4、像 Map 一样存取数据
如果在下面创建了一个css文件,可以在/后面加css->/css访问
package com.example.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class ContextServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext =getServletContext();
System.out.println(servletContext);
System.out.println("保存之前: Context1 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));
servletContext.setAttribute("key1","value1");
System.out.println("Context1 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));
}
}
package com.example.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class ContextServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext =getServletContext();
System.out.println(servletContext);
System.out.println("Context2 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));
}
}
只要是这个工程,这个Context就永远都是它
4.Http协议
a.什么是 HTTP 协议
所谓 HTTP 协议,就是客户端和服务器端发送请求的数据,需要遵守的规则,叫 HTTP 协议
b.请求的 HTTP 协议格式
请求又分为 GET请求,和 POST 请求两种
i.GET请求
1.请求行
(1) 请求的方式 GET
(3)请求的协议的版本号 HTTP/1.1
2.请求头
ii.POST 请求
1.请求行
(1) 请求的方式 POST
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2.请求头
空行
iii.常用请求头说明
Accpet-Language:表示客户端可以接受的语言类型
iv.哪些是GET请求,哪些是POST请求
GET请求有哪些:
2、a标签
POST请求有哪些:
8、form 标签 method=post
c.响应的 HTTP协议格式
1、响应行
2、响应头
空行
3、响应体 —–>>> 就是回传给客户端的数据
d.常用的响应码说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求了,但是服务器内部错误(代码错误)
e.MIME 类型说明
f.谷歌游览器如何查看HTTP协议
学习如逆水行舟,不进则退。摆烂的小吴!
原文地址:https://blog.csdn.net/Wuweihendidiao/article/details/134675326
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_23808.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!