Servlet-请求、响应及JSP基础

Servlet-请求、响应及JSP基础

1 生命周期

1.1 创建Servlet

访问到对应地址的时候创建

1.2 执行init方法

可以执行一些初始化操作

1.3 Service()->doGet()/doPost()

1.4 destroy()

销毁的时候执行,可以进行释放资源操作

1.5 注意

如果希望容器一启动就创建servlet可以在web.xml配置

<load-on-startup>1</load-on-startup>

或者通过注解

@WebServlet(name = "student", urlPatterns = "/stu", loadOnStartup = 1)

2 Request

2.1 请求格式

可以在浏览器的网络(network)中查看请求的信息

请求的基本信息+请求头+请求体(post请求才有)

image-20210729201701422

image-20210729201724930

image-20210729201745240

2.2 请求方式

2.2.1 Get请求

一般用于获取数据
请求参数在地址上
参数有大小限制(具体限制,由浏览器而定)

2.2.2 Post请求

一般用表单提交(一般用于新建)
请求参数可以在地址上也可以在请求体里
参数大小理论上没有限制

2.2.3 Delete请求

一般用于删除数据

2.2.4 Put请求

一般用于更新

2.2.5 Options请求

涉及到跨域的时候会用到
跨域请求的时候浏览器会先发一次嗅探请求,来询问服务器器是否允许跨域,这个嗅探请求的请求方式就是OPTIONS

2.3 常用API

request.getMethod()
request.getContextPath() 获取请求前缀
request.getParameter() 获取请求参数
reqeust.getRemoteHost() 获取远程的ip
request.getRequestURI() 获取请求地址
request.getHeader() 获取请求头数据

2.4 Post请求的发送和处理

2.4.1 发送

发送post请求可以通过postman进行发送,postman可以模拟各种类型的http请求,可以帮助我们进行接口测试

2.4.2 发送普通表单请求

servlet获取数据可以通过req.getParameter()获取参数

2.4.3 针对Json请求
2.4.3.1 发送

image.png

2.4.3.2 接收
BufferedReader bf = req.getReader();
StringBuilder stringBuilder = new StringBuilder();
while (true) {
	String line = bf.readLine();
	if (line == null) {
		break;
		}
	stringBuilder.append(line);
	}
System.out.println(stringBuilder.toString());
2.4.3.3 处理

fastjson是阿里提供的一个json处理的类库,可以处理Json数据

引入依赖。(通过maven仓库查找)
使用JSONObject对json字符串进行格式化
用起来和HashMap类似

2.5 Request域

可以把一些数据放到request域中,这些数据就可以在request请求中所共享
setAttribute()
getAttribute()
removeAttribute()

2.6 转发

可以通过request转发到别的内部资源,在转发的过程中同属于一个request域的

这种转发不会改变,浏览器上的地址的
只能转发到内部资源
转发属于一次请求,所以它们之间共享一个request域的

req.getRequestDispatcher("/stu").forward(req, resp);

3 Response

3.1 HTTP响应

3.1.1 响应头

Content-Type
Location 在状态码是302的时候,通过这个属性进行重定向
Set-Cookie: 服务端可以向客户端写入一些数据

3.1.2 响应体

服务端给客户端的响应

3.2 响应状态码

2xx

​ 200 请求成功

3xx

​ 302 进行重定向。重定向的地址是由响应头的Location决定的
​ 304 读取缓存

4xx 请求有问题

​ 400 参数服务器不能理解
​ 401 没有登录
​ 403 登录了但是没有权限
​ 404 页面未找到。 请求地址写错了
​ 405 请求方式不被允许 如:要求是get发送的是post
​ 415 请求体格式不对。 如:要求是json格式的请求题,但是传了表单过去

5xx 服务端有问题

​ 500 服务器内部错误
​ 502 服务过载

3.3 常用API

setStatus() 返回的状态码
setHeader()设置响应头
setContentType() 响应体的类型
getWriter() 设置相应体

3.4 界面重定向

原理为设置状态为302 设置location为跳转的地址

 resp.sendRedirect(req.getContextPath()+"/stu/manager");

注意地址:

绝对路径
协议://ip:端口号+地址
需要拼接项目的前缀
相对路径
去掉最后一个斜杠后面的内容加上地址

和forward跳转对比

重定向的特点:redirect
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次请求。不能使用request对象来共享数据

转发的特点:forward
转发地址栏路径不变
转发只能访问当前服务器下的资源
转发是一次请求,可以使用request对象来共享数据

4 ServletContext

4.1 概念

代表整个web应用,可以和程序的容器(服务器)来通信

4.2 基本使用

// 通过this.getServletContext() 获取
// 通过req.getServletContext() 
// 通过setAttribute 设置属性
this.getServletContext().setAttribute("list", new ArrayList<String>());
this.getServletContext().getAttribute("list");
this.getServletContext().removeAttribute("list");

在整个应用作用域中共享数据

5 数据初始化

5.1 设置Servlet初始化数据

通过配置文件

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>com.tledu.web_01.HelloServlet</servlet-class>
	<init-param>
		<param-name>initName</param-name>
		<param-value>helloworld</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

通过注解

@WebServlet(name = "student", urlPatterns = "/stu", loadOnStartup = 1,initParams = {
        @WebInitParam(name = "kkk",value = "对应的值")
})

5.2 获取数据

// 通过servletConfig获取
this.getServletConfig().getInitParameter("kkk")

6 JSP基础

6.1 作用

jsp本质上就是servlet
servlet编写前端代码不方便,在这里可以通过jsp进行前端代码编写,jsp专门编写前端代码
之前servlet前端和业务逻辑耦合在一起,不容易维护,这里通过jsp将业务逻辑和展示分开,方便维护

6.2 基础语法

<%! %>
在这个区域里编写代码是直接在servlet类里编写代码
可以在这里定义成员变量和方法
<%%>
在这里编写是在service()方法中编写
这里可以定义局部变量
<%=%>
可以直接输出到界面上
<%@ page %>
界面配置
contentType 页面类型
language 语言
errorPage 报错页面
import 可以导入别的包

6.3 两种包含

提取出来通用的代码
<%@include file=“include.jsp”%>
直接把对应的内容合并过来,最终编译成一个class文件
<jsp:include page=“include.jsp” />
分别编译,通过动态方式将对应的内容加载过来

6.4 九大内置对象

pageContext
request
session
application
response
page
config
out
exception

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值