在 Linux 系统中,Python 是一个非常流行的编程语言,被广泛应用于 Web 开发、数据分析、人工智能等多个领域。本文将详细介绍如何在 CentOS 操作系统中安装和配置 Python 环境。 安装步骤1. 解压 Python 包首先,你需要下载 Python 的源代码包并将其解压到你的服务器上。由于你要求不使用外部工具安装 Python,我们将手动进行这一步。 12# 假设你已经下载了 Python 的源码压缩包到 /usr/local/src 目录下tar -xzf Python-3.8.x.tar.gz -C /usr/local/src 2. 进入解压后的文件夹接下来,进入 Python 的源代码目录: 1cd /usr/local/src/Python-3.8.x 3. 配置和安装 Python现在,我们可以执行 configure 脚本来配置 Python 的编译选项。如果你需要指定安装目录,可以添加 --prefix 参数。 12./configure --prefix=/opt/python38make && make install ...
Redis 是一个开源的内存数据结构存储系统,它提供了多种数据类型和丰富的操作命令,使得它在处理快速读写和高并发场景下表现出色。下面将详细介绍 Redis 的主要特性和应用场景。 1. 支持持久化RDB 持久化RDB 是 Redis 的本地持久化方式,通过周期性地将内存中的数据写入磁盘来保存数据状态。在 redis.conf 配置文件中,可以通过设置定时任务或手动触发 RDB 快照。 AOF 持久化AOF(Append Only File)是另一种持久化方法,它记录每次写操作到文件中。当 Redis 重启时,它会重新执行这些命令来重建数据状态。开启 AOF 持久化对于防止数据丢失非常有用,但它可能会消耗更多磁盘空间。 2. 丰富的数据类型Redis 支持多种数据类型,包括: String:最简单的键值对存储。 List:列表,可以用于消息队列等场景。 Set:集合,支持成员的唯一性和操作如求交集、并集等。 Sorted Set:有序集合,常用于排行榜应用。 Hash:哈希表,适合用于存储结构化数据。 这些数据类型提供了高效的数据结构和丰富的操作命令,使得 Redis 可以适 ...
RESTful API 是一种网络应用架构风格,强调通过统一的接口和资源操作设计 API。它使用 HTTP 协议中的不同方法来创建、读取、更新和删除资源,让开发者和用户能够直观地理解和操作应用程序。 RESTful API 设计原则1. 资源导向RESTful API 以资源为中心进行设计。每个资源都有一个唯一的 URI,客户端可以通过这个 URI 访问相应的资源。 URL 示例: GET /zoos:查看所有动物园 POST /zoos:创建一个新动物园 GET /zoos/1:获取指定动物园的信息 2. 方法使用RESTful API 使用 HTTP 协议中的不同方法来执行不同的操作: GET:从服务器检索资源。 POST:在服务器上新建一个资源。 PUT:更新资源(客户端提供改变后的完整资源)。 PATCH:部分更新资源(客户端提供改变的属性)。 DELETE:删除资源。 3. 状态码使用RESTful API 使用标准的 HTTP 状态码来表示请求的结果: 200 OK:成功检索数据 201 Created:创建新资 ...
Web 服务器一旦发出响应,一个请求响应过程就结束了.当再次发出请求时,Web 服务器不记得曾就做过的请求,也不记得给用户发出过响应.,这就是 http 的无状态模式 当需要跨多个请求需要保留与客户端会话状态时,我们有 4 种解决方案 表单隐藏字段<input type="hidden" name="userName" value="…">作用: 对用户在网上的访问进行会话跟踪 为服务器提供预定义的输入 存储动态产生的网页的上下文信息 缺点: 只有当每个网页是动态生成的才有效 Cookie将数据已键值对的形式通过响应保存在客户端方法: Cookie(name,value) get/setComment(String comment): 注释 get/setDomain(String domainPattern): 得到/设置应用 Cookie 的域 setMaxAge(int lifetime) 设置过期时间,默认为负数,表示在关闭浏览器后过期 getMaxAge() g ...
APP 服务端的 Token 验证通过拦截器对使用了 @Authorization 注解的方法进行请求拦截,从 http header 中取出 token 信息,验证其是否合法。非法直接返回 401 错误,合法将 token 对应的 user key 存入 request 中后继续执行。具体实现代码: 1234567891011121314151617181920212223242526272829303132public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果不是映射到方法直接通过 if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerM ...
什么是 RESTREST (Representational State Transfer) 是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的主要特点有: - 每一个资源都会对应一个独一无二的 url - 客户端通过 HTTP 的 GET、POST、PUT、DELETE 请求方法对资源进行查询、创建、修改、删除操作 - 客户端与服务端的交互必须是无状态的 使用 Token 进行身份鉴权网站应用一般使用 Session 进行登录用户信息的存储及验证,而在移动端使用 Token 则更加普遍。它们之间并没有太大区别,Token 比较像是一个更加精简的自定义的 Session。Session 的主要功能是保持会话信息,而 Token 则只用于登录用户的身份鉴权。所以在移动端使用 Token 会比使用 Session 更加简易并且有更高的安全性,同时也更加符合 RESTful 中无状态的定义。 交互流程 客户端通过登录请求提交用户名和密码,服务端验证通过后生成一个 Token 与该用户进行关联,并将 Token 返回给客户端。 客户 ...
作用: 两者都可以用来装配 bean,可以写在字段上或写在 setter 方法上。 默认注入方式: @Autowired (Spring 注解): 默认按类型 (byType) 注入。 @Resource (J2EE 注解): 默认按名称 (byName) 注入。 required 属性: @Autowired: 默认要求依赖对象必须存在,可以设置 required=false 允许 null 值。 @Resource: 默认情况下,找不到匹配的 bean 会抛出异常。 指定名称: @Autowired: 可以结合 @Qualifier 注解指定 bean 的名称。 @Resource: 可以直接在注解中通过 name 属性指定 bean 的名称。 代码示例: 1234567// 使用 @Autowired@Autowired@Qualifier("baseDao")private BaseDao baseDao;// 使用 @Resource@Resource(name="baseDao")private Ba ...
使用 Intellij idea 整合 SpringMVC+Spring+Mybatis 框架,基于 Annotation. intellij 配置1.新建一个 Spring 工程,勾选 SpringMVC 和 Web Application 支持,不选择下载 jar 包,而是自己导入 jar 包 2.新建好项目之后的包结构如下: 3.在 WEB-INF 目录下新建 classes 和 lib 这 2 个文件夹F4 进入项目设置页面.a. 设置编译后的 class 文件输出路径 b. 将 lib 添加到构建路径中 c. 添加 Tomcat jar 包 4.配置 Tomcat 服务器 因为以前设置过默认配置,这里就简单的设置一下就可以了 5.将需要的 jar 包复制到 lib 文件夹下 xml 配置1.在 src 目录下新建: spring-mvc.xml SpringMVC 使用 spring-config.xml Spring 容器使用 mybatis-config.xml Mybatis 配置文件 2.web.xml 的配置 a.配置 SpringMVC 的 ...
SpringMVCSimpleMappingExceptionResolver在 Spring 的配置文件 applicationContext.xml 中增加以下内容: 123456789101112131415<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为 exception --> <property name="exceptionAttribute" value="ex"></property> ...
框架模式和设计模式的区别有很多程序员往往把框架模式和设计模式混淆,认为 MVC 是一种设计模式。实际上它们完全是不同的概念。框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块; 代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示; 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。框架模式有哪些?MVC、MTV、MVP、CBD、ORM 等等;框架有哪些?C++ 语言的 QT、 ...
SSH 整合时实现了简单的登录功能,这次实现简单的注册功能.需要改动的地方下面会提到,没有提到的地方就不改动 要求1.登录 register.jsp 页面,填入必要信息,点击注册;2.如果成功,跳转到 success.jsp,并显示出所有的用户信息;3.如果注册失败,则跳转到 error.jsp 页面4.实现分页功能,实现删除功能 实现1.新建 t_user 表 12345678910111213141516171819202122232425262728293031323334353637-- ------------------------------ Table structure for t_user-- ----------------------------DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `f_name` varchar(255) DEFAULT NULL, `f_password` varchar( ...
1.mapper.xml 配置 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191<?xml versio ...
新时代码农
未读正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。 对于缓存数据更新机制,当某一个作用域 (一级缓存 Session/二级缓存 Namespaces) 的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。 一级缓存测试1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import me.gacl.domain.User; ...
一对一关联1.要求假设一间房子只有一把锁,要求通过锁找到房子2.创建表和数据 12345678910111213141516171819202122232425262728293031323334353637SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for t_lock-- ----------------------------DROP TABLE IF EXISTS `t_lock`;CREATE TABLE `t_lock` ( `lock_id` int(11) NOT NULL AUTO_INCREMENT, `f_type` varchar(255) DEFAULT NULL, `fk_home_id` int(11) DEFAULT NULL, PRIMARY KEY (`lock_id`), KEY `fk_home_id` (`fk_home_id`), CONSTRAINT `t_lock_ibfk_1` FOREIGN KEY (`fk_ ...