Java Web Servlet是个什么?

Servlet 是什么?

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成 动态Web内容。

前端访问需要一些数据 比如:
登录, 查询, 访问, 删除 等…

这些数据从哪里来的?
就是后端通过 Tomcat 里的Servlet 容器去访问Servlet实例
Servlet进行处理 从而返回给前端数据.

Servlet实例通常继承抽象类HttpServlet
实现两个方法doPostdoGet方法

而抽象类HttpServlet继承抽象类GenericServlet
HttpServlet 实现了一系类的方法 比如请求的分发方法
帮助你实现了Get请求和Post请求

抽象类GenericServlet 实现了抽象接口Servlet
其中就有Servlet 从创建, 响应, 终止的阶段
这些过程就是生命周期

生命周期

01

init() 方法

只创建一次在第一次创建Servlet时候被调用
创建时候加载一些数据提供 Servlet生命周期使用

Service() 方法

每当客户端发送一次请求 Service 方法调用一次
并且有两个参数 请求:request 和 响应:response
并且service() 方法会检查 HTTP 请求类型(GET、POST、PUT、DELETE等…)

doPost() 方法
处理前端发送的POST请求

doGet() 方法
处理前端发送的GET请求

destroy() 方法

只会执行一次 在Servlet生命周期结束时 调用一次
比如关闭数据库连接, 停止后台线程 等操作

设置访问请求头

中文乱码

在返回给前端数据时 返回汉字会出现乱码问题
需要在request 里面设置字符集

response.setHeader("content-type","application/json;charset=utf-8");
//接收json数据 并 字符集 设置为utf-8
//或者
request.setCharacterEncoding("utf-8");
前端访问跨域

前端请求数据的时候如果 域名 不同就会引起跨域问题
因为浏览器设置了策略: 同源策略

  1. 协议相同
    前面的额协议必须一致(http:// https:// file://)
  2. 域名相同
    协议后面到端口前面中间的这一部分
  3. 端口相同
    域名后面的端口号

设置允许所有域名跨域

response.setHeader("Access-Control-Allow-Origin","*");//  允许所有域名访问

也可以设置固定域名访问

response.setHeader("Access-Control-Allow-Origin","127.0.0.1:8080");// 允许访问

Request 方法

getParameter("参数名") 根据参数名获取参数值
返回一个字符串

getParameterValues() 根据参数名获取多个参数值
返回数组

setCharacterEncoding() 设置请求的字符集编码方式
通常在POST请求里使用

request.setCharacterEncoding("urf-8")

getMethod() 获取请求的方式
返回字符串PostGet

getCharacterEncoding()//--返回字符编码方式
setAttribute(String,Object)//---存储此请求中的属性
getAttribute(String name)//--返回指定属性的属性值

Response 方法

setContentType("参数名")--设置响应的字符编码方式
sendRedirect()--完成重定向
getOutputStream()--获取字节输出流
getWriter()--获取字符输出流
response.sendRedirect(“重定向到资源的路径”)

两个Servlet类 之间 互相 之间 访问
比如浏览器访问AServlet类 但是A 调用了BServlet类 但是此时浏览器地址没有进行改变

request.getRequestDispatcher("访问目的资源路径").forward(request,response);

注意
两个类之间可以互相调用
但是必须在同一工程里面

两个类之间 互相请求可以 携带参数

//设置参数
request.setAttribute("name","Jack");
//---------------------------------------
//在另一个类里面获取参数
request.getAttribute("name");

POST 只能访问POST GET只能访问GET

响应方式

获取字符输出流

PrintWriter out = response.getWriter();

输出字符

out.write("hello world");

可以进行多次

out.write("hello world");
out.write("hello world");
out.write("hello world");

重定向地址
重定向网页地址
访问另一个单独的网页连接

response.sendRedirect("https://www.baidu.com");

getRequestDispatcher的区别
一个是过程中只是请求了一次
浏览器请求类 类与类访问

重定向是
浏览器请求类
类重定向到另一个连接
浏览器再请求

一个请求一次 一个请求两次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值