Servlet
是什么?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成 动态Web内容。
前端访问需要一些数据 比如:
登录, 查询, 访问, 删除 等…
这些数据从哪里来的?
就是后端通过 Tomcat
里的Servlet
容器去访问Servlet
实例
Servlet
进行处理 从而返回给前端数据.
Servlet
实例通常继承抽象类HttpServlet
实现两个方法doPost
和doGet
方法
而抽象类HttpServlet
继承抽象类GenericServlet
HttpServlet
实现了一系类的方法 比如请求的分发方法
帮助你实现了Get
请求和Post
请求
抽象类GenericServlet
实现了抽象接口Servlet
其中就有Servlet
从创建, 响应, 终止的阶段
这些过程就是生命周期
生命周期
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");
前端访问跨域
前端请求数据的时候如果 域名 不同就会引起跨域问题
因为浏览器设置了策略: 同源策略
- 协议相同
前面的额协议必须一致(http:// https:// file://) - 域名相同
协议后面到端口前面中间的这一部分 - 端口相同
域名后面的端口号
设置允许所有域名跨域
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()
获取请求的方式
返回字符串Post
和Get
等
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
的区别
一个是过程中只是请求了一次
浏览器请求类 类与类访问
重定向是
浏览器请求类
类重定向到另一个连接
浏览器再请求
一个请求一次 一个请求两次