java小白第六天

4 篇文章 0 订阅

写在前面

本文是边看黑马b站视频边写的一片笔记, 文中大多图片都来自黑马视频. 旨在巩固学习以及方便后续查阅和供广大朋友们学习, 感谢黑马视频分享

03 javaWeb

在这里插入图片描述在这里插入图片描述

01 JDBC

java database connectivity
是java语言操作数据库的API, 一套标准接口

面向接口编程
在这里插入图片描述
在这里插入图片描述
代码示例

// 使用 jdbc api 连接数据库
    public static void testJDBC01(){

        String url = "jdbc:mysql://127.0.0.1:3306/test";
        String user = "root";
        String password = "root";

        try (
                // 2. 获取连接
                Connection connection = DriverManager.getConnection(url, user, password);

                // 4. 执行 sql
                Statement statement = connection.createStatement();
                )
        {
            // 1. 注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 3. 定义 sql
            String sql = "select * from account";

            // 4. 执行 sql
            ResultSet query = statement.executeQuery(sql);

            // 5. 处理结果
            System.out.println(query);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

01 jdbcAPI详解

在这里插入图片描述

01 DriverMapper

注册驱动
创建连接对象
在这里插入图片描述
在这里插入图片描述

02 Connection

获取执行 sql 对象
管理事务
在这里插入图片描述
在这里插入图片描述
代码示例
在这里插入图片描述

03 Statement

执行 sql 语句
在这里插入图片描述

04 ResultSet

在这里插入图片描述
在这里插入图片描述

05 PreparedStatement

在这里插入图片描述

06 数据库连接池

数据库连接池容器
在这里插入图片描述
在这里插入图片描述
使用步骤
在这里插入图片描述
代码示例

public static void main(String[] args) throws Exception{

        // 1.导入 jar 包

        // 2. 定义配置文件

        // 3. 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("01jdbc/src/druid.properties"));

        // 4. 获取数据库连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        // 5. 获取连接
        Connection connection = dataSource.getConnection();

        System.out.println(connection);
    }

配置文件

driverClassName=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/test?useServerPrepStmts=true

username=root

password=root

# 初始化连接数量
initialSize=5

# 最大连接数
maxActive=10

# 最大等待时间
maxWait=3000

02 maven

提供了一套标准化的项目结构
提供了一套标准化的构建流程(编译 测试 打包 发布)
提供了一套依赖管理机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

01 maven 安装配置

在这里插入图片描述
配置maven环境变量

  1. 新建系统变量 MAVEN_HOME 表示 maven 安装的 bin 目录
  2. 将其添加到 Path 路径中 %MAVEN_HOME%\bin
    在这里插入图片描述
    在这里插入图片描述
    修改配置文件
<!-- 修改本地仓库位置 -->
  <localRepository>H:\maven\apache-maven-3.8.4-bin\apache-maven-3.8.4\mven_repo</localRepository>
  <!-- 修改本地仓库位置 -->

  <!-- 添加 阿里云 远程仓库 -->
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
    <!-- 添加 阿里云 远程仓库 -->

02 idea配置maven

在这里插入图片描述
maven 坐标详解
在这里插入图片描述
创建、导入 maven 项目
在这里插入图片描述
在这里插入图片描述
使用坐标导入 jar 包
在这里插入图片描述
依赖范围
在这里插入图片描述

03 HTTP

hyper text transfer protocol
在这里插入图片描述
HTTP请求数据格式
在这里插入图片描述
HTTP响应数据格式
在这里插入图片描述
状态码文档网址:https://cloud.tencent.com/developer/chapter/13553

04 Tomcat

Web 服务器是一个应用程序, 对 HTTP 协议的操作进行封装, 使得程序员不必直接对协议进行操作, 让 Web 开发更加便捷。 主要功能是 提供网上信息浏览服务

作用

  • 封装 HTTP 协议操作, 简化开发
  • 可以将 web 项目部署到服务器中去, 对外提供网上浏览任务
  • Tomcat 是一个轻量级的 web 服务器, 支持 servlet、jsp少量 javaEE 规范
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

01 tomcat基本使用

官网下载, 直接解压即可, 解压目录就是安装目录

解压目录结构
bin ---- 可执行文件
config ---- 配置文件
lib ---- 依赖jar包
logs ---- 日志文件
temp ---- 临时文件
webapps ---- 存放web项目
work ---- 存放运行时数据 – jsp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

02 IDEA创建 maven web 项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
idea maven web 项目架构图
在这里插入图片描述

03 IDEA 集成 tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

05 MyBatis

MyBatis 是一款优秀的持久层框架, 用于简化 JDBC 开发
在这里插入图片描述
在这里插入图片描述
一些注意事项

  • pojo的属性名称需要和数据库表的字段名称一一对应, 若对应名称不一样,则不能自动封装
    • 当两者无法一样时(前者大驼峰, 后者可能下划线)

      1. sql 语句中起别名 (不太方便)
      2. sql 片段 (也不方便)
        在这里插入图片描述
      3. resultMap
        在这里插入图片描述

      在这里插入图片描述
      在这里插入图片描述

01 MyBatis 快速入门

在这里插入图片描述
目录架构
在这里插入图片描述

代码示例


01 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
<!--            数据库连接信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/world"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载mapper 映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
02 UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
每一张表对应一个mapper映射文件

mapper映射文件:
    + 有一个根标签
    <mapper namespace="mapper映射文件的标识">
        // 书写sql语句
        <select id="该sql语句的唯一标识,对应数据库操作的一个方法" resultType="sql语句返回结果类型">
            select * from Blog where id = #{id}
        </select>
    </mapper>
-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.it.pojo.User">
        select * from tb_user
    </select>
</mapper>
03 User
package com.it.pojo;

public class User {
   private Integer id;
   private String username;
   private String password;
   private String gender;
   private String addr;

    public User(Integer id, String username, String password, String gender, String addr) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.addr = addr;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

04 加载 mybatis-config.xml 文件, 访问数据库
package com.it.controller;

import com.it.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@WebServlet("/demo01")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 加载 mapper 配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取 SqlSession 对象, 执行 Sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 执行 Sql
        List<User> users = sqlSession.selectList("test.selectAll");

        // 释放资源
        sqlSession.close();

        // 请求转发 响应数据到页面
        req.setAttribute("users",users);
        req.getRequestDispatcher("user.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

02 Mapper 代理

在这里插入图片描述
在这里插入图片描述
目录架构
在这里插入图片描述

代码示例

01 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
<!--            数据库连接信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/world"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载mapper 映射文件-->
        <mapper resource="UserMapper1.xml"/>

        <!-- 使用包扫描的方式加载对应包下的所有mapper映射文件 -->
        <package name="com.it.mapper"/>
   </mappers>
</configuration>
02 Usermapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.it.mapper.UserMapper">
    <select id="selectAll" resultType="com.it.pojo.User">
        select * from tb_user
    </select>
</mapper>
03 pojo
package com.it.pojo;

public class User {
   private Integer id;
   private String username;
   private String password;
   private String gender;
   private String addr;

    public User(Integer id, String username, String password, String gender, String addr) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.addr = addr;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}
04 mapper(interface)
package com.it.mapper;

import com.it.pojo.User;

import java.util.List;

// mapper 代理接口
public interface UserMapper {
    // 根据 Sql 语句, 确定返回值的结果是一个还是集合
    // 在mapper映射文件中, 写对应类的全类名就好
    List<User> selectAll();

}

05 加载 mybatis-config.xml 访问数据库
package com.it.controller;

import com.it.mapper.UserMapper;
import com.it.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@WebServlet("/demo01")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 加载 mapper 配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取 SqlSession 对象, 执行 Sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 使用 mapper 代理执行 Sql
        //List<User> users = sqlSession.selectList("test.selectAll");
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        // 释放资源
        sqlSession.close();

        // 请求转发 响应数据到页面
        req.setAttribute("users",users);
        req.getRequestDispatcher("user.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

03 MyBatis 核心配置文件

官网
标签顺序:
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

04 增删改查

在这里插入图片描述

01 查询所有

在这里插入图片描述
测试环节代码示例
在这里插入图片描述

02 查询详情

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码示例

<!--
参数占位符
    #{}: 执行 sql 时, 会将#{}占位符替换为 ?, 将来自动设置参数值, 防止 sql 注入
        传递参数使用
    ${}: 拼接sql, 存在sql注入问题
        动态设置表名 列名使用
parameterType:
    用于设置参数类型,可省略
sql 语句中特殊字符处理
    特殊字符:sql语句的字符含义与xml文件的字符含义发生冲突时
    处理方法
        1. 转义字符(xml文件)
        2. CDATA 区,此区域内书写的字符都是普通文本, 没有xml字符含义

-->
    <select id="selectById" parameterType="int" resultType="com.it.pojo.User">
        select * from tb_user where id = #{id};
    </select>

03 条件查询

多参数传递

  • 散装参数
  • 对象参数
  • map集合参数
    在这里插入图片描述
    分析图
    在这里插入图片描述

04 动态条件查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

05 单条件动态查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

06 添加一条字段

在这里插入图片描述
在这里插入图片描述
插入一条id自增的字段, 返回字段id给对象user
在这里插入图片描述

07 修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

07 动态修改字段

在这里插入图片描述
在这里插入图片描述

08 删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

09 MyBatis 参数传递

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

09 注解开发

在这里插入图片描述

06 Servlet

  • Servlet 是 java 提供的一门动态 web 资源开发技术
    在这里插入图片描述
    Servlet 学习内容

01 Sevlet快速入门

在这里插入图片描述

02 servlet 执行流程

在这里插入图片描述

03 Servlet 生命周期

在这里插入图片描述

04 Servlet 方法

在这里插入图片描述

05 Servlet 体系结构

在这里插入图片描述

06 servlet urlPattern 配置

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

07 XML 配置方式编写 Servlet

在这里插入图片描述

07 Request & Response

01 Request继承体系

在这里插入图片描述

02 request获取请求数据

在这里插入图片描述
代码示例
在这里插入图片描述

03 request 通用方式获取请求参数

 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

04 请求转发

实现资源间的跳转访问, 共享请求数据资源
在转发的过程中可以修改 request 数据
在这里插入图片描述

// 请求转发  
// 使用 forward 关键字, 携带 request response 数据, 跳转到资源(Servlet) demo02
request.getRequestDispatcher("/demo02").forward(request,response);

在这里插入图片描述

05 response

在这里插入图片描述

01 response 设置响应数据

在这里插入图片描述

02 response 重定向

在这里插入图片描述
特点

  • 重定向地址栏发生变化,
  • 可以重定向到任意位置的资源
  • 两次请求, 不能再使用 request 共享数据

代码示例

// 重定向
resp.setStatus(302);
resp.setHeader("Location", "/java_web01/demo01");
// 重定向 简化方式
resp.sendRedirect("/java_web01/demo01");
03 路径问题

一般来说:

  • 浏览器使用时, 需要加虚拟目录
  • 服务端使用时, 不需要加虚拟目录
    在这里插入图片描述
04 response 响应数据

在这里插入图片描述
代码示例

// response 获取的输出流默认的编码集是ISO-8859-1 无法解析中文
resp.setContentType("text/html;charset=utf-8");
// 使用输出流相应数据
 //resp.setHeader("content-type","text/html"); // 设置response响应给浏览器的数据类型, 即告诉浏览器的解析方式
resp.getWriter().write("aaa");
 resp.getWriter().write("<h1>欢迎您</h1>");

// 输出字节流
// 读取文件
FileInputStream fis = new FileInputStream("A:\\闯关地图.png");

// 获取 response 字节输出流
ServletOutputStream os = resp.getOutputStream();

//输出数据
int len = 0;
byte[] buffer = new byte[1024];
while((len = fis.read(buffer)) != -1){
     os.write(buffer,0,len);
    }
// 使用 commons-io
IOUtils.copy(fis,os);

// 关闭流
fis.close();

08 JSP

java server pages
java服务端页面

在这里插入图片描述
在这里插入图片描述

01 快速入门

在这里插入图片描述
JSP 本质上就是一个 Servlet
JSP 文件在被访问时, 由 JSP容器(Tomcat)将其转换位 java 文件 (Servlet), 由JSP容器将其编译成字节码文件, 提供服务
在这里插入图片描述

02 JSP 脚本

在这里插入图片描述

03 jsp 缺点

在这里插入图片描述

04 EL 表达式

用于简化 jsp 页面的 java 代码, 用于获取数据
在这里插入图片描述
在这里插入图片描述
使用JSTL标签结合EL获取Servlet中request域中的status的值
在这里插入图片描述

05 JSTL 标签

  • JSP标准标签库(JSP Standarded Tag Library), 使用标签取代 JSP 页面上的 java 代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
c:foreach 代码示例
在这里插入图片描述

06 MVC模式与三层架构

MVC模式
在这里插入图片描述
三层架构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mvc 案例

在这里插入图片描述
sql 语句

USE world;

DROP TABLE IF EXISTS tb_brand;

CREATE TABLE tb_brand
(
	id INT PRIMARY KEY AUTO_INCREMENT,
	brand_name VARCHAR(20),
	company_name VARCHAR(20),
	ordered INT COMMIT("排序字段"),
	description VARCHAR(100),
	STATUS INT
)

INSERT INTO tb_brand (brand_name, company_name, ordered, description, STATUS)
VALUES('三只松鼠','三只松鼠股份有限公司',5,'好吃不上火',0),
	('华为','华为技术有限公司',100,'华为致力于把数字世界带入每个人,每个家庭,每个组织,构建万物互联的智能世界',1),
	('小米','小米科技有限公司',50,'are you ok',1)

具体功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码示例
brand_demo04

09 会话跟踪技术

在这里插入图片描述
在这里插入图片描述

01 Cookie

01 Cookie基本使用

客户端会话技术
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Session

将数据存储在服务端,更加安全
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

10 Fileter

JAVAWeb 三大组件 Servlet Filter Listener
在这里插入图片描述
在这里插入图片描述

01 Filter快速入门

在这里插入图片描述

02 Filter 执行流程

在这里插入图片描述

代码示例 filter示例

package com.it.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebFilter("/*")
public class DemoFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 放行前数据处理
            // 放行前 request 有请求数据 response 没有响应数据
            // 所以放行前只能处理request数据
        System.out.println("filter...");

        // 放行
        filterChain.doFilter(servletRequest, servletResponse);

        // 返回
            // 返回后,资源响应数据 即 response 有了数据
            // 此时, 可以处理 response 数据, 即 在返回处 处理 response 数据
    }

    public void destroy() {

    }
}

03 Filter拦截路径配置

在这里插入图片描述

04 Filter 过滤器链

在这里插入图片描述

案例

在这里插入图片描述

过滤器拦截时,还需放行相关资源
在这里插入图片描述
代码示例-登录拦截

package com.it.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter("/*")
public class LoginFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        // 放行有关登录的资源

        // 创建数组 存储需要放行的资源
        String[] urls = {"/css/","/images/",
                "/login.jsp","/loginServlet",
                "/register.jsp","/register"};

        String url = req.getRequestURL().toString();

        for (String u : urls) {
            if (url.contains(u)){
                // 需要放行

                // 放行
                System.out.println("111未登录");
                filterChain.doFilter(req,servletResponse);

                // 结束方法
                    // 即 需要放行的资源执行完毕, 返回此处时, 后续代码不需要执行
                return;
            }
        }

        // 不是和登录相关的资源
        // 判断用户是否登录 在loginServlet中,将当前登录用户的信息存储到 session 中, 这里可以使用 session
        HttpSession session = req.getSession();
        Object user = session.getAttribute("user");

        if (user != null){
            System.out.println("未登录");
            // 已登录
            // 放行
            filterChain.doFilter(req,servletResponse);
        }else {
            // 未登录
            System.out.println("未登录");
            req.setAttribute("login_msg","您尚未登录,请登录!");
            req.getRequestDispatcher("/login.jsp").forward(req,servletResponse);
        }

    }

    public void destroy() {

    }
}

11 Listener

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值