Java面试宝典书籍-JavaWEB基础

本文主要涵盖了JavaWEB基础的面试知识点,包括JDBC技术、Http协议、Cookie和Session、jsp技术以及xml技术。讲解了JDBC的原生操作流程和PreparedStatement的优势,Http协议的长连接、状态码和GET与POST的区别,Cookie与Session的特性及其在单点登录中的应用,JSP与Servlet的区别和运行机制,以及XML的基本概念和解析器类型。

JavaWEB基础  (注:知识都来源于Java面试宝典书籍,此处只为学习)

一、JDBC技术

1. 原生jdbc操作数据库流程

  • Class.forName()加载数据库连接驱动

  • DriverManager.getConnection()获取数据连接对象

  • 根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、PreparedStatement

  • 执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX()

  • 关闭结果集、关闭会话、关闭连接

import java.sql.*;
 
public class MySQLDemo {
 
    // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
 
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";
 
 
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456";
 
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);
        
            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM websites";
            ResultSet rs = stmt.executeQuery(sql);
        
            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");
    
                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 站点名称: " + name);
                System.out.print(", 站点 URL: " + url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}
//准备四大参数
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/数据库名"+"?useServerPrepStmts=true&cachePrepStmts=true";//后面的参数作用是打开mysq预处理功能;
String username="root";
String password="123456";
 
//加载驱动类
Class.forName(driverClassName);
//得到con连接对象
Connection con=DriverManager(url,username,password);
 
//得到PrepareStatement对象
//通过con对象得到PrepareStatement对象
String sql="select * from user where username=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
//给sql中的参数赋值
pstmt.setString(1, myUserName);
pstmt.setString(2, myPassword);
		
ResultSet rs=pstmt.executeQuery();//调用查询方法
if(rs.next()){
	System.out.println("登录成功");
}
else{
	System.out.println("用户名或密码错误");
}
 
//关闭资源(倒关)
rs.close();
pstmt.close();
con.close();

2. 为什么要使用PreparedStatement

  • 速度快
  • 作为statement的子类,拥有Statement的所有功能
  • 不再使用Statement:1) 代码的可读性和可维护性.Statement 需要不断地拼接,而 PreparedStatement 不会  2) 

    PreparedStatement 尽最大可能提高性能.DB 有缓存机制,相同的预编译语句再次被调用不会再次需要编译  3) 最重要的一点是极大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 传入的内容不会和 sql 语句发生任何匹配关系

3. 关系数据库中连接池的机制

  • 从连接池获取或创建可用连接

  • 使用完毕之后,把连接返回给连接池

  • 在系统关闭前,断开所有连接并释放连接占用的系统资源

  • 能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值

概念:

  • 最小连接池
  • 最大连接池

三、Http协议

1. http的长连接和短连接

  • 长连接:数据传输保持TCP连接不断开,默认长连接
  • 短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

2. HTTP/1.1与HTTP/1.0区别

1) 可扩展性

  • HTTP/1.1 在消息中增加版本号,用于兼容性判断

  • HTTP/1.1 增加了 OPTIONS 方法,它允许客户端获取一个服务器支持的方法列表

  • 为了与未来的协议规范兼容,HTTP/1.1 在请求消息中包含了 Upgrade 头域,通过该头域,客户端可以让服务器知道它能够支持的其它备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端进行通信

2) 缓存

HTTP/1.0中,使用Expire头域来判断资源的fresh或stale,并使用条件请求来判断资源是否有效。HTTP/1.1 在 1.0 的基础上加入了一些 cache 的新特性,当缓存对象的 Age 超过 Expire 时变为stale 对象,cache 不需要直接抛弃 stale 对象,而是与源服务器进行重新激活(revalidation)

3) 带宽优化

4) 长连接

5) 消息传递

6) Host头域

7) 错误提示

3. 常见的状态码

  • 200:OK--客户端请求成功
  • 301:请求的URL已移走
  • 302:found重定向
  • 400:Bad Request //客户端请求有语法错误,不能被服务器所理解
  • 401:Unauthorized
  • 403:Forbidden
  • 404:Not Found
  • 500:Internal Server Error
  • 503:Server Unavailable

4. Get和Post区别

  • 当get请求时,URL后面就带着参数(以?分割 URL 和传输数据,参数之间以&相连),而Post不带
  • GET 方式提交的数据最多只能是 1024 字节,理论上 POST 没有限制,可传较大量的数据。其实这样说是错误的,不准确的。各种浏览器支持的URl的长度是不一样的

  • POST 的安全性要比 GET 的安全性高

  • Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在 FORM(表单)中,Method默认为"GET",实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!

5. http中重定向和请求转发的区别:转发是服务器行为,重定向是客户端行为

  • 重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失

  • 请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失

四、Cookie和Session

1. Cookie和Session的区别

Cookie :是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。 以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie

Session :是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在 应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去

区别

  • 无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie

  • 在存储的数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象

2. session共享

不同的server之间共享session。案列:在不同的浏览器上登录app,能够实现session共享

  • reids:
  • cookie:

3. 在单点登录中,如果cookie被禁用怎么办

单点登录的原理是后端生成一个 session ID,然后设置到 cookie,后面的所有请求浏览器都会带上 cookie, 然后服务端从 cookie 里获取 session ID,再查询到用户信息。所以,保持登录的关键不是 cookie,而是通过 cookie 保存和传输的 session ID,其本质是能获取用户信息的数据。除了 cookie,还通常使用 HTTP 请求头来传 输。但是这个请求头浏览器不会像 cookie 一样自动携带,需要手工处理

五、jsp技术

1. jsp,servlet

jsp:本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例

servlet:是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口

区别:

  • jsp 是 html 页面中内嵌的 Java 代码,侧重页面显
  • Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制,mvc 设计思想中 jsp 位于视图层,servlet 位于控制层Jsp 运行机制

JVM 只能识别 Java 类并不能识别 jsp 代码!web 容器收到以.jsp 为扩展名的 url 请求时,会将访问请求交给 tomcat 中 jsp 引擎处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译 servlet 源程序生成.class 文件,再有 web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互

2. jsp域对象和内置对象及他们的作用

四大域对象

  • pageContext page 域-指当前页面,在当前 jsp 页面有效,跳到其它页面失效

  • request request 域-指一次请求范围内有效,从 http 请求到服务器处理结束,返回响应的整个过程。在这个过程中使用 forward(请求转发)方式跳转多个 jsp,在这些页面里你都可以使用这个变量

  • session session 域-指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用

  • application context 域-指只能在同一个 web 中使用,服务器未关闭或者重启,数据就有效

九大对象

  • request
  • response
  • session
  • out
  • pagecontext
  • page
  • exception
  • application
  • config

六、xml技术

1. 什么是xml,使用xml的优缺点,xml的解析器有几种,分别有什么区别

定义:xml 是一种可扩展性标记语言,支持自定义标签(使用前必须预定义)使用 DTD 和 XML Schema 标准化 XML 结 构

优缺点:

  • 优点:用于配置文件,格式统一,符合标准;用于在互不兼容的系统间交互数据,共享数据方便

  • 缺点:xml 文件格式复杂,数据传输占流量,服务端和客户端解析 xml 文件占用大量资源且不易维护

解析器:

  • DOM
  • SAX

​​​​​​​区别:

  • 使用 DOM 解析,xml 文档以 DOM 树形结构加载入内存
  • 而 SAX 采用的是事件模型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值