[ Servlet 服务器]
目录
一. web概述
1. 定义:
2. web开发环境搭建
(1). 获取Tomcat安装程序包
(2). 安装JDK
(3). Tomcat 修改端口号
3. 创建web项目(*)
二. servlet 概述
1. 定义:
2. Servlet的作用:
三. http 请求
1. HTTP 定义:
2. HTTP 请求
(1). 定义:
(2). 请求行 请求头 请求体
(3). http两种请求方式
(4). 常用方法
3. 响应
1. 定义:
2. 状态码:
四. 过滤器
1. 定义:
一. web概述
1. 定义:
Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它相当于一个容器,作为中间件连接用户与程序
WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等
在我们的电脑上安装一款Apache 的开源服务器Tomcat,Tomcat支持运行Java EE程序
在小型的应用系统或者有特殊需要的系统中,该服务器支持全部JSP以及Servlet规范
2. web开发环境搭建
Tomcat官网 Apache Tomcat® - Welcome!
(1). 获取Tomcat安装程序包
tar.gz文件: Linux操作系统下的安装版本
zip文件 : Windows系统下的压缩版本
(2). 安装JDK
● 设置JAVA_HOME环境变量
● 设置PATH环境变量
● 安装Tomcat
● 解压tomcat压缩文件
(3). Tomcat 修改端口号
地址: D:\development\apache-tomcat-9.0.43\conf
更改server.xml中的端口
server.xml是Tomcat的主配置文件
提供Tomcat组件的初始配置,tomcat启动的时候执行这些初始化设置。
修改此文件后,需要重新启动tomcat. 如果此文件修改错误,则tomcat不能正常启动
3. 创建web项目(*)
之后会更新完善,大家记得催更
二. servlet 概述
1. 定义:
servlet = service + applet , 是用Java编写的服务器端的 程序 . java EE(servlet程序)运行在服务器中, 服务器负责调用Java程序, 进行前后端交互
2. Servlet的作用:
1. 接收用户发送的请求数据
2. 调用其他的java程序来处理请求
3. 根据处理结果,将结果响应给客户端
三. http 请求
1. HTTP 定义:
HTTP(HyperText Transfer Protocol)超文本传输协议 (应用层的协议) , 以简捷、快速的方式,适用于分布式超媒体信息系统. 基于TCP/IP通信协议来传递数据.
超文本传输协议: 服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程
2. HTTP 请求
(1). 定义:
客户端连上服务器后,向服务器请求 web资源,称为客户端向服务器发送了一个http 请求
(2). 请求行 请求头 请求体
一次http请求包含 请求行 请求头 请求体.
请求行和请求头由浏览器自己发送, 客户端向服务器发送的数据在请求体中
请求行: 请求地址 请求方式,http版本
请求头: 请求中放一些客户端的环境信息
请求体: post发送的请求在请求体中
(3). http两种请求方式
get请求: 一般从服务器获取数据(发送少量数据,获取大量数据)
数据只能拼接在地址的后面,会在地址栏显示出来 例如超链接
post请求:一般主要是向服务器提交数据(表单)
向后端发送大量数据 数据在请求体中,发送的数量没有限制,还可以提交文件,数据不会在地址栏里显示
package org.example.webserver;import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.annotation.*;//servlet是服务器
@WebServlet(urlPatterns = "/hello")//配置前段访问的地址
public class HelloServlet extends HttpServlet {private String message;public void init() {message = "Hello World!";}/*服务器会把请求中所有的数据封装到HttpServletRequest对象中,需要请求中的数据,直接从对象中获取,用HttpServletRespons对象,向客户端做出响应doGet和doPost中封装了HttpServletRequest, 表示请求对象;HttpServletResponse,表示响应对象 */@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {System.out.println(req.getMethod());System.out.println("后端接收到了前端 的请求");System.out.println(req.getParameter("name"));//获取请求中, 自己发送的数据//获取请求头中的数据System.out.println(req.getRemoteAddr());//客户端的ipSystem.out.println(req.getRemotePort());//客户端的端口System.out.println(req.getHeader("user-agent"));System.out.println(req.getHeader("accept-language"));//jdbc//mybatis//响应}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//post请求中文解码方式和前端编码方式不一致, 所以中文会乱码req.setCharacterEncoding("utf-8");//设置 请求 中的数据解码格式String name = req.getParameter("name");//获取参数String password=req.getParameter("password");//设置响应内容的编码方式, 需要在获得PrintWriter之前设置resp.setContentType("text/html;charset=utf-8");//设置 响应头,为响应的内容设置编码格式PrintWriter printWriter =resp.getWriter();//获得打印输出字符流, 以流的形式向前端做出响应//各种逻辑处理,与数据交互if (name.equals("张三")&&password.equals("111")){//向客户响应体端做出响应printWriter.write("<h1>登录成功</h1>");//响应体 响应内容}else{printWriter.write("<h1>账号或密码错误</h1>");//响应体}}
}
(4). 常用方法
● getParameter(name) String 通过name获得值
● request.setCharacterEncoding(编码格式) 处理post请求中文乱码
● getMethod() 得到客户机请求方式
● getScheme() 请求协议
● getRemoteAddr() 返回发出请求的客户机的IP地址
● getServerName() 服务器名(ip或域名)
● getServerPort() 服务器端口
3. 响应
1. 定义:
一个http响应表示服务器向客户端回送的数据,包括 响应行,响应头,响应体
响应行: 包含了http协议版本,以及用于描述服务器对请求的处理结果。
HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)
响应头: 用于描述服务器的基本信息,以及数据描述
Server Apache-Coyote/1.1
Content-Type text/html;charset=UTF-8
Content-Length 0
Date Wed, 13 Sep 2017 02:26:07 GMT
响应体: 服务器向客户端浏览器回送的正文
2. 状态码:
http响应状态码:
200: 表示请求成功,后端处理没有问题,响应成功
404: 表示请求的资源不存在,请求路径中项目名,servlet地址写错了
ip和端口 没有问题,但是后端找不到项目
500: 服务器内部出错了 ( 即 java代码出错)
四. 过滤器
1. 定义:
在请求到达servlet程序前,可以让请求进入过滤器中,进行一些处理(字符集编码设置,用户登录是否失效)
package org.example.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*过滤器:在请求到达servlet程序前,可以让请求进入过滤器中,进行一些处理(字符集编码设置,用户登录是否失效)
*/
@WebFilter(urlPatterns = "/*")//配置哪些请求可以进入到此过滤器
public class EncodFilter implements Filter {//执行过滤操作的方法@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("编码过滤器");//设置编码格式,防止乱码servletRequest.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html;charset=utf-8");//让请求离开过滤器,继续相互执行,后一个可能是目标Servlet,还可能是下一个过滤器filterChain.doFilter(servletRequest,servletResponse);}
}