Day91.Servlet基本内容① -Servlet、jsp、EL表达式与JSTL标签库
Servlet基本内容①1. Servlet 技术a.什么是Servlet1. Servlet是JavaEE规范之一。规范就是 接口2. Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。3. Servlet是运行在服务器上的一个Java小程序,他可以接收客服端送过来的请求,并响应数据给客户端。.b.手动实现Servlet程
Servlet基本内容①
1. Servlet 技术
a.什么是Servlet
1. Servlet是JavaEE规范之一。 规范就是 接口
2. Servlet是JavaWeb三大组件之一。 三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
3. Servlet是运行在服务器上的一个Java小程序,他可以接收客服端送过来的请求,并响应数据给客户端。
.
b.手动实现Servlet程序
1. 编写一个类去实现Servlet接口
2. 实现service方法,处理请求,并响应数据
3. 到web.xml中配置servlet程序的访问地址
.
c.Servlet 程序的示例代码:
- 常见错误1:url-pattern 中配置的路径没有以斜杠打头。
.
- 常见错误2:servlet-name 配置的值不存在:
<servlet>标签和<servlet-mapping>标签的<servlet-name>标签的内容不一致
.
- 常见错误3:servlet-class 标签的全类名配置错误:
.
d.url地址到Servlet程序的访问原理
.
e.Servlet 的生命周期
1. 执行Servlet构造器方法
2. 执行init()初始化方法
3. 执行service()方法
4. 执行destroy()销毁方法
说明:
第一、第二步,是在第一次访问时,创建Servlet程序会调用
第三步,都会调用service方法
第四步,在web工程停止的时候调用
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 构造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
service()方法是专门用来处理请求和响应的
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service == Hello Servlet 被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 destroy销毁方法");
}
}
f.GET 和 POST 请求的分发处理
public class HelloServlet implements Servlet {
/*
service()方法是专门用来处理请求和响应的
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service == Hello Servlet 被访问了");
//类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
getmethod();
}else if ("POST".equals(method)){
getmethod();
}
}
public void getmethod(){
System.out.println("get请求");
System.out.println("get请求");
System.out.println("get请求");
}
public void postmethod(){
System.out.println("post请求");
System.out.println("post请求");
System.out.println("post请求");
}
//省略getServletInfo、destroy、getServletConfig、init、HelloServlet方法
}
.
g.通过继承 HttpServlet 实现 Servlet 程序
一般在实际开发项目中,都是使用继承HttpServlet类的方式去实现Servlet程序。
- 编写一个类去继承HttpServlet类
- 根据业务需要重写doGet或doPost方法
- 到web.xml中配置Servlet程序的访问地址
Servlet 类的代码:
public class HelloServlet2 extends HttpServlet {
//doGET()方法 在GET请求的时候调用
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet()方法");
}
//doPost()方法 在Post请求的时候调用
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPOST()方法");
}
}
web.xml 中的配置
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.achang.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
.
h.使用 IDEA 创建 Servlet 程序
- 菜单:new->Servlet 程序
- 配置 Servlet 的信息:
自动在文件夹下生成HelloServlet3类与doPost()、doPost
public class HelloServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("helloservlet3的doPost方法");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("helloservlet3的doGET方法");
}
}
自动在web.xml文件下生成<servlet>标签,
然后自己创建servlet-mapping指定url-pattern和url-pattern即可
<servlet>
<servlet-name>HelloServlet3</servlet-name>
<servlet-class>com.achang.servlet.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<url-pattern>HelloServlet3</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
.
i.Servlet类的继承体系
.
2. ServletConfig类
ServletConfig类从类名上来看,就知道是Servlet程序的配置信息类
Servlet程序和ServletConfig对象都是由Tomcat服务器负责创建,我们负责使用
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时就创建一个对应的ServletConfIg对象
.
a.ServletConfig类的三大作用
- 可以获取Servlet程序的别名servlet-name的值
- 获取初始化参数init-param
- 获取ServletConfig对象
- web.xml 中的配置:
<!-- servlet标签给Tomcat服务器配置Servlet程序 -->
<servlet>
<!-- servlet-name标签 是给Servlet程序起一个别名 (一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class标签 是Servlet程序的全类名 -->
<servlet-class>com.achang.servlet.HelloServlet</servlet-class>
<!--init-param 是初始化参数-->
<init-param>
<!--参数名-->
<param-name>username</param-name>
<!--参数值-->
<param-value>root</param-value>
</init-param>
<init-param>
<!--参数名-->
<param-name>url</param-name>
<!--参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
- Servlet 中的代码:
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
// 1. 可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是: "+ servletConfig.getServletName());
// 2. 获取初始化参数init-param
System.out.println("初始化参数username的值是: "+servletConfig.getInitParameter("username"));
System.out.println("初始化参数username的值是: "+servletConfig.getInitParameter("url"));
// 3. 获取ServletContext对象
System.out.println(servletConfig.getServletContext());
}
.
3. ServletContext类
a.什么是ServletContext?
1.ServletContext是一个接口,它表示Servlet上下文对象
2.一个web工程,只有一个ServletContext对象实例
3.ServletContext对象是一个域对象。
4.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
- 什么是域对象?
域对象,是可以像Map一样存取数据的对象。叫域对象
这里的域指的是,存取数据的操作范围,整个web工程。
存数据 取数据 删数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute()
.
b.ServletContext类的四个作用
1.获取web.xml中配置的上下文参数context-param
2.获取当前的工程路径, 格式:/工程路径
3.获取工程部署后在服务器磁盘上的绝对路径
4.像Map一样存取数据
ContextServlet演示代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取web.xml中配置的上下文参数context-param
ServletContext servletContext = getServletConfig().getServletContext();
String username = servletContext.getInitParameter("username");
System.out.println("context-param参数username的值是: "+username);
System.out.println("context-param参数password的值是: "+servletContext.getInitParameter("password"));
// 2.获取当前的工程路径, 格式:/工程路径
System.out.println("当前工程路径: "+servletContext.getContextPath());
// 3.获取工程部署后在服务器磁盘上的绝对路径
/*
/ 斜杆被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的webapp目录
*/
System.out.println("工程部署的路径是: "+servletContext.getRealPath("/"));
}
web.xml 中的配置:
<!--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>
- ServletContext 像 Map 一样存取数据:
Context1Servlet代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
ServletContext context = getServletContext();
System.out.println(context);//org.apache.catalina.core.ApplicationContextFacade@77aaf677
System.out.println("保存之前: context中获取数据key1的value值是: "+context.getAttribute("key1"));//null
context.setAttribute("key1","value1");
System.out.println("Context1Servlet中获取数据key1的value值是: "+context.getAttribute("key1"));//key1
}
Context2Servlet代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
ServletContext context = getServletContext();
System.out.println(context);//org.apache.catalina.core.ApplicationContextFacade@11f32f19
System.out.println("Context2Servlet中获取数据key1的value值是: "+context.getAttribute("key1"));//key1
}
不管是Context1Servlet还是Context2Servlet的context地址值为: org.apache.catalina.core.ApplicationContextFacade@11f32f19
表示它是在web工程销毁前都是一个对象,一个web工程就一个。
.
4. Http协议
a.什么HTTP协议
- 什么是协议?
协议,指双方,或多方,相互约定,大家都需要遵守的规则,叫协议。
HTTP协议,指客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议
HTTP协议中的数据又叫报文。
.
b.请求的HTTP协议格式
客户端给服务器发送数据叫 请求。
服务器给客户端回传数据叫 响应。
请求又分为GET请求,和POST请求两种
①GET请求
1. 请求行
① 请求的方式 GET
② 请求的资源路径[+?+请求参数]
③ 请求的协议版本号 HTTP/1.1
2. 请求头
key:value 组成 不同的键值对,表示不同的含义。
.
②POST请求
1. 请求行
① 请求的方式 POST
② 请求的资源路径[+?+请求参数]
③ 请求的协议版本号 HTTP/1.1
2. 请求头
① key:value 不同的请求头,有不同的含义
**空行** ----------------
3. 请求体 ---> 就是发送给服务器的数据
.
③常用请求头的说明
Accept: 表示客户端可以接受的数据类型
Accept-Language: 表示客户端可以接受的语言类型
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
.
c.响应的HTTP协议格式
1. 响应行
① 响应的协议和版本号 HTTP/1.1
② 响应状态码
③ 响应状态描述符
2. 响应头
① key:value 不同的相应头,有其不同的含义
**空行**----------------
3. 响应体 ---> 回传给客户端的数据
.
d.常用的响应码说明
200 表示数据请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求,但是服务器内部(代码)错误
.
e.MIME类型说明
MIME是HTTP协议中的数据类型。
MIME 的英文全称是"MultipurposeInternetMailExtensions" 多功能 Internet 邮件扩充服务。
MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应。
.
f.谷歌浏览器如何查看 HTTP 协议
.
g.火狐浏览器如何查看 HTTP 协议
学习图片资源内容来源:
B站:尚硅谷2020最新版JavaWeb全套教程,java web零基础入门完整版
https://www.bilibili.com/video/BV1Y7411K7zz?
上为个人学习笔记
感谢分享
更多推荐
所有评论(0)