ThinkPHP3.2.3学习笔记1---控制器

2023-11-13

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite以及PDO等多种数据库,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。

Via: http://baike.baidu.com/view/908071.htm

 

ThinkPHP3.2完全开发手册网址:http://document.thinkphp.cn/, TP框架的开发手册写得比较详细,只要静下心来学习,学会使用问题不大,如果想更加深入的学习,TP框架的源代码最好能看懂,如果能做二次开发就更好了。

学习的时候心要安静很重要,不能三心二意,心态不能浮躁,坚持下去,一定会有所收获的。

 

一、定义控制器
Application/Home/Controller/IndexController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class UserController extends Controller {
 5     public function index(){
 6         //Home\Controller\UserController::index this is news controller Home\Controller\UserController
 7         echo __METHOD__ . ' this is news controller ' . __CLASS__;
 8     }
 9 }
10 ?>

 

Home\UserController类就代表了Home模块下的User控制器,而index操作就是Home\IndexController类的index(公共)方法。
当访问 http://serverName/Home/User/index or http://serverName/index.php/Home/User/index 后会输出:
Home\Controller\UserController::index this is news controller Home\Controller\UserController


控制器的名称采用驼峰法命名(首字母大写), 操作方法的定义必须是公共方法,否则会报操作错误


二、设置操作方法的后缀
因为操作方法就是控制器的一个方法,所以遇到有和系统的关键字冲突的方法可能就不能定义了,这个时候我们可以设置操作方法的后缀来解决,例如:
'ACTION_SUFFIX' => 'Action', // 操作方法后缀

将'ACTION_SUFFIX' => 'Action',加入到文件Application/Home/Conf/config.php中

Application/Home/Controller/TestController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class TestController extends Controller {
 5     //http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/hello
 6     public function helloAction(){
 7         echo __METHOD__ . ' hello';
 8     }
 9 
10     //http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/test
11     public function testAction(){
12         echo __METHOD__ . ' test';
13     }
14 }
15 ?>

 

操作方法的后缀设置只是影响控制器类的定义,对URL访问没有影响。

访问http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/hello
输出Home\Controller\TestController::helloAction hello

访问http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/test
输出Home\Controller\TestController::testAction test


注意,将ACTION_SUFFIX设置为Action以后('ACTION_SUFFIX' => 'Action'),如果控制器类中的方法名称后面不是Action,则访问时系统会报错。

例如
文件Application/Home/Controller/UserController.class.php内容如下:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class UserController extends Controller {
 5     public function index(){
 6         //Home\Controller\UserController::index this is news controller Home\Controller\UserController
 7         $str = 'inner ' . __METHOD__ . ' this is news controller ' . __CLASS__;
 8         echo $str;
 9     }
10 
11     public function getUser() {
12         return 'inner ' . __METHOD__ . ' zhangsan';
13     }
14 }
15 ?>

 

访问http://localhost:81/research/thinkphp_3.2.3_full/Home/User/index
则报如下的错误:
--------
非法操作:index
错误位置
FILE: E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\Controller.class.php  LINE: 170
TRACE
#0 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\Controller.class.php(170): E('????????????:in...')
#1 [internal function]: Think\Controller->__call('indexAction', '')
#2 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\App.class.php(115): ReflectionMethod->invokeArgs(Object(Home\Controller\UserController), Array)
#3 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\App.class.php(205): Think\App::exec()
#4 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\Think.class.php(120): Think\App::run()
#5 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\ThinkPHP.php(97): Think\Think::start()
#6 E:\myphp\research\thinkphp_3.2.3_full\index.php(24): require('E:\myphp\resear...')
#7 {main}
ThinkPHP3.2.3 { Fast & Simple OOP PHP Framework } -- [ WE CAN DO IT JUST THINK ]
--------

将方法名称由index改为indexAction
访问http://localhost:81/research/thinkphp_3.2.3_full/Home/User/index
输出inner Home\Controller\UserController::indexAction this is news controller Home\Controller\UserController

总结:也就是说,控制器的方法名称后面要么全部带有Action,要么全部没有Action,要统一, 将ACTION_SUFFIX设置为Action以后,不被url直接访问的控制器名称可以没有Action,如上面的getUser方法。


三、多级控制器

多级控制器
多级控制器是指控制器可以通过子目录把某个控制器层分组存放,首先需要设置控制器的分级层次,例如,我们设置2级目录的控制器层:

'CONTROLLER_LEVEL' => 2,

将'CONTROLLER_LEVEL' => 2,加入到文件Application/Home/Conf/config.php中

Application/Home/Controller/News/NewsController.class.php

 1 <?php
 2 namespace Home\Controller\News;
 3 use Think\Controller;
 4 class NewsController extends Controller {
 5     public function helloAction(){
 6         echo __CLASS__ . ' hello';
 7     }
 8 
 9     public function testAction(){
10         echo __CLASS__ . ' test';
11     }
12 }
13 ?>

 

下面的url中第一个News表示目录路径,第二个News表示控制器名称
访问http://localhost:81/research/thinkphp_3.2.3_full/Home/News/News/hello
输出Home\Controller\News\NewsController hello

将CONTROLLER_LEVEL设为2以后,原来放到控制根目录(Application/Home/Controller)下的文件访问的时候会报错

访问http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/hello
会报如下的错误
---------
无法加载控制器:Test/hello
错误位置
FILE: E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\App.class.php  LINE: 102
TRACE
#0 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\App.class.php(102): E('???????????????...')
#1 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\App.class.php(205): Think\App::exec()
#2 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\Library\Think\Think.class.php(120): Think\App::run()
#3 E:\myphp\research\thinkphp_3.2.3_full\ThinkPHP\ThinkPHP.php(97): Think\Think::start()
#4 E:\myphp\research\thinkphp_3.2.3_full\index.php(24): require('E:\myphp\resear...')
#5 {main}
ThinkPHP3.2.3 { Fast & Simple OOP PHP Framework } -- [ WE CAN DO IT JUST THINK ]
---------

总结:也就是说,控制器要么全部放在一级目录下,要么放在二级目录下,要统一。

 

四、实例化控制器
访问控制器的实例化通常是自动完成的,系统会根据URL地址解析出访问的控制器名称自动实例化,并且调用相关的操作方法。

如果你需要跨控制器调用的话,则可以单独实例化:

Application/Home/Controller/UserController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class UserController extends Controller {
 5     public function indexAction(){
 6         /*
 7         2016-3-23
 8         用以下两种形式均可以访问,加不加index.php均可以访问
 9         http://localhost:81/research/thinkphp_3.2.3_full/home/user/index
10         http://localhost:81/research/thinkphp_3.2.3_full/index.php/home/user/index
11         */
12         //Home\Controller\UserController::index this is news controller Home\Controller\UserController
13         $str = 'inner ' . __METHOD__ . ' this is news controller ' . __CLASS__;
14         echo $str;
15     }
16 
17     public function getUser() {
18         return 'inner ' . __METHOD__ . ' zhangsan';
19     }
20 }
21 ?>

 

Application/Home/Controller/TestController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class TestController extends Controller {
 5     public function helloAction(){
 6         echo __METHOD__ . ' hello';
 7     }
 8 
 9     public function testAction(){
10         echo __METHOD__ . ' test';
11     }
12 
13     public function instanceConAction() {
14         //下面这两种方式均可以实现化
15         //$user = new \Home\Controller\UserController();
16         $user = A('User');
17         echo 'inner ' . __METHOD__ . ' the name is ' . $user->getUser();
18     }
19 }
20 ?>

 

系统为上面的控制器实例化提供了一个快捷调用方法A,$user = new \Home\Controller\UserController();可以简化为$user = A('User');

访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Test/instanceCon
输出:inner Home\Controller\TestController::instanceConAction the name is inner Home\Controller\UserController::getUser zhangsan


五、Action参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析。
参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块、控制器和操作名)和操作方法中的参数进行绑定。


1.按变量名绑定
要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置:
'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数

访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/read/id/5
输出:id=5

访问http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/archive/year/2016/month/03
输出year=2016&month=03

按照变量名进行参数绑定的参数必须和URL中传入的变量名称一致,但是参数顺序不需要一致。也就是说
访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/archive/month/03/year/2016(输出year=2016&month=03)
和上面的访问结果是一致的,URL中的参数顺序和操作方法中的参数顺序都可以随意调整,关键是确保参数名称一致即可

下面的内容是ThinkPHP/conf/convention.php中的配置
'VAR_PATHINFO' => 's', // 兼容模式PATHINFO获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR


'URL_PATHINFO_DEPR' => '/', // PATHINFO模式下,各参数之间的分割符号

如果使用下面的URL地址进行访问,参数绑定仍然有效:
http://localhost:81/research/thinkphp_3.2.3_full/index.php?s=/Home/Blog/read/id/5
http://localhost:81/research/thinkphp_3.2.3_full/index.php?s=/Home/Blog/archive/year/2013/month/11
http://localhost:81/research/thinkphp_3.2.3_full/index.php?c=Blog&a=read&id=5
http://localhost:81/research/thinkphp_3.2.3_full/index.php?c=Blog&a=archive&year=2013&month=11

 

Application/Home/Controller/BlogController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class BlogController extends Controller{
 5     public function read($id = 3){
 6         echo 'id='.$id;
 7     }
 8 
 9     public function archive($year='2013', $month='01'){
10         echo 'year='.$year.'&month='.$month;
11     }
12 
13     /**
14      * http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/input/year/2016/month/03
15      * path.1:input path.2:year path.3:2016
16      */
17     public function input() {
18         echo 'path.0: ' . I('path.0') . ' path.1: ' . I('path.1') . ' path.2: ' . I('path.2') . ' path.3: ' . I('path.3');
19         echo "\n";
20         echo 'get.year:' . I('get.year') . ' get.month:' . I('get.month');
21         echo "\n";
22 
23         print_r($_GET);
24     }
25 }
26 ?>

 

2.按变量顺序绑定
第二种方式是按照变量的顺序绑定,这种情况下URL地址中的参数顺序非常重要,不能随意调整。要按照变量顺序进行绑定,必须先设置URL_PARAMS_BIND_TYPE为1:
'URL_PARAMS_BIND_TYPE' => 1, // 设置参数绑定按照变量顺序绑定

将'URL_PARAMS_BIND_TYPE' => 1,加入到文件Application/Home/Conf/config.php中

访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/read/5
输出: id=5

访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/archive/2016/03
输出:year=2016&month=03

当设置URL_PARAMS_BIND_TYPE为1时,如果url中传递的参数仍然是按照变量名绑定,则输出的结果不是我们想要的数据
访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/read/id/5
输出: id=id

访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/archive/year/2016/month/03
输出:year=year&month=2016

按变量顺序绑定的方式目前仅对PATHINFO地址有效,所以下面的URL访问参数绑定会失效:
http://localhost:81/research/thinkphp_3.2.3_full/index.php?c=Blog&a=read&id=5
http://localhost:81/research/thinkphp_3.2.3_full/index.php?c=Blog&a=archive&year=2013&month=11

但是,兼容模式URL地址访问依然有效:
http://localhost:81/research/thinkphp_3.2.3_full/index.php?s=/Home/Blog/read/5
http://localhost:81/research/thinkphp_3.2.3_full/index.php?s=/Home/Blog/archive/2013/11


六、输入变量

虽然你仍然可以在开发过程中使用传统方式获取各种系统变量,例如:
$id = $_GET['id']; // 获取get变量
$name = $_POST['name']; // 获取post变量
$value = $_SESSION['var']; // 获取session变量
$name = $_COOKIE['name']; // 获取cookie变量
$file = $_SERVER['PHP_SELF']; // 获取server变量
但是我们不建议直接使用传统方式获取,因为没有统一的安全处理机制,后期如果调整的话,改起来会比较麻烦。所以,更好的方式是在框架中统一使用I函数进行变量获取和过滤。

path类型变量可以用于获取URL参数(必须是PATHINFO模式参数有效,无论是GET还是POST方式都有效)

Application/Home/Controller/BlogController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class BlogController extends Controller{
 5     public function read($id = 3){
 6         echo 'id='.$id;
 7     }
 8 
 9     public function archive($year='2013', $month='01'){
10         echo 'year='.$year.'&month='.$month;
11     }
12 
13     /**
14      * http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/input/year/2016/month/03
15      * path.1:input path.2:year path.3:2016
16      */
17     public function input() {
18         echo 'path.0: ' . I('path.0') . ' path.1: ' . I('path.1') . ' path.2: ' . I('path.2') . ' path.3: ' . I('path.3');
19         echo "\n";
20         echo 'get.year:' . I('get.year') . ' get.month:' . I('get.month');
21         echo "\n";
22 
23         print_r($_GET);
24     }
25 }
26 ?>


访问:http://localhost:81/research/thinkphp_3.2.3_full/index.php?m=Home&c=Blog&a=input&year=2016&month=03
输出:
path.0: path.1: path.2: path.3:
get.year:2016 get.month:03
Array
(
[year] => 2016
[month] => 03
)


访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/Blog/input/2016/03
输出:
path.0: Blog path.1: input path.2: 2016 path.3: 03
get.year: get.month:
Array
(
[0] => 2016
[1] => 03
)


七、空操作
空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

Application/Home/Controller/CityController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class CityController extends Controller{
 5     public function _empty($name){
 6         //把所有城市的操作解析到city方法
 7         $this->city($name);
 8     }
 9 
10     //注意 city方法 本身是 protected 方法
11     protected function city($name){
12         //和$name这个城市相关的处理
13          echo '当前城市' . $name;
14     }
15 }
16 ?>


接下来,我们就可以在浏览器里面输入
http://localhost:81/research/thinkphp_3.2.3_full/Home/City/beijing/
http://localhost:81/research/thinkphp_3.2.3_full/Home/City/shanghai/
http://localhost:81/research/thinkphp_3.2.3_full/Home/City/shenzhen/

由于City控制器并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen


八、空控制器
空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化。

Application/Home/Controller/EmptyController.class.php

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 class EmptyController extends Controller{
 5     public function index(){
 6         //根据当前控制器名来判断要执行那个城市的操作
 7         $cityName = CONTROLLER_NAME;
 8         /*
 9         访问:http://localhost:81/research/thinkphp_3.2.3_full/Home/beijing/
10         CONTROLLER_NAME的值为Beijing
11         */
12         //echo 'CONTROLLER_NAME:' . CONTROLLER_NAME;
13         $this->city($cityName);
14     }
15 
16     //注意 city方法 本身是 protected 方法
17     protected function city($name){
18         //和$name这个城市相关的处理
19          echo '当前城市' . $name;
20     }
21 }
22 ?>

 

接下来,我们就可以在浏览器里面输入
http://localhost:81/research/thinkphp_3.2.3_full/Home/beijing/
http://localhost:81/research/thinkphp_3.2.3_full/Home/shanghai/
http://localhost:81/research/thinkphp_3.2.3_full/Home/shenzhen/

由于系统并不存在beijing、shanghai或者shenzhen控制器,因此会定位到空控制器(EmptyController)去执行,会看到依次输出的结果是:

当前城市:beijing
当前城市:shanghai
当前城市:shenzhen

转载于:https://www.cnblogs.com/caihuafeng/p/5327603.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThinkPHP3.2.3学习笔记1---控制器 的相关文章

  • JavaArrayList集合基础&学生管理系统

    1 ArrayList 集合和数组的区别 共同点 都是存储数据的容器 不同点 数组的容量是固定的 集合的容量是可变的 1 1 ArrayList的构造方法和添加方法 public ArrayList 创建一个空的集合对象 public bo
  • 爬虫:你一定要知道的模板(附源码)

    爬虫 你一定要知道的模板 附源码 作为一名cv程序员 梦想是造飞机 现实是拧螺丝 普通的爬虫 无非就是固定的模板 xpath bs定位标签 axios返回数据 json解析 selenium json解析版 import requests
  • chatgpt赋能python:Python和数学建模:如何参与数学建模比赛

    Python和数学建模 如何参与数学建模比赛 介绍 数学建模比赛通常是学术界和工业界一起组织的比赛 旨在让学生掌握实际问题的建模方法以及如何处理数据 分析和解决实际问题 Python是一个流行的编程语言 广泛应用于数据科学和数学建模领域 因
  • 单链表中求中间节点

    问题描述 求单链表中间节点的值 如果中间有2个 只要第一个 就是偶数情况下 只要中间的第一个 速度要快 解决方法 可以参照这篇博文 http blog csdn net dawn after dark article details 736
  • PHP与MySQL程序设计 学习笔记 第十章 处理文件和操作系统

    获取路径的文件名部分 不管文件系统中是否存在该路径 可选参数suffix指定一个后缀名 使返回的文件名忽略该后缀 path usr local text txt print basename path n 输出text txt print
  • 【翻译】 一个新的暂停/休眠的基础设施

    LWN订阅者的好处订阅LWN的主要好处是帮助我们继续出版 但除此之外 订阅者可以立即获得所有的网站内容和获得一些额外的网站功能 请今天就注册吧 作者 Jonathan Corbet 2008年3月19日 在参加会议时 你们的编辑多年来一直注
  • c#一个FTP操作封装类FTPHelper

    参考了网上一些代码 作了一些调整优化 using System using System Collections Generic using System Linq using System Text using System Net us
  • Perfmon监控Windows进程性能

    Perfmon简介 Perfmon Performance Monitor 是一款Windows自带的性能监控工具 提供了图表化的系统性能实时监视器 性能日志和警报管理 通过添加性能计数器 Performance Counter 可以实现对
  • Dell电脑插入耳机不能识别

    https blog csdn net weixin 42800268 article details 89418017 utm source app
  • 2020最新微信小程序学习资源汇总,包括文档、视频、系列教程、开源项目、框架!

    利用国庆这段时间收集的一些微信小程序学习资源 希望能够帮助到大家 持续更新 欢迎投稿 开源项目或者文章博客 来源知乎 https zhuanlan zhihu com p 193101814 目录 官网文档 系列教程 视频 开源项目 小程序
  • JavaScript的window.onload事件的理解

    window onload 的作用 window onload 方法用于在网页加载完毕后立刻执行的操作 即当 HTML 文档加载完毕后 立刻执行某个方法 window onload 通常用于 元素 在页面完全载入后 包括图片 css文件等等
  • RKmedia教学(zbar 二维码识别)

    介绍 要想更好的使用 1126 1109 的硬件资源就必须掌握一套媒体框架 此贴会已一个智慧金融的应用场景 介绍一下 RKmedia 的 VI VO RGA 模块以及 zbar 的使用 应用功能 通过 RGB 摄像头识别二维码 代码 git
  • 存储、嵌入式、通信协议-STM32 FMC原理详解

    推荐关注的博主 https blog csdn net as480133937 category 9188655 html https blog csdn net as480133937 category 11691034 html htt
  • vue初识之路由

    目录 前言 使用步骤 vue代码实例 步骤一 引入js文件 步骤二 创建路由实例 步骤三 创建映射关系 步骤四 将路由实例挂载到vue实例 步骤五 使用路由 总结 前言 Vue Router 是 Vue js 官方的路由管理器 它和 Vue
  • Entry模拟对输入的密码进行验证是否符合规范

    需求 1 密码必须不少于6位 2 密码不能包含中文 3 密码不能有特殊字符 4 密码里至少有一个大写字母 效果如图所示 完整代码如下 from tkinter import import re root Tk root title 密码动态
  • 操作系统4-进程,线程,进程控制——lab4内核线程管理,用户进程管理

    大纲一下 最重要的还是要把知识点串起来 知道每一个后知识点概念出现的原因 进程 进程的概念 进程控制块 进程状态 三状态进程模型 挂起进程模型 线程 为什么引入线程 线程的概念 用户线程 内核线程 进程控制 上下文切换 进程创建fork 进
  • spring 使用 jdbcTemplate 查询 MySQL中 timestamp类型数据不准确的问题

    原因 可能是时区设置问题 解决方法 在数据库连接的url中加上时区的设置 如果使用 springboot 在 application properties 文件中添加 spring datasource url jdbc mysql loc
  • 名称解释:Deployment

    简述 Deployment为Pod和ReplicaSet提供了一个声明式定义 declarative 方法 用来替代以前的ReplicationController来方便的管理应用 典型的应用场景包括 定义Deployment来创建Pod和
  • selenium常用定位元素属性详解

    selenium定位元素详解 1 CSS定位表达式 2 XPath定位表达式 3 XPath定位与CSS定位的比较 4 使用ID定位 5 使用class名称定位 1 CSS定位表达式 css 是一种用于发现HTML或XML等文件样式的前端页
  • Jmeter接口测试、性能测试详细讲解+实战教程,堪称经典!

    目录 导读 1 接口简介 2 接口测试简介 3 环境搭建 4 RESTful风格 5 Json说明 6 Jmeter简介 7 Jmeter环境搭建 8 Jmeter使用 8 1 Jmeter发GET请求 8 2线程组 8 2 1 并发执行

随机推荐

  • BIO、NIO和AIO的区别、三种IO的原理与用法

    目录 IO BIO NIO AIO 区别及联系 各自适用场景 使用方式 IO 什么是IO 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口 它对于任何计算机系统都非常关键 因而所有 I O 的主体实际上是内置在操作系统中的
  • 【信号与系统】零输入响应和自由响应的区别

    课本内容 以下内容来自郑君里 信号与系统 第三版 上册 p61 1 自由响应和零输入响应都满足齐次方程的解 2 然而 它们的系数完全不同 零输入响应的系数仅由起始储能情况决定 而自由响应的系数要同时依从于起始状态和激励信号 3 自由响应由两
  • 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法

    今天小编给大家带来的是一位玩家分享的 战地1 加入服务器方法介绍 不知道怎么加入的玩家 快跟小编一起来看看吧 战地1的网络对战除去行动模式是自动配对或者跟好友进外 其他对战进入服务器的方式有好多种 我估计还有其他玩家不知道 那我就图文指条明
  • 【JavaScript】Math 对象

    Math 对象 Math 对象是 JS 的内置对象 可以直接使用 console log typeof Math Math object Math abs acos 常用属性 Math PI 圆周率 3 141592653589793 常用
  • ScrollView嵌套RecyclerView滑动冲突相关问题

    出现了滑动冲突问题 主要表现为横向RecyclerView滑动不灵敏 纵向RecyclerView滑动卡顿 scrollview里面放Recyclerview 会导致view不回收 内存压力大 最好使用 Recyclerview通过Item
  • 带过渡动画的折叠收缩布局ExpandLayout

    ExpandLayout 简介 由于界面View VISIBLE和View GONE的动画太生硬 所以写了ExpandLayout类来平滑过渡 基本思路 动态的设置布局的高度 核心动画效果代码 切换动画实现 private void ani
  • Android面试题——javaMVC、AndroidMVC

    中的 模型 对象 是应用程序的主体部分 多有业务逻辑都应该放到该层 视图 对象 是应用程序中负责生成用户界面的部分 也是整个 架构中用户唯一可以看到的一层 接受用户的输入 显示处理结果 3 控制器 controller 对象 是根据用户的输
  • python3代码提示怎么设置-PyCharm里面配置第三方库的代码自动提示

    最近开始用 PyCharm 编辑器来编写 python 代码了 安装了 GUI 库 wxPython 之后 发现没有代码提示 写起来很是不爽 几经周折之后发现还是得配置一下 因为自己也找了蛮久 所以记录一下 希望可以帮到打击 其他第三方库的
  • 微信小程序纯css实现刻度尺

    微信小程序纯css实现刻度尺 最近需要实现一个高度定制的刻度尺 但是网上现成的方案却是极少 最终找到了HaoTian的wx scale 但是没有实现竖向的效果而且刻度范围大时 在安卓机上无法渲染完全 找了很久没有找到原因 猜测是canvas
  • 为什么c语言有时候要两个括号,头文件中为什么要用了两个括号?

    在研究MD5算法 发现它的头文件MD5 h有 MD5 context typedef struct UINT4 state 4 state ABCD UINT4 count 2 number of bits modulo 2 64 lsb
  • cisco配置WEB登录的方法

    要启用路由器的 HTTP HTTPS 服务器 请使用下列 Cisco IOS 命令 Router config ip http server Router config ip http secure server Router config
  • 不走弯路,ubuntu系统GPU版本的Pytorch安装

    需先查看电脑是否安装了显卡驱动 nvidia smi 有表格样页面输出则安装了 如果没有 sudo ubuntu drivers devices 查看可安装版本 选择最高安装 sudo apt install nvidia driver 5
  • 用Python爬取了上W表情包。快拿去欢乐斗图吧~

    导语 表情包 是一种利用图片来表示感情的一种方式 表情包是在社交软件活跃之后 形成的一种流行文化 表情包流行于互联网上面 基本人人都会发表情 曾经你是否也有过找不到表情包去应对别人的时候 别担心 今天小编将分享如何用Python爬取批量表情
  • 【核磁共振成像】单射成像和高速脉冲序列

    目录 一 提高成像速度的手段 二 平面回波成像 EPI 序列 三 常用或基本EPI序列 四 EPI变型序列 五 渐开平面螺旋 spiral 扫描序列 六 RARE序列 七 GRASE序列 八 STEAM序列 一 提高成像速度的手段 MRI扫
  • Docker容器安装Mysql和Redis(3)

    前言 容器安装的好处是 相互隔离互不影响 相比于传统的一个linux下安装多个服务 其中一个服务报错可能影响其他服务的问题 现在一个服务就是一个容器互不影响 目录 1 安装MySQL 1 1 拉取镜像 1 2 创建并启动 1 3 外部创建映
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001
  • 两个苹果手机如何同步数据_旧苹果手机数据迁移到新手机教程

    很多知友私信提问如何将旧苹果手机数据迁移到新苹果手机上 由于没有像安卓那样一键操作的软件 所以大部分机友束手无策 今天我在这里给大家介绍几种方法 一 从icloud云备份恢复设备 1 打开您的iPhone 您应该会看到 您好 屏幕 如果您的
  • 为什么国内互联网公司喜欢用Centos而不是Ubuntu?

    几乎所有新手接触Linux时 都会被它的几百个发行版本搞得一头雾水 在众多Linux 版本中 CentOS 和 Ubuntu 可以说是最有名的两个了 而关于这两者的选择也是大家在网络上经常讨论的问题 比如各大网站都有热门问题 为什么国内互联
  • 七、Linux中的进程管理

    七 Linux中的进程管理 7 1 进程和线程定义 程序是静态的代码文件 进程 进程是指程序运行时的形态 是程序的一个副本 进程是有生命周期的 准备期 运行期 终止期 线程 当程序是多任务的 cpu是多核心 多任务同时被每个核心处理 每个核
  • ThinkPHP3.2.3学习笔记1---控制器

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的 最早诞生于2006年初 2007年元旦正式更名为ThinkPHP 并且遵循Apache2开源协议发布 ThinkPHP从诞生以来一直秉承简洁实用的设计原则 在保持出色的性