servlet、jsp、请求转发、重定向的一些个人理解

1.servlet:servlet是基于java实现的web组件,实现了servletAPI的使用规范的java应用程序就是Servlet,是和平台无关的组件,接收web浏览器的请求,服务器处理请求后再返回web浏览器的一个过程;

2.servlet的框架:

其中的Servlet接口是包含了一些与生命周期有关的基本的方法,比如说init、service、destory,其中init只能有一次,service能有多次,destory是被gc清理时使用的也只能使用一次,ServletConfig是相关的配置属性,而这个GenericServlet则是Servlet和ServletConfig的基本实现类,HttpServlet继承了GenericServlet类,而这个MyServlet则是我们自己定义的类;

3.Servlet自定义子类的使用:

java 复制代码
@WebServlet(name="MessageBoardServlet",value="/x")
public class 自定义的类 extends HttpServlet{
@Override
protected void doGet(HttpServletRequestrequest,HttpServletResponse response){
}
@Override
protected void doPost(HttpServletRequestrequest,HttpServletResponse response){
}
}

如果说想直接通过url地址访问Servlet,调用doGet,如果是通过超链接,访问的Servlet路径,调用doPost;

在doGet和doPost中一定要对编码的类型以及类型进行设置

javascript 复制代码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");

4.Servlet的基本运作步骤

5.Http协议:基于TCP/IP之上的应用层协议

使用请求-响应模式:请求从客户端发出,服务端对请求进行响应,并返回给浏览器端;

无状态:自身不对请求和响应之间的通信状态进行保存;

无连接:限制每次只处理一个请求。服务器处理完浏览器的请求,并收到浏览器的应答后,就断开连接;

6.HttpServletRequest使用的方法:

request.setCharacterEncoding(编码格式)

request.gerParameter("前端控件的name")获取请求的参数值;

request.getRemoteAddr():获取远程地址;
request.getParameterMap() :将前端提交的数据,以名值对方式,存储在map中;
request.getParameterValues("前端控件名"): 返回结果是一个字符串数组,用于一个名字的控件,返回多个值(复选框、可多选的下拉列表);
7.使用Commen_Beanutils工具,实现对网页中的数据封装到java实体类对象中的方法;
8.jsp:是运行在服务器端的界面,简单的来说就是java+HTML代码,使用时要注意java的代码要放在<%%>中,如:

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<table class="table table-striped table-bordered table-hover">
<%
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
%>
<tr>
<td>BB</td>
</tr>
<%} else {%>
<tr>
<td>AA</td>
</tr>
<% }
}%>
</table>
</div>
</body>
</html>

9.请求转发的工作原理:

从本质上来看,请求转发就是一个web资源收到客户端浏览器请求后,通知服务器调用另一个web资源来处理,是服务端行为;

通过调用RequestDispatcher接口来实现:

HttpServletRequest调用用getRequestDispatcher(String path):可以是绝对路径,也可以是相对路径;
ServletContext调用getRequestDispatcher(String):是绝对路径
forward(req,resp):将请求转发给另一个web资源
include(req,resp):将其他web资源作为响应内容包含进来
特性:
不支持跨域转发,只能跳转到当前应用的资源;
浏览器上的URL地址不改变,浏览器不知道服务器内部进行了请求转发,也不知道转发了多少次;
参数与请求转发的web之间,共享一个request和response对象
可以在请求范围内使用setAttribute(名,值),getAttribute(名)来实现资源的传递;
10.重定向:当前浏览器向服务端发送请求时,通知浏览器重新定向到另一个web资源,客户端行
为。
响应码:200表示成功,302表示重定向,404表示资源不可访问,500表示服务器内部错误(程序错误)

特点:
url地址会发生变化,变为第二次请求的地址;
一共有两次请求,对应两次request和response;
可以跨域,可以重定向任何网址;
11.重定向和请求转发的区别:
(1)请求转发是一次要求,重定向是两次要求;
(2)请求转发不支持跨域转发,只能在应用的资源中进行转发,而重定向可以定向到外域资源;
(3)请求转发是一次请求,效率更高;
(4)请求转发的url地址不变,因为对应了一次的request和response;
(5)请求转发是服务器行为,重定向是客户端行为;
12.jsp表达式:
<%=值%>注意不能使用;

相关推荐
2601_9491942613 分钟前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
c***892031 分钟前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
aq55356001 小时前
C语言、C++和C#:三大编程语言核心差异详解
java·开发语言·jvm
老马95271 小时前
opencode4-在已有项目中增加修改功能
java·后端·ai编程
Moe4881 小时前
Spring AI:结构化输出
java·后端·面试
并不喜欢吃鱼1 小时前
从零开始C++----七.继承及相关模型和底层(上篇)
开发语言·c++
沐知全栈开发1 小时前
XML CDATA
开发语言
APIshop1 小时前
Python 爬虫获取闲鱼商品详情 API 接口实战指南
开发语言·爬虫·python
代码羊羊2 小时前
rust-字符串(切片)、元组、结构体、枚举、数组
开发语言·后端·rust
sthnyph2 小时前
TypeScript 与后端开发Node.js
java