JavaWeb学习笔记

JavaWeb学习笔记

Tomcat配置

可能遇到的问题:

  1. Java环境变量没有配置

  2. 闪退问题:需要配置兼容性

  3. 乱码问题:配置文件中配置

 

核心配置文件:server.xml

  • 默认主机名:localhost -> 127.0.0.1

  • 默认网站引用存放位置:webapps

  • server.xml文件中的<HOST>标签可以修改默认主机名

 

高难度面试题:

请你谈谈网站是如何进行访问的?

  1. 我们输入一个域名,回车;

  2. 检查本机的C:\Windows\System32\drivers\etc\hosts的配置文件下有没有这个域名映射;

    • 有:直接返回对应的ip地址,在这个地址中,有我们需要访问的web程序,可以直接访问;

    • 没有:直接去DNS服务器上找,找到就返回,找不到就返回找不到;

 

发布一个网站

  1. 把我们的网站应用程序放在tomcat的webapps目录下即可;

  2. webapps目录下每一个文件夹都代表一个应用程序;

  3. 访问时在后面带上应用程序的名字(文件夹的名字);

 

网站的目录结构:

 -webapps :Tomcat服务器的web目录
  -ROOT
  -helloword :网站的目录名(自己定义)
    -WEB-INF:
        -classes: java程序
        -lib:     web程序所依赖的jar包
        -web.xml: 网站的配置文件
    -index.html: 默认的首页
    -static :   存放的一些静态文件
      -css
      -js
      -image
      -.....

 

HTTP

  1. 什么是HTTP?

HTTP(超文本传输协议)是一个简单的请求-响应协议,建立在TCP协议之上

  • 文本:HTML、字符串,...

  • 超文本:图片、音乐、视频、定位、地图...

HTTPS(默认端口443):s指的SSL(SecureSocket Layer),即安全套接层;

 

HTTP的两个时代:

  1. http1.0

    • HTTP/1.0:客户端可以与web服务器连接后,只能获取一个web资源,断开连接;

  2. http2.0

    • HTTP/1.1:客户端可以与web服务器连接后,能获取多个web资源

 

HTTP请求

  1. 请求行:

    • 请求中的请求方式:get、post、put、delete...

      • get请求:请求携带的参数较少,大小有限制吗,在浏览器的URL地址栏中显示数据内容,不安全,但效率高

      • post请求:请求携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏中显示数据内容,但是效率低

  2. 请求头:

     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

  1. 实现文件下载功能(注意:设置响应头)

     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();
            }
     
        }

     

  2. 验证码功能(后端实现,需要用到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();
        }

 

  1. 重定向(注意:重定向的时候一定要注意路径问题)

     response.sendRedirect("跳转的url");

    重定向与请求转发的异同:

    相同点:

    • 页面都会实现跳转

    不同点:

    • 请求转发url不会产生变化,状态码为307;

    • 重定向的时候,url地址栏会产生变化,状态码为302;

     

HttpServletRequest

应用场景:

  1. 获取请求传过来的参数;

  2. 请求转发;

 

 

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失效:

  1. 调用Session对象的invalidate方法使它失效;

  2. 在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

  • out

  • page

  • request:请求

  • response:响应

  • exception

 

 

 

 

 

idea实现热部署功能

网址:https://blog.csdn.net/qq_16148137/article/details/99694566

 
posted @   有梦想的程序员。  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示