JavaWeb学习笔记
Tomcat配置
可能遇到的问题:
-
Java环境变量没有配置
-
闪退问题:需要配置兼容性
-
乱码问题:配置文件中配置
核心配置文件:server.xml
-
默认主机名:localhost -> 127.0.0.1
-
默认网站引用存放位置:webapps
-
server.xml文件中的<HOST>标签可以修改默认主机名
高难度面试题:
请你谈谈网站是如何进行访问的?
-
我们输入一个域名,回车;
-
检查本机的C:\Windows\System32\drivers\etc\hosts的配置文件下有没有这个域名映射;
-
有:直接返回对应的ip地址,在这个地址中,有我们需要访问的web程序,可以直接访问;
-
没有:直接去DNS服务器上找,找到就返回,找不到就返回找不到;
-
发布一个网站
-
把我们的网站应用程序放在tomcat的webapps目录下即可;
-
webapps目录下每一个文件夹都代表一个应用程序;
-
访问时在后面带上应用程序的名字(文件夹的名字);
网站的目录结构:
-webapps :Tomcat服务器的web目录
-ROOT
-helloword :网站的目录名(自己定义)
-WEB-INF:
-classes: java程序
-lib: web程序所依赖的jar包
-web.xml: 网站的配置文件
-index.html: 默认的首页
-static : 存放的一些静态文件
-css
-js
-image
-.....
HTTP
-
什么是HTTP?
HTTP(超文本传输协议)是一个简单的请求-响应协议,建立在TCP协议之上;
-
文本:HTML、字符串,...
-
超文本:图片、音乐、视频、定位、地图...
HTTPS(默认端口443):s指的SSL(SecureSocket Layer),即安全套接层;
HTTP的两个时代:
-
http1.0
-
HTTP/1.0:客户端可以与web服务器连接后,只能获取一个web资源,断开连接;
-
-
http2.0
-
HTTP/1.1:客户端可以与web服务器连接后,能获取多个web资源;
-
HTTP请求
-
请求行:
-
请求中的请求方式:get、post、put、delete...
-
get请求:请求携带的参数较少,大小有限制吗,会在浏览器的URL地址栏中显示数据内容,不安全,但效率高;
-
post请求:请求携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏中显示数据内容,但是效率低;
-
-
-
请求头:
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式:GBK、UTF-8、GB2312、ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Connection: 告诉浏览器,请求完成是保持连接还是断开
Cookie:
Maven
Maven核心思想:约定大于配置。
Maven遇到的一些问题:在打包Java后台程序时,可能会遇到src/main/java
目录下的资源文件不被导出,导致程序运行过程中报资源找不到错误,此时需要在Maven配置文件中进行配置,这样会将src/main/java
目录下的资源文件也打包。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
Servlet
Servlet简介:
-
Servlet就是sun公司开发动态web的一门技术;
-
Sun公司在这些api中提供了Servlet接口,如果你想开发一个Servlet程序,只需要两个小步骤:
-
编写一个类实现Servlet接口;
-
把开发好的Java类部署到web服务器上;
-
我们把实现了Servlet的Java程序称为Servlet。
原理:
在发送请求后,web服务器会产生两个对象Request(请求)、Response(响应),这两个对象作为调用service方法的入参,
service方法根据具体的情况调用servlet的处理方法,而实现逻辑是我们实现Servlet重写它的方法实现的。
请求映射的注意点:
-
如果我们映射用.do类似的规则,**则前面不能用/;**
-
固定的路径映射优先级要高于/*的映射路径;
ServletContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表当前的web应用。
应用:
-
共享数据:一个Servlet保存的数据,可以在另一个Servlet中获取到;
文件路径问题
在java目录下的配置文件和在resources目录下的配置文件在maven打包后会放在同一个目录下(WEB-INF/classes),我们称之为类路径。
HttpServletResponse
-
实现文件下载功能(注意:设置响应头)
protected void doGet(HttpServletRequest request, HttpServletResponse response){
//获取文件的路径
String realPath = "D:\\git_item\\JavaWeb\\javaweb-02-response\\target\\javaweb-02-response\\WEB-INF\\classes\\picture.jpeg";
//获取文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//定义输入和输出流并下载文件
try(
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/" + fileName))
) {
//设置响应头(让浏览器支持我们下载需要的文件),用URLEncoder重新编写文件名,不然文件名有可能会乱码
response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bis.read(buffer)) > 0){
bos.write(buffer,0,len);
}
bos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} -
验证码功能(后端实现,需要用到Java的图片类)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//设置浏览器3秒刷新
response.setHeader("refresh","3");
//在内存中创建一个图片
BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics2D graphics2D = (Graphics2D) image.getGraphics();
//设置图片背景颜色
graphics2D.setColor(Color.BLACK);
graphics2D.fillRect(0,0,80,20);
//生成图片数据
graphics2D.setColor(Color.BLUE);
graphics2D.setFont(new Font(null,Font.BOLD,20));
graphics2D.drawString(makeNum(6),0,20);
//告诉浏览器,这个请求用图片的方式打开
response.setContentType("image/jpeg");
//网站是有缓存的,不让浏览器缓存
response.setDateHeader("expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
//将图片写给浏览器
ImageIO.write(image,"yzm",response.getOutputStream());
}
//生成验证码
private String makeNum(int count){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append((int) Math.floor(Math.random() * 10));
}
return sb.toString();
}
-
重定向(注意:重定向的时候一定要注意路径问题)
response.sendRedirect("跳转的url");
重定向与请求转发的异同:
相同点:
-
页面都会实现跳转
不同点:
-
请求转发url不会产生变化,状态码为307;
-
重定向的时候,url地址栏会产生变化,状态码为302;
-
HttpServletRequest
应用场景:
-
获取请求传过来的参数;
-
请求转发;
Cookie与Session
cookie:
-
客户端技术,客户端通过请求发送cookie给服务端,服务端通过响应发送cookie给客户端;
session:
-
服务端技术,利用这个技术,可以保存客户的会话信息,我们可以把数据或信息放入session中;
Cookie
cookie实现访问次数与上一次登录时间:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决字符串中文乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取流
PrintWriter out = response.getWriter();
//获取请求中的Cookie
Cookie[] cookies = request.getCookies();
String time = "";
int count = 1;
for (Cookie cookie : cookies) {
if ("loginLastTime".equals(cookie.getName())) {
Long loginLastTime = Long.parseLong(cookie.getValue());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
time = df.format(loginLastTime);
} else if ("count".equals(cookie.getName())) {
count = Integer.parseInt(cookie.getValue());
}
}
out.write("你好,你这是第" + count + "访问!你的上一次访问时间为" + time);
//覆盖原来的Cookie值
Cookie cookieTime = new Cookie("loginLastTime", System.currentTimeMillis() + "");
Cookie cookieCount = new Cookie("count", (++count) + "");
//设置cookie的有效期(5分钟)
cookieTime.setMaxAge(60 * 60 * 5);
cookieCount.setMaxAge(60 * 60 * 5);
//把新的Cookie响应给客户端
response.addCookie(cookieTime);
response.addCookie(cookieCount);
}
cookie是否存在上限呢,聊聊细节问题。
-
一个cookie只能存放一条信息;
-
一个web站点可以给浏览器发送多个cookie,每个站点最多存20个cookie;
-
浏览器的cookie上限为300个;
-
cookie大小有限制,只有4kb;
删除cookie:
-
若没有设置有效期,关闭浏览器,cookie会自动失效;
-
可以设置cookie的有效期为0;
-
手动在浏览器中删除;
Session(重点)
什么是session:
-
服务器会为每个用户(浏览器)创建一个Session对象;
-
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就会存在;
应用:登录一个网站,访问这个网站的任一一个页面,都不需要重新登录,这就是session保存了用户的登录信息;
设置session失效:
-
调用Session对象的invalidate方法使它失效;
-
在web.xml文件中配置session的失效时间,其中默认为30分钟;
总结:Cookie与Session的区别:
-
Cookie保存用户的数据到用户的浏览器中(可以有多个Cookie);
-
Session保存用户的数据到服务器中(保存重要的信息,减少服务器资源的浪费);
-
Session由服务端创建;
JSP
什么是JSP?
Java Server Pages:Java服务端页面,与Servlet一样,用于Web动态网页技术,相比于HTML,JSP能提供动态数据。
JSP在Tomcat内部的工作原理:
-
Tomcat有一个work目录,这个目录就是Tomcat的工作目录;
-
work目录下我们发现jsp页面变成了java代码;
不管浏览器访问应用程序的什么资源,其实都是在访问Servlet。
JSP的内置对象:
-
pageContext:页面上下文
-
session
-
application: ServletContext(应用程序上下文)
-
config:ServletConfig
-
-
page
-
request:请求
-
response:响应
-
exception
idea实现热部署功能
网址:https://blog.csdn.net/qq_16148137/article/details/99694566
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现