tomcat
介绍
概念: Tomcat是一个开源免费的轻量级Web服务器,是Apache软件基金会的核心项目,支持Servlet/JSP少量JavaEE(JakartaEE)规范。
JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。
tomcat官网:
官网:https://tomcat.apache.org/
Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行 。
安装步骤:
- 下载:官网下载地址:https://tomcat.apache.org/download-90.cgi
- 安装:绿色版,直接解压即可
- 卸载:直接删除目录即可
- 启动:双击 bin/startup.bat
- 关闭:
直接×掉运行窗口,强制关闭
bin/shutdown.bat正常关闭
ctrl+c 正常关闭
- 部署项目:将项目放置在webapps目录下,即部署完成
第一步:下载
第二步:解压
卸载方式
直接右击删除即可
第三步:启动
在bin目录里面,点击startup.bat
测试
在启动tomcat之后,在浏览器输入:http://localhost:8080
出现这个页面代表tomcat安装成功
第四步:关闭
点击bin目录里面的shutdown.bat
或者 ctrl+c
或者 直接点×
配置
控制台日志编码配置:
在tomcat目录下点击 conf
找到logging.properties 打开
找到里面的第51行,把最后面的UTF-8 换成GBK
Tomcat运行端口号(默认8080):可以自己配置
tomcat目录下点击,点击conf目录选择server.xml
找到这里,就可以修改端口号了
BS架构:
介绍:
BS架构: Browser/Server,浏览器/服务器 架构模式。它的特点是:客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可 (便于升级维护)。
静态资源:
服务器上存储的不会改变的数据,通常不会根据用户的请求而变化。比如:HTML、CSS、JS、图片、视频等(负责页面展示)。
动态资源:
服务器端根据用户请求和其他数据实时生成的,内容可能会在每次请求时都发生变化。比如:Servlet、JSP等(负责逻辑处理)。
servlet
什么是servlet?
Servlet 是运行在Web服务器中的小型java程序,是Java提供的一门动态web资源开发技术。通常通过HTTP协议接收和响应来自于客户端的请求。Servlet 是JavaEE规范之一,其实就是一个接口(定义Servlet需实现Servlet接口 或 继承HttpServlet) ,并由web服务器运行Servlet。
如何使用servlet:
- 准备:创建maven项目(设置打包方式为war),导入servlet坐标(provided)
- 开发:
定义一个类,实现servlet接口(继承HttpServlet)
- 在servlet类上使用@webServlet注解,配置该servlet的访问路径。
- 部署:将开发好的servlet配置在外部的tomcat服务器中运行。
第一步:在maven中设置打包方式
第二步:导入servlet-api的坐标
第三步:基层HttpServlet类
重写doGet方法
第四步:在idea里面配置tomcat
点开 edit configurations
点击左上角的+号
找到这个Tomcat Server 下面的Local
第一次配置的话,需要执行下面的操作
1,configure 找到本地的tomcat
2,在出现的弹窗里面。点击Tomcat Home右侧的文件夹,找到自己的tomcat 然后点击ok
3,上面的Name 可以修改一下启动tomcat的名字
1,点击右边的Deployment
2,小加号,找到本项目的 war包,一般都是第一个
3,Application context 这一栏的访问本项目的路径。可以修改按需操作
在点击这个绿色的按钮就可以运行了
执行流程
示例:http://localhost:8080/demo/hello?name=xiaoming
servlet 对象是由谁创建的?
servlet对象由web服务器创建,servlet方法由web服务器调用。
- HttpServletRequest:用于封装所有的数据请求
- HttpServletResponse:用于封装所有的响应数据
http
概述:
Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
特点:
1,基于TCP协议:面向连接,安全2,基于请求-响应模型的:一次请求对应一次响应
3,HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
缺点
多次请求间不共享数据
优点
速度快
http-请求协议
请求数据
请求行:
请求数据第一行(请求方式,资源路径,协议)
请求头:
第二行开始,格式 key:value都是,到下面的空行结束。
- Host:请求的主机名
User-Agent:览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ... Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...) like Gecko
- Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
- Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
- Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
- Content-Type:请求主体的数据类型。
- Content-Length:请求主体的大小(单位:字节)。
请求体
一般是在最后,空行下面的数据。
请求数据获取
- getMethod() 获取请求方法
- getRequestURL() 获取请求路径
- getScheme() 获取请求协议
- getQueryString() 获取查询字符行
- getParameter() 获取请求参数
- getHeader() 获取请求头
- getInputStream() 获取输入流
代码示例:
package com.sde;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/request")
public class RequestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");PrintWriter writer = resp.getWriter();// 获取请求方式String method = req.getMethod();System.out.println("请求方式:"+method);writer.println("请求方式:"+method);// 获取请求路径StringBuffer url = req.getRequestURL();System.out.println("请求的url:"+url);String uri = req.getRequestURI();System.out.println("请求的uri:"+uri);writer.println("请求的url:"+url);writer.println("请求的uri:"+uri);// 获取请求的参数String name = req.getParameter("name");String age = req.getParameter("age");System.out.println("请求的参数:"+name+"--"+age);writer.println("请求的参数:"+name+"--"+age);// 获取请求的协议String scheme = req.getScheme();System.out.println("请求的协议:"+scheme);writer.println("请求的协议:"+scheme);//获取请求头中的某些信息String accept = req.getHeader("Accept");System.out.println("请求头中的Accept项::"+accept);writer.println("请求头中的Accept项::"+accept);}
}
控制台效果:
浏览器效果:
http-响应协议
响应行:
响应数据的第一行(协议,状态码,描述)
响应头:
第二行开始,格式key:vakue,一直到后面的空行。
响应体:
最后一部分,存放响应数据。
响应数据设置
- Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Servlet方法的时候传递给了Servlet。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。
- 响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。
代码示例:
package com.sde;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/response")
public class ResponseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应状态码resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);//设置响应头resp.setHeader("name","daoen");resp.setHeader("content-type","text/html;charset=UTF-8");//设置响应数据resp.getWriter().write("我是里白我nb"+"<h1>cool</h1>");}
}
效果:
常见的响应状态码
开发中常见的:
200 客户端请求成功
404 请求资源不存在,一般是url输入有误,或者网站资源被删除了
500 服务器发生不可预期的错误。
springboot快速入门
spring boot可以帮助我们快速的的构建应用程序,简化开发,提高开发效率。
创建spring boot工程:
1,在自己的工程下,右击 出现下面这个小页面
2,选择spring initializr 右侧的name就是本项目名。Language选择java,Type选maven。Group就是组织名,Artifact:也表示本项目名,然后点击next,jdk 根据自己情况选择,打包方式选jar包。
3,根据自己情况选择spring boot版本。和依赖。
起步依赖:
- spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
- spring-boot-starter-test:包含了单元测试所需要的常见依赖。
- 官方提供的starter:https://docs.spring.io/spring-boot/docs/3.1.3/reference/htmlsingle/#using.build-systems.starter
检查依赖:
创建一个HelloController
package com.sde;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String hello(String name){System.out.println(name);return "你好" +name +"~";}@PostMapping("/hello2")public String hello2(String name){System.out.println(name);return "你好" +name +"~";}}
启动spring boot 在浏览器访问:
在浏览器访问:
控制台输出: