Servlet-1
1.Servlet技术
a.什么是servlet
- Servlet是javaEE规范之一,规范就是接口(servlet本身即为接口)
- Servlet是javaWeb三大组件之一.(三大组件:Servlet程序,Filter过滤器,Listener监听器)
- Servlet是运行在服务器上的一个java小程序,它可以接受客户端发送过来的请求并相应数据给客户端
b.手动创建Servlet程序
- 编写一个类去实现Servlet接口
- 实现service方法,处理请求并响应数据.
- 到web.xml中去配置servlet程序的访问地址
service方法实现
@Override //实现servlet中service方法
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet 被访问了");
}
web.xml配置
<servlet>
<!--该标签给servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--该标签是servlet程序的全类名-->
<servlet-class>com.example.web_01.HelloServlet</servlet-class>
</servlet>
<!--该标签给servlet程序配置访问地址-->
<servlet-mapping>
<!--该标签告诉服务器当前配置的地址给哪个servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--该标签配置访问地址
/ 在服务器解析的时候,标识地址为http://ip:port/工程路径
/ hello标识地址为 http://ip:port/工程路径/hello (定位servlet程序用的,路径下无需有文件,相当于别名)
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
c.url地址如何定位到Servlet程序去访问
对应域名后加hello即可访问到service程序http://localhost:8080/web_01_war_exploded/hello
原理见图:(06_servlet即为web_01_war_exploded)
d.Servlet生命周期
- 执行Servlet构造器方法 (构造函数)
- 执行init初始化方法 (init)
- 执行service方法 (service)
- 执行destroy销毁 (destroy)
- 第1,2步时在第一次访问的时候创建servlet程序会调用
- 第3步service方法每次访问都会调用
- 第4步web工程停止时才会执行
e.get和post请求的分发处理
a.html
<form action="http://localhost:8080/web_01_war_exploded/hello" method="post">
<input type="submit">
</form>
service方法中对应修改(要获取getmethod方法需向下转型为httpServletRequest)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
System.out.println(method);
f.通过继承HttpServlet实现Servlet程序
- 一般在实际项目开发中,都是使用继承HttpServlet类的方法去实现Servlet程序
- 编写一个类去继承HttpServlet类
- 根据业务需要去重写doGet和doPost方法
- 到web.xml中去配置Servlet程序的访问地址
1.编写HelloServlet2继承(2、3修改web.xml与a.html类似于前面)
public class HelloServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
g.使用idea创建servlet程序
- 包右键new 点击servlet即可创建
h.整个servlet类的继承关系
2.ServletConfig类
- Servlet程序的配置信息类
- servlet程序和ServletConfig对象都是由Tomcat复杂创建,我们负责使用
- Servlet程序默认是第一次访问的时候创建;ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
a.ServletConfig类的三大作用
- 可以获取Servlet程序别名servlet-name的值
- 获取初始化参数init-param
- 获取ServletContext对象
1:System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
2:需先配置web.xml中对应的servlet
<!--servlet标签给Tomcat配置servlet程序-->
<servlet>
<!--该标签给servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--该标签是servlet程序的全类名-->
<servlet-class>com.example.web_01.HelloServlet</servlet-class>
<!--初始化参数-->
<init-param>
<!--参数名-->
<param-name>username</param-name>
<!--参数值-->
<param-value>root</param-value>
</init-param>
</servlet>
获取初始化参数init-param:
System.out.println("初始化参数username的值是:" + servletConfig.getInitParameter("username"));
3:System.out.println(servletConfig.getServletContext());
3.ServletContext类
a.什么是ServletContext
- ServletContext是一个接口,其表示Servlet上下文对象
- 一个web工程只有一个ServletContext对象实例
- ServletContext对象是一个域对象
- ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
(域对象是一个可以向map一样存取数据的对象,域指的是存取数据的操作范围)
存数据 | 取数据 | 删除数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
b.ServletContext类的四个作用
- 获取web.xml中配置的上下文参数context-param
- 获取当前的工程路径:格式:/工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
- 像map一样存取数据
1:配置web.xml
<!--context-param是上下文参数(属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<context-param>
<param-name>root</param-name>
<param-value>password</param-value>
</context-param>
读取context-param
ServletContext servletContext = getServletConfig().getServletContext();
String name = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("root");
System.out.println(name + " " + password);
2: 获取工程路径
System.out.println("当前工程路径:" + servletContext.getContextPath());
3:获取绝对路径(不太理解)
System.out.println("工程补暑的路径是 " + servletContext.getRealPath("/"));
// /被服务器解析地址为http://ip:port/工程名/ 映射到idea代码的web目录<br/>
4: 存取数据
ServletContext context = getServletContext();
context.setAttribute("key1","value1");
System.out.println("context中key1的值为:" + context.getAttribute("key1"));
注意两点:
1.一个web工程只有一个ServletContext对象实例
2.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
4. Http协议
- 协议是指双方或多方相互约定好,大家都需要遵守的规则。
a.什么是Http协议
- http协议就是指客户端和服务器之间通信时发送数据需要遵守的规则。
- http协议中的数据又叫做报文
b.请求的http协议
- 客户端给服务器发送数据叫请求(get,post)
- 服务器给客户端回传数据叫响应
1 get请求
- 请求行
(1)请求的方式 get
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1 - 请求头
key:value 组成 不同的键值对表示不同的含义
get请求http协议内容介绍:
课程详述:
from firefox:
2 post请求
- 请求行
(1)请求的方式 post
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1 - 请求头
key:value 组成 不同的键值对表示不同的含义
空行
- 请求体 --->>>发送给服务器的数据
课程详述:
2:post请求http协议内容
from firefox(请求行与请求头):
请求体:
3 常用请求头的说明
- Accept: 客户端可以接受的数据类型
- Accept-Language: 表示客户端可以接受的语言类型
- User-Agent: 表示客户端浏览器的信息
- Host: 表示请求时的服务器ip和端口号
4 区分get请求与post请求
get请求
- form表情 method=get
- a标签
- link标签引入css
- Script标签引入js文件
- img标签引入图片
- iframe引入html页面
- 在浏览器地址栏中输入地址后敲回车
post请求
- form标签 method=post
c.相应的http协议格式
- 相应行
(1)相应的协议和版本号 HTTP/1.1
(2)相应的状态码
(3)相应状态描述符 - 响应头
(1)key:value 不同的响应头有其不同的含义
空行
- 响应体 --->>> 回传给客户端的数据
详述 http协议内容:
d.常用的响应码说明
- 200: 请求成功
- 302: 请求重定向
- 404: 请求服务器已收到但数据不存在(请求地址错误)
- 500: 表示服务器已经收到请求,但是服务器内部错误(代码错误)
e.MIME类型说明
MIME是HTTP协议中数据类型。(Multipurpose Internet Mail Extensions)多功能Internet邮件扩充服务。
MIME类型格式是“大类型/小类型”,并与某一种文件的扩展名相对应。
常见MIME类型见下图:
f.Chrome/Firefox查看HTTP相应协议
- Chrome
- Firefox
见get请求from firefox图片(查看原始信息需点击原视按钮)