1.tomcat服务器
tomcat官网
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个Java初学web的人来说,它是最佳的选择。
1.1 启动
文件夹作用:
启动。关闭Tomcat
访问测试:http://localhost:8080/
可能遇到的问题:
Java环境变量没有配置
闪退问题:需要配置兼容性
乱码问题:配置文件中设置
1.2 配置

可以配置启动的端口号
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
可以配置主机的名称
- 默认的主机名为:localhost->127.0.0.1
- 默认网站应用存放的位置为:webapps
<Host name="www.wulei.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
1.3 IDEA中使用Tomcat
创建tomcat配置

若模块为后来导入到项目中时,idea是没有帮忙打war包的,这时,要自己手动到项目结构中创建war包,创建完成后在tomcat配置后,即可使用
https://blog.csdn.net/qq_42986107/article/details/92094960也可以参考这篇文章打war包方法
4.Http
4.1 什么是Http
4.2 HTTP消息结构
5.Maven
我为什么要学习这个技术?
- 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
- 如何能够让一个东西自动帮我导入和配置这个jar包。
5.1 Maven项目架构管理工具
我们目前用来就是方便导入jar包的!
Maven的核心思想:约定大于配置
- 有约束,不要去违反。
Maven会规定好你该如何去编写我们的Java代码,必须要按照这个规范来;
5.2 下载安装Maven
官网:https://maven.apache.org/
下载完成后,解压即可;
建议:电脑上的所有环境都放在一个文件夹下,方便管理;
5.3 配置环境变量(mac)
1.在应用程序找到终端(实用工具)文件夹里面
输入命令:
vi ~/.bash_profile
输入 **i** 进入编辑模式,输入:编辑
注意:**M2_HOME**需要写为自己的路径
export M2_HOME=/Library/apache-maven-3.6.3export PATH=$PATH:$M2_HOME/bin
2.输入或按ESC退出编辑模式
输入:**:wq**(保存文件并退出)
输入: **source .bash_profile** (执行此文件)
查看是否配置成功,输入
echo $M2_HOMEmvn -version
3.配置阿里云镜像

- 镜像:mirrors
- 作用:加速我们的下载
国内建议使用阿里云的镜像(在配置文件里面找mirrors标签,插入其中即可)
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>
4.配置本地仓库
配置本地仓库(直接搜索标签)
<!-- 此地址为本地maven文件存放的地址 --><localRepository>/Library/apache-maven-3.6.3/maven-repo</localRepository>
5.Servlet
6.6 HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;
如果要获取客户端请求过来的参数:找HttpServletRequest
如果要给客户端响应一些信息:找HttpServletResponse
1、简单分类
负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException;PrintWriter getWriter() throws IOException;
负责向浏览器发送响应头的方法void setCharacterEncoding(String var1);
- void setContentLength(int var1);
- void setContentLengthLong(long var1);
- void setContentType(String var1);
- void setDateHeader(String var1, long var2);
- void addDateHeader(String var1, long var2);
- void setHeader(String var1, String var2);
- void addHeader(String var1, String var2);
- void setIntHeader(String var1, int var2);
- void addIntHeader(String var1, int var2);
常用的响应状态码
- 200 OK 服务器成功处理了请求(这个是我们见到最多的)
- 204 No Content 请求成功处理,没有实体的主体返回
- 206 Partial Content GET范围请求已成功处理
- 301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
- 303 See Other 临时重定向,期望使用GET定向获取
- 304 Not Modified 发送的附带条件请求未满足
- 307 Temporary Redirect 临时重定向,POST不会变成GET
- 400 Bad Request 请求报文语法错误或参数错误
- 401 Unauthorized 需要通过HTTP认证,或认证失败
- 403 Forbidden 请求资源被拒绝
- 404 Not Found(页面丢失)未找到资源
- 500 Internal Server Error 服务器故障或Web应用故障
- 501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务
- 503 Service Unavailable 服务器超负载或停机维护
2、下载文件
- 要获取下载文件的路径
- 下载的文件名是啥?
- 设置想办法让浏览器能够支持下载我们需要的东西
- 获取下载文件的输入流
- 创建缓冲区
- 获取OutputStream对象
- 将FileOutputStream流写入到buffer缓冲区
- 使用OutputStream将缓冲区中的数据输出到客户端!
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1. 要获取下载文件的路径String realPath = "/Users/zhangwenjie/IdeaProjects/javaweb-02-servlet/response/src/main/resources/许嵩.jpg";System.out.println("下载文件的地址:"+realPath);//2. 下载的文件名是啥?String fileName = new File(realPath).getName();System.out.println("下载文件的名称:"+fileName);//3. 设置想办法让浏览器能够支持下载我们需要的东西,中文文件 名URLEncoder.encode编码,否则有可能乱码resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));//4. 获取下载文件的输入流FileInputStream in = new FileInputStream(realPath);//5. 创建缓冲区int len = 0;byte[] buffer = new byte[1024];//6. 获取OutputStream对象ServletOutputStream out = resp.getOutputStream();//7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!while((len = in.read(buffer))>0){out.write(buffer,0,len);}out.close();in.close();}
