-
6.通过继承 HttpServlet 实现 Servlet
-
7.如何使用idea创建Servlet程序
-
8.Servlet类的继承体系
-
二、ServletConfig类
-
- ServletConfig 类的三大作用
-
三、ServletContext 类
-
- 什么是 ServletContext?
-
什么是域对象?
-
四、HTTP协议
-
- 什么是HTTP协议?
-
请求的 HTTP 协议格式
-
- Get请求
-
Post请求
-
常用请求头的说明
-
哪些是 GET 请求,哪些是 POST 请求
-
响应的 HTTP 协议格式
-
常用的响应码说明
-
五、HttpServletRequest类
-
- HttpServletRequest 类有什么作用
-
HttpServletRequest 类的常用方法
-
- 实例
-
如何获取请求参数
-
- 实例
-
请求的转发
-
- 实例
-
base标签的作用
-
Web 中的相对路径和绝对路径
-
web 中 / 斜杠的不同意
-
六、HttpServletResponse类
-
- 两个输出流的说明
-
如何往客户端回传数据
-
请求重定向
========================================================================
运行在服务器端的小程序,他可以接受客户端发送来的请求,并响应数据给客户端
Servlet是JavaEE规范之一。规范自然就是接口
Servlet就是JavaWeb三大组件之一。三大组件分别是:Servlet、Filter、Listerner监听器
Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE)
是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件。Java EE 可以说是一个框架,也可以说是一种规范。
1、编写一个类去实现servlet接口
2、实现service方法,处理请求,并响应数据
3、到web.xml中去配置servlet程序的访问地址
实例
package com.caq.study;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println(“init初始化方法”);
// 1.可以去获取Servlet程序的别名servlet-name的值
System.out.println(“HelloServlet的别名是:”+servletConfig.getServletName());
// 2.获取初始化参数init-param
// 3.获取ServletContext对象
}
@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!”);
//ServletRequest是HttpServletRequest的父接口,我们通过强转为一个子接口类型
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请求”);
System.out.println(“get请求”);
}
// post的请求
public void doPost(){
System.out.println(“post请求”);
System.out.println(“post请求”);
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
xml配置
<?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”>
HelloServlet
com.caq.study.HelloServlet
HelloServlet
/hello
HelloServlet2
com.caq.study.HelloServlet2
HelloServlet2
/hello2
HelloServlet3
com.caq.study.HelloServlet3
HelloServlet3
/hello3
ContextServlet1
com.caq.study.ContextServlet1
ContextServlet1
/context1
里面写的很详细了,不需要怎么补充了
1、执行Servlet构造器方法
2、执行init初始化方法
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
3、执行 service 方法
第三步,每次访问都会调用。
4、执行 destroy 销毁方法
第四步,在 web工程停止的时候调用
实例和标题2代码一致,我都写在一块了
下面补充一点知识
Get请求和Post请求的区别?
GET请求一般用去请求获取数据
POST一般作为发送数据到后台时使用
GET请求也可传参到后台,但是其参数在浏览器的地址栏的url中可见,所以隐私性安全性较差,且参数长度也是有限制的
POST请求传递参数放在Request body中,不会在url中显示,比GET要安全,且参数长度无限制
GET请求比较常见的方式是通过url地址栏请求
POST最常见是通过form表单发送数据请求
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址
package com.caq.study;
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方法”);
}
/**
-
在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方法”);
}
}
xml文件在第一个实例中
===============================================================================
ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的ServletConfig 对 象。
1、可以获取 Servlet 程序的别名 servlet-name 的值
2、获取初始化参数 init-param
3、获取 ServletContext 对象
=================================================================================
1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
域对象,是可以像 Map 一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,整个 web 工程
package com.caq.study;
import javax.servlet.ServletContext;
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 ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取context对象
ServletContext contest = getServletContext();
contest.setAttribute(“key1”,“value1”);
System.out.println(“Context1中获取域数据key1的值是:”+contest.getAttribute(“key1”));
System.out.println(“Context1中获取域数据key1的值是:”+contest.getAttribute(“key”));
System.out.println(“Context1中获取域数据key1的值是:”+contest.getAttribute(“key”));
System.out.println(“Context1中获取域数据key1的值是:”+contest.getAttribute(“key”));
}
}
=======================================================================
协议就是指双方或多方规定好的,大家都需要遵守的规则,就叫协议
HTTP协议就是客户端和服务器通信时,发送数据要遵守的规则!
Http协议中的数据又叫报文
客户端给服务器发送数据叫请求。 服务器给客户端回传数据叫响应。
Get请求
请求又分为 GET 请求,和 POST 请求两种
放一个Get请求的HTTP协议内容
Post请求
常用请求头的说明
Accept: 表示客户端可以接收的数据类型
Accpet-Languege: 表示客户端可以接收的语言类型
User-Agent: 表示客户端浏览器的信息
Host: 表示请求时的服务器 ip 和端口
GET请求有哪些:
1、form标签method=get
2、a标签
3、link标签引入css
4、Script标签引入js 文件
5、img标签引入图片
6、iframe引入 html页面
7、在浏览器地址栏中输入地址后敲回车
POST请求有哪些:
8、form标签method=post
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在**(请求地址错误)**
500 表示服务器已经收到请求,但是服务器内部错误**(代码错误)**
因为我的代码里出现了除0的操作所以会报500
====================================================================================
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。
getRequestURI() 获取请求的资源路径
getRequestURL() 获取请求的统一资源定位符(绝对路径)
注意区分两者
getRemoteHost() 获取客户端的ip 地址
getHeader() 获取请求头
getParameter() 获取请求的参数
getParameterValues() 获取请求的参数(多个值的时候使用)
getMethod() 获取请求的方式GET 或POST
setAttribute(key, value) ; 设置域数据
getAttribut
必看视频!获取2024年最新Java开发全套学习资料 备注Java
e( key); 获取域数据
getRequestDispatcher() 获取请求转发对象
实例
package com.caq.study;
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 RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的资源路径
System.out.println(“URI=>”+req.getRequestURI());
//获取请求的统一资源定位符(绝对路径)
System.out.println(“URI=>”+req.getRequestURL());
System.out.println(“客户端地址==>”+req.getRemoteHost());
System.out.println(“请求投User-Agent==》”+req.getHeader(“User-Agent”));
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
BAT面试经验
实战系列:Spring全家桶+Redis等
其他相关的电子书:源码+调优
面试真题:
javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的资源路径
System.out.println(“URI=>”+req.getRequestURI());
//获取请求的统一资源定位符(绝对路径)
System.out.println(“URI=>”+req.getRequestURL());
System.out.println(“客户端地址==>”+req.getRemoteHost());
System.out.println(“请求投User-Agent==》”+req.getHeader(“User-Agent”));
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
[外链图片转存中…(img-BAY3niyK-1716451026957)]
BAT面试经验
实战系列:Spring全家桶+Redis等
[外链图片转存中…(img-qeUmGkly-1716451026958)]
其他相关的电子书:源码+调优
[外链图片转存中…(img-4VuxRy2S-1716451026958)]
面试真题:
[外链图片转存中…(img-PBYiZgNd-1716451026959)]
[外链图片转存中…(img-lMC3ql0X-1716451026959)]