Tomcat的部署、单体架构、session会话、spring

一、Tomcat的部署

二.web项目在tomcat服务中如何运行:

1.web项目源码部署在服务器的webapps目录里面

2.将web项目打包(war),部署在服务器的webapps目录里面。

三 单体架构和前后端分离

单体架构是将所有功能模块(包括前端界面、后端逻辑、数据库交互等)打包成一个独立的应用程序,部署在单一服务器上。例如早期的 Java Web 项目(JSP+Servlet+MySQL)、PHP 项目(PHP+HTML+MySQL)等。

前后端分离架构将应用拆分为前端后端两个独立的部分:

  • 前端:负责用户界面(UI)和交互逻辑,通过浏览器或客户端运行(如 Vue、React、Angular 开发的单页应用)。
  • 后端:负责业务逻辑和数据处理,以 API 接口(如 RESTful API、GraphQL)的形式向前端提供数据。
  • 前后端通过 HTTP/HTTPS 协议通信(如前端用 Axios 调用后端 API),后端不参与页面渲染。

       前后端分析详解

四、Session会话

在 Web 开发中,Session 会话是一种服务器端的机制,用于跟踪和识别来自同一客户端的多次请求,解决 HTTP 协议 “无状态” 的问题。通过 Session,服务器可以在多个请求之间保持用户的状态信息(如登录状态、购物车内容等)。

一、核心概念

  1. HTTP 无状态
    每次 HTTP 请求都是独立的,服务器无法自动识别 “两次请求是否来自同一用户”。例如用户登录后访问其他页面,服务器无法直接知道该用户已登录。

  2. Session 的作用
    服务器为每个客户端创建一个唯一的 “会话标识”,并在多次请求间保持这个标识,从而 “记住” 用户状态。

二、Session 的工作流程

  1. 创建 Session
    当用户首次访问服务器时,服务器自动创建一个Session对象,并为其分配唯一的Session ID(如JSESSIONID=123456)。

  2. 存储 Session ID
    服务器通过CookieSession ID发送到客户端浏览器(默认保存在内存中,浏览器关闭后失效)。

  3. 传递 Session ID
    客户端后续每次请求时,会自动通过 Cookie 将Session ID带回服务器。

  4. 识别 Session
    服务器根据Session ID查找对应的Session对象,获取存储的用户状态数据。

三、Session 的代码实现(以 Java Servlet 为例)

1. 获取或创建 Session
// 在Servlet中获取当前请求的Session
// 参数false表示:若Session不存在则返回null(不创建新Session)
// 参数true(默认)表示:若Session不存在则创建新Session
HttpSession session = request.getSession();// 或显式指定
HttpSession session = request.getSession(true); // 创建新Session(若不存在)
HttpSession session = request.getSession(false); // 返回null(若不存在)
2. 存储和获取 Session 数据
// 存储数据到Session(类似Map,键值对存储)
session.setAttribute("username", "张三"); // 存储用户名
session.setAttribute("isLogin", true);   // 存储登录状态// 从Session获取数据
String username = (String) session.getAttribute("username");
Boolean isLogin = (Boolean) session.getAttribute("isLogin");// 移除数据
session.removeAttribute("username");

3. Session 的生命周期管理
// 获取Session ID
String sessionId = session.getId();// 设置Session超时时间(单位:秒,默认30分钟)
session.setMaxInactiveInterval(1800); // 30分钟// 手动销毁Session(如用户退出登录)
session.invalidate();

 五、Spring

一.什么是spring
1.spring是一个轻量级的javaEE开发框架
2.spring是一个开源的框架


二.spring框架的搭建
1.导入spring的依赖包
spring-context(需要)
2.创建spring的配置文件(XML)

三.spring的IOC
1.IOC:控制反转
Spring IOC(Inversion of Control,控制反转)是 Spring 框架的核心思想和核心功能之一,
它彻底改变了传统 Java 应用中对象的创建和管理方式,主要体现为 “将对象的创建、依赖关系的
维护权从代码中转移到容器中”。
控制:指的是对象的创建和管理
反转:指的是对象的创建和管理的控制权发生了反转,由spring容器维护

   SpringIOC使用:
1.项目中创建类
2.将类注入springIOC容器
3.由springIOC容器以解耦的方式,创建对象

四.Demo2与Demo3的区别
Demo2                       Demo3
BeansFactory               ApplicationContext
getBean(key)               getBean(id)
beans.properties           springconfig.xml

这个类是一个简单的工厂类(BeanFactory),主要用于通过配置文件动态创建 Java 对象(通常称为 "Bean"),这是一种典型的工厂模式控制反转(IoC) 思想的实现。

package com.apesource.factory;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class BeanFactory {static Properties properties=null;// 静态属性,用于存储从配置文件加载的键值对static InputStream is=null; // 静态输入流,用于读取配置文件static {// 静态代码块,在类加载时执行,确保配置文件只加载一次try {properties=new Properties();// 初始化 Properties 对象// 通过类加载器从类路径获取配置文件的输入流is=BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");properties.load(is);//加载配置文件内容到 Properties 对象} catch (IOException e) {throw new RuntimeException(e);}}//按照要求获取对象// 核心方法:根据配置文件中的键获取对应的对象实例public static Object getBean(String key){try {String path=properties.getProperty(key);// 从配置中获取类的全限定名return Class.forName(path).newInstance();} catch (Exception e) {return null;}}
}

这段代码是一个使用 Spring 框架的测试类,主要功能是通过 Spring 的 IOC(控制反转置)容器获取并使用对象,展示了 Spring 框架的核心特性之一 —— 依赖注入。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--将类注入springIOC容器语法:<bean id="唯一标识" class="包名.类名"></bean>--><bean id="daoImp" class="com.apesource.dao.UserDaoImp"></bean><bean id="date" class="java.util.Date"></bean></beans>
package com.apesource;import com.apesource.dao.IUserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;public class Test01 {public static void main(String[] args) {//1.加载spring主配值文件 获取springIOC容器核心对象ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springconfig.xml");//2.向spring容器中索取对象IUserDao dao =(IUserDao) applicationContext.getBean("daoImp");dao.save();Date date=(Date) applicationContext.getBean("date");System.out.println(date);}
}

这段代码体现了 Spring 框架的核心思想:

对象的创建不再由开发者手动通过new关键字创建,而是由 Spring 容器负责

对象之间的依赖关系由 Spring 容器管理和注入

当需要更换实现类时,只需修改配置文件springconfig.xml,无需修改 Java 代码,实现了解耦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89904.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海康威视视觉算法岗位30问及详解

海康威视视觉算法岗位30问及详解 前言 视觉算法工程师是人工智能领域的热门岗位&#xff0c;尤其在安防、自动驾驶、工业检测等行业有着广泛应用。海康威视作为行业龙头&#xff0c;对视觉算法岗位的要求较高&#xff0c;面试问题既考察基础理论&#xff0c;也关注工程实现。本…

14.7 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀

文章目录 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀 指令微调格式:Alpaca Format 深度解析 14.3.1 Alpaca 格式诞生背景与技术价值 14.3.2 Alpaca 格式结构解析 14.3.3 实战 Dolly-15K 数据转 Alpaca 格式 14.3.4 Alpaca 格式的工程化实践 14.3.5 格式扩展与挑战应…

42.sentinel实现线程隔离

线程隔离有两种实现方式: 1.线程池隔离 优点: 1.支持主动超时,线程池中的线程都是可控的,可以停掉某个线程。 2.支持异步调用,每个请求都是一个独立的线程,线程之间不受影响。 缺点: 线程的额外开销比较大 适用场景: 低扇出(一个微服务,不会依赖很多微服务)…

【过拟合和欠拟合】——深度学习.全连接神经网络

目录 1 概念认知 1.1 过拟合 1.2 欠拟合 1.3 如何判断 2 解决欠拟合 3 解决过拟合 3.1 L2正则化 3.1.1 数学表示 3.1.2 梯度更新 3.1.3 作用 3.1.4 代码实现 3.2 L1正则化 3.2.1 数学表示 3.2.2 梯度更新 3.2.3 作用 3.2.4 与L2对比 3.2.5 代码实现 3.3 Drop…

Java设计模式之行为型模式(备忘录模式)应用场景分析

最近看到一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 一、用户交互与编辑操作 文本编辑器撤销/重做 场景描述&#xff1a;用户编辑文档时&#xff0c;可通过CtrlZ撤销误操作&#xff0c;或通过Ctr…

5.Java的4个权限修饰符

1.private&#xff08;私有访问权限&#xff09;最严格的访问修饰符&#xff0c;它限定被修饰的成员仅能在声明它的当前类内部访问。其他任何外部类都无法直接访问该成员。作用&#xff1a;强制封装&#xff0c;确保类内部实现细节的隐藏性和数据安全性2.默认权限&#xff08;包…

Linux入门介绍

目录 一、环境 二、Linux发展历史 1、计算机 2、操作系统 四、认识Linux的 内核版本名称 一、环境 一般是Centos 7 Ubuntu 20.04 / 22.04 前者已经停止更新与维护&#xff0c;但很多公司还在使用前者 二、Linux发展历史 1、计算机 1945年 2.14---埃尼阿克---军事用处&…

spring boot2升级boot3

spring boot2升级boot3 整体流程如下 1、借助于开源的自动化代码重构工具OpenRewrite&#xff0c;快速地进行代码重构等 2、相关坐标升级更改 3、配置文件属性更改 4、打包、构建与运行验证 1. 前期准备工作第一步&#xff1a;确保升级之前项目是可编译运行的第二步&#xff1a…

mac终端设置代理

在Mac上配置终端走代理&#xff0c;需设置终端&#xff08;如zsh或bash&#xff09;使用HTTP/HTTPS/SOCKS代理&#xff0c;以便命令行工具&#xff08;如curl、git、npm&#xff09;通过代理访问网络。以下是详细步骤&#xff0c;适用于macOS 10.15及以上版本。 前提条件 代理服…

VSTO Excel中打开WinForm.ShowDialog()后,如果要使用当前的wb.Application在后台操作其他Excel文件(保持隐藏状态)

在VSTO Excel中打开WinForm.ShowDialog()后&#xff0c;如果要使用当前的wb.Application在后台操作其他Excel文件&#xff08;保持隐藏状态&#xff09;&#xff0c;可以通过以下几种方式实现&#xff1a; 方法一&#xff1a;设置Application属性控制可见性 // 在WinForm中获取…

【网络安全】DDOS攻击

如果文章不足还请各位师傅批评指正&#xff01;你有没有过这种经历&#xff1a;双 11 抢券时页面卡成幻灯片&#xff0c;游戏团战突然全员掉线&#xff0c;刷视频时进度条永远转圈圈&#xff1f;除了 “网渣”&#xff0c;可能还有个更糟的原因 —— 你正被 DDoS 攻击 “堵门”…

第9天 | openGauss中一个表空间可以存储多个数据库

接着昨天继续学习openGauss,今天是第9天了。今天学习内容是o一个数据库可以存储在多个表空间中。 老规矩&#xff0c;先登陆墨天轮为我准备的实训实验室 rootmodb:~# su - omm ommmodb:~$ gsql -r作业要求 1.创建表空间newtbs1 omm# CREATE TABLESPACE newtbs1 RELATIVE LOCATI…

H3C路由器模拟PPPOE拨号

拓扑简图 效果图 PPPoE服务器端脚本 1. 基础配置 system-view sysname PPPoE-Server # 可选,设置设备名称2. 创建本地用户(认证账号)​ local-user pppuser class network # 创建网络类用户 password simple 123456 # 设置密码(PAP/CHAP共用) service-type ppp #

Github Actions Workflows 上传 Dropbox

一、注册 访问 https://www.dropbox.com/register选择 "个人" 如果想免费使用&#xff0c;一定要选择 “继续使用2GB的Dropbox Basic 套餐”&#xff0c;如下&#xff1a; 二、在 Dropbox 中 创建app 需要去注册的邮箱中验证一下邮箱.访问 https://www.dropbox.com…

生产管理系统实现生产全过程可视化

随着现代工业的不断发展&#xff0c;智能制造、数字化转型已成为企业提高竞争力的重要途径。生产管理作为企业运营的核心环节&#xff0c;直接关系到产品质量、生产效率以及成本控制。传统的生产管理方式大多依赖手工记录和经验管理&#xff0c;存在信息滞后、数据不一致、响应…

CSS实现背景色下移10px

众所周知,背景颜色是不能移动的,通常是填充满当前容器。 不过可以想想其它办法。。 🧐 利用css3的线性属性linear,在垂直方向向下推要移动的距离设成透明颜色,能在视觉上巧妙实现下移的效果。 .title {height: 20px;background: linear-gradient(to bottom,rgba(255, …

访问 gitlab 跳转 0.0.0.0

1、检查防火墙是否关闭2、检查服务器端口是否被占用3、检查服务器是否对外开放80端口&#xff08;gitlab 默认使用80端口&#xff09;以阿里云服务器为例如果没有SSH 、HTTP、HTTPS 开放&#xff0c;需要增加规则进行添加点击确定即可。

Kotlin集合与空值

我们已经学习了 Kotlin 中的空安全&#xff08;null safety&#xff09;。在本节中&#xff0c;我们将讨论如何处理集合中的空值&#xff08;null&#xff09;&#xff0c;因为集合比其他数据类型更复杂。我们还将讨论如何处理可空元素时常用的便利方法。 集合与空值 可空集合和…

nextjs编程式跳转

Next.js 中&#xff0c;你可以通过多种方式实现编程式导航&#xff08;即通过代码而非 <Link> 组件跳转页面&#xff09;。以下是完整的实现方法&#xff1a; 1. 使用 useRouter Hook&#xff08;函数组件&#xff09; 这是最常用的方法&#xff0c;适用于函数组件&#…

Git Remote命令介绍:远程仓库管理

一、Git Remote 是什么 git remote主要用于管理远程仓库&#xff0c;可以轻松地与远程仓库进行交互&#xff0c;实现代码的共享与同步 。 二、Git Remote 的作用 &#xff08;一&#xff09;连接桥梁 假设你正在参与一个大型的 Web 应用开发项目&#xff0c;团队成员分布在…