javaweb考前知识点速通

66 阅读14分钟

javaweb

[http]

定义: 超文本传输协议 ,规定了web客户端与服务器之间如何通信,
响应格式
  • HTTP/1.1 200 OK
    Server: nginx/1.18.0 (Ubuntu)
    Date: Wed, 20 Oct 2021 06:46:15 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate
    Pragma: no-cache
    Content-Length: 737265
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">
    
        <title>
            吉首大学    </title>
    
  • 状态行

     Http版本 状态码 状态信息   
              HTTP/1.1 200 ok

  • 响应头部

    • 服务器环境信息 响应体大小 服务器支持的压缩类型

    • 常见的响应头包括Content-Type、Content-Length、Server、Set-Cookie等

      • 3xx 状态码重定向,要用到location属性

        • HTTP/1.1 301 Moved Permanently
          Location: https://www.example.com/new-page
          
    • Date: Wed, 18 Apr 2024 12:00:00 GMT
      
      Server: Apache/2.4.1 (Unix)
      
      Last-Modified: Wed, 18 Apr 2024 11:00:00 GMT
      
      Content-Length: 12345
      
      Content-Type: text/html; charset=UTF-8
      
  • 空行

    请求头和请求体之间的分隔符,表示请求头的结束。

  • 响应体

               包含服务器返回的数据,如请求的网页内容、图片、JSON数据等

请求报文
  • GET http://jsuacm.cn/ HTTP/1.1
    Host: jsuacm.cn
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    
    //”请求数据”(GET方式的请求一般不包含)
    

           Accept-Encoding 头字段可以使用gzip 和compress这两种最常见的数据编码格式。 

  • 请求行

    • 请求方法、请求URI和HTTP版本
  • 请求头

    • 客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等
  • 空行

    • 请求头和请求体之间的分隔符,表示请求头的结束
  • 请求数据

                    请求体包含要发送给服务器的数据。

GET http://jsuacm.cn/ HTTP/1.1
Host: jsuacm.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

//”请求数据”(GET方式的请求一般不包含)

[web前端速成]

基本概念
  • url : 统一资源定位符
标签
  • charset 编码格式

  • name

  • http-equiv  http头信息

  • align 对齐方式

  • <meta http-equiv="default-style" content="the document's preferred stylesheet"><link>
    
    • <link rel="stylesheet" type="text/css" href="theme.css">       
      
  1. <a>

  2. <body>

  3. <table> 表格标题

    • border属性 设置表格的边框
  4. <tr> table 表头,即最上方一行的属性名

    • 定义表格的一行,必须嵌套在

      的标签内

    • <th>表头单元格 在

    • <td>

      table data 数据资料

      • 定义表格中的标准单元格,在
    • 标签内able>
    • <caption>定义表格标题

         

    • Form表单
      用户名:
      密码:
      性别:
      订阅推送信息
      • <label>标签

      • <input> 输入设置

      • <option 下拉列表选项

      • <select>下拉列表的选择

      • action 指定提交表单时要执行的操作,即表单数据发送的URL.

      • Target 规定提交表单后在何处显示响应

      • Method 指定提交表单数据时要使用的HTTP方法

        • <form action="/action_page.php" method="get"></form>
          <form action="/action_page.php" method="post"></form>
          
      • Enctyoe 规定在将表单数据发送到服务器之前如何对其进行编码 旨在method="post"时使用

        <form enctype="multipart/form-data"></form>
        
      • autocomplete 设定表单是否打开自动完成功能.

        <form action="/action_page.php" autocomplete="on"></form>
        
      • novalidate 规定提交表单时不对表单数据进行验证

        <form action="/action_page.php" novalidate></form>
        
      • name 设置表单名称

      空格
      1. & nbsp

      注释
      对文字字体设置
      <font face="宋体" size="20px" color="Red">
      </font>
      
      文字修饰符

      加粗

      着重文字

      斜体字

      小号字

      加重

      下标字 上标字 插入子字 删除字
      标题

      align 对其方式

      这是一个一级标题

      段落

      Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

      ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

      [javascript]
      函数定义
      • 函数声明

        • function myFunction(a, b) {
          return a * b;
          }
          
      • 函数表达式

        • var x = function(a, b) {
          return a * b;
          };
          
      • 普通定义

        • function functionName(parameters) {
            执行的代码
          }
          
      •    Function构造函数

        • var myFunction = new Function("a", "b", "return a * 
              b");
              var x = myFunction(4, 3);
          
      • 函数可以作为值使用

        • function mf(a,b){
              return a*b;
          }
          var x = mf(4,3);
          
      • 函数提升

      • 自调用函数

        • (function() {
          var x = "Hello!!"; // I will invoke myself
          })();
          

          (普通函数定义)();

      Cookie
      • 服务器向的客户端发送cookie时,会在http响应头字段中加入Set-Cookie响应头字段

        • Cookie 的 domain 属性是用来指定浏览器访问的域 , 不严格区分大小写

          path属性

              限制 Cookie 的作用范围
          只有请求路径匹配或包含 path 时,浏览器才会携带该 Cookie 发送给服务器。

          setMaxAge(int expiry) 是 Cookie 类的方法,用于设置 Cookie 的最大存活时间(单位:秒)。不同参数值的含义如下:

      参数值行为
      > 0Cookie 存活指定秒数(如 setMaxAge(60) 表示 1 分钟后过期)。
      = 0立即删除 Cookie(浏览器收到后会移除该 Cookie)。
      < 0Cookie 成为会话 Cookie(默认行为),浏览器关闭时自动删除。
  5. Session(会话)

        是指一个客户端(浏览器)与服务器之间连续发生的一系列请求和响应过程

    • Session 相对于 Cookie 具有更高的安全性,它将关键数据保存在服务器端端。

    • Session 是一种将会话数据保存到服务器端的技术,需要借助Cookie技术来实现。

    [servelet(GenericServlet 和 HttpServlet)]

    零. 工作原理
    1. Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

    2. 用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

    3. ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

    4. 对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。 ————————————————

    一 .HttpServlet

    servelet是运行在web服务器或者应用服务器上的java程序,是一个中间层 ,负责链接来自web浏览器或者其他HTTP客户程序和 {HTTP服务器} 上的应用程序

    HttpServlet是写Servlet代码创建类是需要继承的类

        

    二.HttpServletRequest

    Tomcat会把收到的HTTP请求按照Http协议格式解析成一个HttpRequest 对象

    打印请求信息
    public class RequestDemo1 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req,
       HttpServletResponse resp) throws 
        ServleteException,IOException{
        //指定响应的数据格式以及使用的字符集
        resp.setContentType("text/html;charset=utf-8"
    );
        StringBuilder sb = new StringBuilder();
        //获取请求协议的名称和版本号
        sb.append(req.getProtocol();
        sb.append("<br>");//html 换行
         //获取请求方法名称
        sb.append(req.getMethod());
        sb.appen("<br>");
      //获取球球的URL和ContextPath
        sb.append(req.getRequestURI());
        sb.append("<br>");
        sb.append(req.getContentPath());
        sb.append("<br>");
        //获取query string
        sb.append(req.getQueryString();
        sb.append("<br>");
        //获取请求头中的键值对
        Enumeration<String> headNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()){
            //请求头中的key
            String name = headerNames.nextElement();
            //请求头中的value
            String value = req.getHeader(name);
            sb.append(name + ": "+value);
            sb.append("<br>");
    
        }
        resp.getWriter().write(sb.toString());
    
        }
    
    
    }
    
    三. HttpServletResponse

    Servlet 中的 doxxx方法 会根据请求响应计算,并把响应的数据设置到HttpResponse对象中,然后Tomcat就会把这个HttpResponse 对象通过socket写回浏览器

    (1)HttpServletResponse核心方法

    设置浏览器每多少秒刷新一次

    四.Servlet生命周期

    Servlet从创建到销毁的过程

    初始化阶段,运行阶段,销毁阶段

    五.ServletConfig和ServletContext

    ServletConfig就代表当前吧Servlet再web.xml中的配置信息.

        当Servlet引擎创建一个Servlet实例对象后,调用该对象的构造函数init(ServletConfig config)方法将Servlet对象传递给Servlet

    配置ServletConfig

    把Servlet映射到URL地址,使用<servlet-mapping>标签进行映射,使用<servlet-name>子标签指定要映射的Servlet名称,名称要和之前在<servlet>标签下注册的相同;使用<url-pattern>子标签映射URL地址,地址前必须加“/”,否则访问不到。

    <Servlet>
        <Servlet-name>Demo4</Servlet-name>
        <Servlet-class>com.zx.Demo4</Servlet-class>
        <init-param>
            <param-name>age</param-name>
            <param-value>99</param-value>
        </init-param>
    </Servlet>
    <Servlet-mapping>
        <Servlet-name>Demo4</Servlet-name>
        <url-pattern>/demo4</url-pattern>
    </Servlet-mapping>
    

    ServletConfig接口

    ServletContext

    当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享

    ServletContext接口

    方法功能描述
    Set<String> getResourcePaths(String path)返回一个 Set 集合,集合中包含资源目录中子目录和文件的路径名称。参数 path 必须以正斜线 (/) 开始,指定匹配资源的部分路径。
    String getRealPath(String path)返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数 path 代表资源文件的虚拟路径,它应该以正斜线 (/) 开始,/ 表示当前 Web 应用的根目录。如果 Servlet 容器不能将虚拟路径转换为文件系统的真实路径,则返回 null
    URL getResource(String path)返回映射到某个资源文件的 URL 对象。参数 path 必须以正斜线 (/) 开始,/ 表示当前 Web 应用的根目录。
    InputStream getResourceAsStream(String path)返回映射到某个资源文件的 InputStream 输入流对象。参数 path 传递规则和 getResource() 方法完全一致。
    例子(ServletContext)
    六.会话

    在Web开发中,服务器跟踪用户信息的技术称为会话技术

    • servlet的会话数据保存在Session和Cookie对象中
    Cookie

    Cookie是一种会话技术,可以将会话过程中的数据保存到用户的浏览器中。

                                                            |

                                                            / 

    当该浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确地响应

                                                                |

                                                                /

    当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将用户信息以Cookie的形式发送给浏览器

    CookieApi

    setDomain(String pattern)方法和getDomain()方法是针对Cookie的domain属性的。domain属性用于指定浏览器访问的域。例如,传智播客的域为“itcast.cn”。设置domain属性时,其值必须以“.”开头,如domain=.itcast.cn。默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息发送给服务器(当前主机)。需要注意的是,domain属性的值不区分大小写

    Session

    类似于就诊卡,只要卡号就可以查询到病例档案.当浏览器访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性

    Session还具有更高的安全性,它将关键数据保存在服务器。cookie则是将数据存在客户端的浏览器中

    SessionAPI

    public HttpSession getSession(boolean create)//第一个

    参数为true,则该HttpSession对象不存在时创建并返回新的HttpSession对象,false不创建,而是返回null。

    public HttpSession getSession()//第二个

    相当于上一个,不存在会创建

    Session生命周期

    • invalidate()方法,该方法可以强制使Session对象失效,具体用法如下所示:
        HttpSession session = request.getSession();
        session.invalidate();//注销该request的所有session
    
    • 设置失效时间

      • web.xml

        • 默认时间单位是分钟
      • servlet中手动设置

      •    <Tomcat安装目录> \conf\web.xml文件中,如下配置片段

        

    七.servlet使用方法
    (1) 创建一个类实现Servlet接口,重写方法

    使用IDEA,快捷键:Alt+insert,导入这5个方法)。或继承HttpServlet亦可,只需要掌握写了注释的那三个方法即可。

    public class LoginServlet implements Servlet { 
        @Override 
        public void init(ServletConfig servletConfig) throws ServletException { 
            //初始化方法 
        }
        @Override 
        public ServletConfig getServletConfig() { 
            return null; 
        }
        @Override 
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 
            //处理get/post请求的方法 
        }
        @Override 
        public String getServletInfo() { 
            return null; 
        }
        @Override 
        public void destroy() { 
            //销毁的方法 
        } 
    }
    
    (2) 在web.xml文档中配置映射关系

    XML文件中配置好这个Servlet的映射关系:

    <servlet> 
        <servlet-name>自定义名称</servlet-name> //3
        <servlet-class>处理请求的类的完整路径</servlet-class> //4
    </servlet> 
    <servlet-mapping><!-- mapping 表示映射 --> 
        <servlet-name>自定义名称</servlet-name> //2
        <url-pattern>请求名</url-pattern> //1
    </servlet-mapping>
    

    或者使用@WebServlet配置

    image-20210523011744208
    (3) 测试项目

        启动tomcat,在浏览器输入http://localhost:8080/工程名/访问服务器的路径

    (1):请求

    请求对应上面的1

    (2):对应请求的自定义名称

    在这里插入图片描述

    (3):从自定义的名字找到要处理的类

    在这里插入图片描述

    (4):处理servlet请求的类----LoginServlet
    package com.jw.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import java.sql.SQLException;
    
    public class LoginServlet extends HttpServlet {
    
        static {
            //传统方法加载数据库,之后会用druid连接池
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //处理get请求
            //拒绝get请求访问,设置编码方式
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter writer = resp.getWriter();
            writer.print("<script>alert('请通过表单进行登录');location.href='/login.html'</script>");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //处理post请求
            //设置编码
            req.setCharacterEncoding("utf-8");
            //获得参数
            String webName = req.getParameter("username");//账号,引号引起来的是login页中的name
            String password = req.getParameter("password");//密码
    
            //连接数据库
            try {
                Database.createTable();
                Database.insertData();
                //跳转页面
                if(Database.selectData(webName,password)){
                    req.getRequestDispatcher("/success.html").forward(req,resp);
                    System.out.println("成功");
                }else {
                    req.getRequestDispatcher("/error.html").forward(req,resp);
                    System.out.println("失败");
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
    
    
        }
    
        @Override
        public void destroy() {
            System.out.println("LoginServlet销毁");
        }
    
        @Override
        public void init() throws ServletException {
            System.out.println("LoginServlet初始化");
        }
    
    }
    
    八.RequestDispatcher

    RequestDispatcher 对象是由 Servlet 引擎创建的,用于封装一个要被其他资源调用的资源,如:Servlet、HTML、JSP 等,并可通过其中的方法将客户端的请求转发给所包装的资源

    该接口的方法常用于请求的转发,而 ServletResponse 接口中的 sendReadirect() 方法常用于请求的重定向

    1.不同

    1)forward() 转发:

    • 转发的地址栏是初次发出请求的地址
    • 转发只能在当前 WEB 应用内部转发
    • 在最终的 Servlet 中,request 对象和中转的 request 是同一对象,原有 request 对象属性不变
    • 转发过程中,在方法中使用的 " / " 代表当前 WEB 应用的根目录 

    2)sendReadirect() 重定向:

    • 重定向的地址栏不是初次发出的请求地址,而是最后响应的地址
    • 重定向可以跨 WEB 应用、服务器重新定位资源
    • 在最终的 Servlet 中,request 对象和中转的 request 不是同一对象,原有 request 对象属性全部失效,开始新的 request 对象
    • 重定向过程中,在方法中使用的 " / " 代表当前 WEB 站点的根目录 

    注:关于 WEB 应用与 WEB 站点的根目录

    http://localhost:8080/test/ 为例,test/ 为应用的根目录,http://localhost:8080/ 为站点的根目录

    2.原理
    1)forward() 方法
    • 客户端发送请求,Servlet1 做出处理
    • Servlet1 调用 forward() 方法,将请求转发给 Servlet2 来处理请求,为客户端服务
    • Servlet2 对客户端浏览器做出响应
    2)sendReadirect() 方法
    • 客户端发送请求,Servlet1 做出处理
    • Servlet1 调用 sendReadirect() 方法,将客户端的请求重新定位到 Servlet2
    • 客户端浏览器访问 Servlet2
    • Servlet2 对客户端浏览器做出响应

    [Tomcat]

    • Tomcat 容器中会话的有效时间可以在web.xml文件中设置,默认会话过期时间为30分 钟。

    • 默认会话时间是30分钟

    [JSP]

    代码片段,声明标识,jsp表达式

            JSP(JavaServer Pages)即Java服务器页面,是一种动态网页技术,允许在HTML中嵌入Java代码,用于创建动态Web内容。

    声明标识

    image-20250717150603532

    image-20250717150620783

    jsp表达式

    生命周期

    image-20250717150801561

    JSP 核心语法
    (1) 脚本元素
    <%-- 1. 声明(成员变量/方法) --%>
    <%! int count = 0; %>
    <%-- 2. 脚本片段(Java代码) --%>
    <% 
    String name = request.getParameter("name");
     out.println("Hello, " + name); 
    %>
    <%-- 3. 表达式(输出变量值) --%>
    <%= new Date().toLocaleString() %>
    
    (2) 指令(Directives)
    <%-- page指令:设置页面属性 --%>
    <%@ page language="java" contentType="text/html; charset=UTF-8" %>
    <%-- include指令:静态包含其他文件 --%>
    <%@ include file="header.jsp" %>
    
    (3) 动作标签(Action Tags)
    <%-- 动态包含 --%>
    <jsp:include page="footer.jsp" />
    <%-- 转发 --%>
    <jsp:forward page="error.jsp" />
    
    (4) 隐含对象

    JSP 默认提供9个可直接使用的对象(无需声明):

    • request(HttpServletRequest)、response(HttpServletResponse)

    • session(HttpSession)、application(ServletContext)

    • out(JspWriter,用于输出 , 向客户端发送文本形式实体内容)、pageContext(当前页面作用域)


    ** JSP 生命周期**

    1. 翻译阶段:JSP文件 → Servlet源码(.java)。

    2. 编译阶段:Servlet源码 → 字节码(.class)。

    3. 执行阶段:服务器加载编译后的类,处理请求并返回响应。