//建立虚拟主机

2、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"myshop",那么"myshop" 就作为ci项目名称存在了

3、为我们的ci项目搭建一个虚拟主机:

首先,找到httpd.conf配置文件,开启虚拟主机的配置

然后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置

最后,找到hosts配置文件,为我们的ci项目添加dns映射

4、在浏览器中输入 http://www.myshop.com/index.php 回车,如能看到如下欢迎界面,则表示我们的ci项目安装成功了

1 建立控制器的时候是外小内大
也就是:注意书写习惯,2 注意加载视图的时候的数组参数

blog.php (控制器名称)
class Blog extends CI_Controller{

//调用视图,注意:视图必须用php结尾,并且如果有数据传入,视图只能识别出数组的名字$title,不能识别$data['title'];
$this->load->view('blogview','$data');
}
不能以_开头,这是私有方法

视图:
1 如果在控制器中加载了视图,那么直接写控制器的加载方法:
$this->load->view(视图); //注意:视图直接写名字不带后缀,如果是在文件夹下,那么应该是
$this->load->vlew(文件夹/视图);
视图可以多次加载,例如头部和尾部分开
2 视图中直接使用php原生代码
3 给视图分配变量
$list =array(
array('id'=>1,'name'=>'jack','email'=>'jack@163.com'),
array('id'=>2,'name'=>'lili','email'=>'lili@163.com'),
array('id'=>3,'name'=>'lucy','email'=>'lucy@163.com'),
);
$data['title']='数组标题';
$data['list']=$list;
$this->load->vars($data);
4 推荐使用 ,包括if ,if else 等等,因为这是模板专用写法
<?php foreach($list as $item) : ?>
<?=$item['name']?>
<?php endforeach?>

$this->load->vars('key','value');
<?php
class User extends CI_Controller
{
public function index()
{
//给视图分配变量
$this->load->vars('title','这是标题');
//加载视图
$this->load->view('user/index');
}
}
?>

建立文件夹user/index的源代码
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
echo '这是user文件夹下面的文件';
echo "<br/>";
echo $title;
?>
</body>
</html>

注意:要先传递数组,再进行页面的渲染
1 控制器的写法 思路:设置变量,分配变量,加载视图
<?php
class User extends CI_Controller {

public function index()
{
//给视图分配变量
//$this->load->vars('title','这是标题');
//加载视图
$list =array(
array('id'=>1,'name'=>'jack','email'=>'jack@163.com'),
array('id'=>2,'name'=>'lili','email'=>'lili@163.com'),
array('id'=>3,'name'=>'lucy','email'=>'lucy@163.com'),
);
$data['title']='数组标题';
$data['list']=$list;
$this->load->vars($data);
$this->load->view('user/index');
}

}
?>

2 视图文件写法 思路:获取变量,用foreach循环出来
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
echo '这是user文件夹下面的数据';
echo "<br/>";
echo $title;
?>
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>邮件</td>
</tr>
<?php foreach ($list as $item): ?>
<tr>
<td><?=$item['id']?></td> // 注意:等价于<?php echo item['id']?>
<td><?=$item['name']?></td>
<td><?=$item['email']?></td>
</tr>
<?php endforeach;?>
</table>
</body>
</html>

CI的超级对象(controller 对象)
也就是当前的控制器对象$this
打印下 var_dump($this)

$this->load (装载器)
打印下属性var_dump($this->load) \system\core
文件在库文件core下面可以查看,CI会自动实例化一个Loader对象,来放在超级对象中
$this->load,就是装载器类,实际上例如$this->load->view()
相当于 $obj=new CI_Loader();
$this->load=$this
$this->load->view()等价于new CI_Loader()->view();

$this->load提供的方法包括:
view()方法 装载视图
vars()方法 分配变量到视图
database() 装载数据库操作对象
model() 装载模型对象
helper() 加载帮助对象

$this->uri (URL解析相关的对象) \system\core
提供的方法包括:
1 首先传统的get传参数方式是怎样的
http://localhost/ci/index.php/welcome?id=5
然后echo $_GET['id'],那么就输出了5

2 现在是pathinfo模式,那么如何获取到id?
http://localhost/ci/index.php/welcome/index/id/1
那么就是用uri
$this->uri->segment(3);
那么获取到的就是id

$this->input
提供方法:
$this->input->post('username'); 获取到post过来的数据 $_POST['username'],为什么用这个,因为比较安全
$this->input->server('REMOT_ADDR'); 获取IP地址 $_SERVER['REMOTE_ADDR']
$this->input->server('DOCUMENT_ROOT'); 获取根目录信息 $_SERVER['DOCUMENT_ROOT']

注意:在视图中,也可以直接使用$this来获取超级对象

数据库访问
1 修改配置文件 application\config\database.php,里面默认是default

1 装载数据库操作类
2 开始使用数据库操作类
3 执行数据库语句获得结果集类
4 执行结果集类方法返回结果

显示:
public function showusers() //包含两步:1 获取数据 2 传递给视图
{

//装载数据库操作类,因为不是必要的,所以是有选择地装载!
$this->load->database(); //如果你想操作多个数据库,那么就选择$this->load->database('另一个数据库');
//显示这个操作类,装载成功后,会放入超级对象的属性中,默认属性名是db
//var_dump($this->db);
$sql='select * from xqcx ';
$res = $this->db->query($sql); //返回对象
//var_dump($res);
$result=$res->result(); //返回数据
//var_dump($result); //打印数据

//把数据传递到视图中去
$data['list']=$result;
%this->load->view('user/index',$data);

}

增加/删除/修改/查询: 使用最常见的query方法
public function add(){
$this->load->database();
$sql="insert into xqcx(ssxq, xqname) values('我的小区','测试小区')";
$bool=$this->db->query($sql);
if($bool)
{
echo '受影响行数'.$this->db->affected_rows();
echo '自增id'.$this->db->insert_id();
}
}

public function update(){
$data[0]=$this->input->post['name'];
$data[1]=$this->input->post['password'];
$sql="update xqcx(ssxq,xqname) values(?,?)";
$bool=$this->db->query($sql,$data);
if($bool)
{
echo '受影响行数'.$this->db->affected_rows();
echo '自增id'.$this->db->insert_id();
}
}

注意:如果每次都加载数据库 $this->load->database(); 很麻烦的话,那么就去配置文件里面修改
application\config 下面的antoload.php里面
$autoload['libraries'] = array('database');

AR模型
AR模型的引入是为了简化对基础数据库的操作,开启AR模型是指
//$autoload['libraries'] = array('database'); 先开启自动加载数据库
//active_group=true; 默认状态下是开启AR模型的

//1 查询
public function get(){
$query = $this->db->get('xqcx'); //返回结果集对象
foreach ($query->result() as $item){
echo $item->ssxq;
echo '<br>';
//echo $item->xqname;
}
}

//插入
public function insert()
{
$data=array('ssxq'=>'测试小区1','xqname'=>'小区名称');
$bool=$this->db->insert('xqcx',$data);
if($bool)
{
echo '插入成功!';
}else
{
echo '插入失败!';
}
}

//更新第334行的数据
public function update()
{
$data=array('ssxq'=>'测试小区2','xqname'=>'小区名称');
$bool=$this->db->update('xqcx',$data,array('id'=>334));;
if($bool)
{
echo '更新成功!';
}else
{
echo '更新失败!';
}
}

//删除
public function delete(){
$bool=$this->db->delete('xqcx',array('id'=>334));
if($bool)
{
echo '删除成功!';
}else
{
echo '删除失败!';
}
}

AR中的连贯操作,所谓的连贯操作,就是指应对复杂的SQL语句
public function ar(){
$query =$this->db->select('ssxq,xqname')
->from('xqcx')
->where('id >=',3)
->limit(2,3)
->order_by('id desc')
->get();
var_dump($query->result());
}

//注意:这个>号前面一定要有空格
//->limit(2,3) ,跳过3条取2条
//为了便于比较,我们查看下最后的一条查询语句
//结果是 SELECT `ssxq`, `xqname` FROM (`xqcx`) WHERE `id` >= 3 ORDER BY `id` desc LIMIT 3, 2
//echo $this->db->last_query();

CI控制器的扩展
有什么作用:例如,做登录验证
\www\ci\application\core 在这个下面写上自己的控制器基类
自定义一个控制器,放在\www\ci\application\core 目录下,名字叫做MY_Controller
<?php
class MY_Controller extends CI_Controller()
{
function __construct()
{
parent::__construct();
echo '测试控制器1';

//登录验证
//权限验证
}
}
?>

然后在Controllers 文件夹下面新建一个newwelcome类来继承我自己写的控制器,注意:开头都以MY_开头

<?php
class Newwelcome extends MY_Controller{
public function index()
{
echo '123';
}
}
?>

模型
1 新建一个user模型,名字为uer_model.php 内部类的命名方法为User_Model ,注意:一定要小写
2 CI Model类的方法其实相当简单,主要是用来规范我们的项目开发
1 构造方法
2 可以引用超级对象$this->里面的所有的类的方法
3 以后所有的$this->db方法都写在里面

完整的MVC方式怎么写?

1 创建模型
<?php
class User_Model extends CI_Model {

public function getAll()
{
$query=$this->db->get('xqcx');
return $query->result();
}
}
?>

2 控制器中加载模型

<?php
class User extends CI_Controller {

public function index()
{
//1 加载模型
$this->load->model('User_Model');
//2 调用模型中的方法获取数据
$list=$this->User_Model->getAll();
//3 传递关联数组给视图
$this->load->view('user/usertest',array('list'=>$list));
}
?>

注意:也可以给模型起别名,那么User_Model 就被叫做user了
$this->load->modle('User_Model','user');
$this->user->getAll();

3 视图显示

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
var_dump($list);
?>
</body>
</html>

CI中有关URl的函数
有时候URL不能写死,那么怎么办,通过系统提供的URL相关函数来进行
快捷操作:复制当前行:CTRL+D
快速补全代码,使用quicktext
注意:使用时语言设置成html
例如:dtd + ctrl enter 即可补全HTML代码
例如:in + ctrl enter 即可补全input代码

重要问题:
如何做比如登录页面的操作
1 在控制器中设计一个方法用来显示视图

public function loginshow()
{
$this->load->view('user/login');
}

2 在视图中post数据到控制器中的另外一个方法 ,注意:这边写的action 都是绝对路径,所以要进行修改
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<form action="/ci/index.php/user/logininsert" method="post" >
name <input type="text" value="" name="name"/><br>
password <input type="password" value="" name="password" /><br>
E-mail <input type="text" value="" name="email" /><br>
<input type="submit" value="submit" />
</form>

</body>
</html>

3 在另外一个方法中进行数据的操作,例如var_dump等等

public function logininsert()
{
var_dump($this->input->post('name'));

}

使用site_url函数进行简化
目标site_url('控制器/方法'),设置url的访问
1 首先加载helper里面的URL,注意:关键是你在初始化的页面进行加载这个helper
public function loginshow()
{
$this->load->helper('url');
$this->load->view('user/login');
}
2 使用site_url函数进行替换
原来<form action="/ci/index.php/user/logininsert" method="post" >
<form action="<?php echo site_url('user/logininsert')?>"

site_url代表的路径是http://localhost/ci/index.php/

3 使用base_url做文件的上传,设置访问的路径

base_url代表的路径是http://localhost/ci/
建立一个uploads文件下,下面存放这张flash图片
<img src="<?php echo base_url();?>uploads/flash.jpg" alt="" width="120" />

配置自动加载
D:\wampserver\wamp\www\ci\application\config
$autoload['helper'] = array('url');

设置路由 (可以设置伪静态)

路由的路径:
配置文件:ci/application/config/routes.php
默认控制器:
$route['default_controller'] = "welcome";

规则:设置正则表达式,可以定制URL
例如我想要的URL是http://localhost/ci/index.php/news/201309/4.html
我的实际控制器是article/show/$1
那么我写路由的规则就是
$route['news/[\d]{6}/([\d]+\.html)']='article/show/$1';神马意思?不明白!!

如何去掉index.php?
必须要进入到Apache里面,进行修改
复制里面的,htaccess 文件,复制到CI的跟目录下
去掉里面的index,php

还是出错?
修改httpd.conf 文件,使其的rewrite属性打开

设置分页
//分页显示 ,注意:分页类是最常见的类
//思路:1 调用分页类并且正确显示,获取分页类里面的参数:1 偏移量 2 每页数量
// 2 根据这两个分页量去生成SQL语句,应用到查询 ,SQL语句的原型是select * from 表名 limit 偏移量 ,每页数量
// 3 显示出来数据
// 4 完善:1 查询数据库的全量并且赋值 2 做分页的美化和优化 3 如何和model类结合来进行设置 4 显示页面的美化
// 那么,其实设计的思路是分页------->数据库---------->显示内容

public function fenye( )
{
//创建分页对象并且初始化
$this->load->library('pagination');
$this->load->helper('url');

//配置分页类文件,也就是超链接下面的url地址
$page_size=10;
$config['base_url'] =site_url('user/fenye');
$config['per_page']=$page_size;
$config['total_rows']=200;
$config['first_link'] = '首页';
$config['last_link'] = '末页';
$config['prev_link'] = '上一页';
$config['next_link'] = '下一页';
$this->pagination->initialize($config);

//做偏移量的设置,做数据库语句的设置生成
$offset=intval($this->uri->segment(3));
$sql="select * from xqcx limit $offset ,$page_size ";
$query = $this->db->query($sql);
$result=$query->result();

//查询出来的结果集和这个分页的链接都传递到页面上去
$data['user_result']=$result;
$data['links']= $this->pagination->create_links();
$this->load->view('user/fenye',$data);
}

前台显示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<h1>分页测试</h1>
<?php var_dump($user_result) ?>
<?php echo $links?>
</body>
</html>

文件上传
1 需要前台手动创建一个upload目录,这个目录是在根目录的同级目录下
2 显示上传页面
public function file(){
$this->load->helper('url');
$this->load->view('user/file');
}

3 上传页面,做好action动作,注意配置 enctype="multipart/form-data"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<form action="<?php echo site_url('user/upload') ?> " method="post" enctype="multipart/form-data" >
<input type="file" name="pic" />
<input type="submit" value="上传" />
</form>

</body>
</html>

4 在控制器中做上传
public function upload(){
//配置当前的上传参数
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['file_name']=uniqid();
//调用上传文件的类和方法
$this->load->library('upload',$config);
$this->upload->do_upload('pic');
//对调用结果进行判断,打印数组
//var_dump ($this->upload->data()) ;
$data=$this->upload->data();
echo $data['file_name'];
}

session
ci的session 是放在cookie里面的,最多不能放超过4K的数据
session 类一般是初始化以后就可以使用了,时长5分钟
public function getsession()
{
//生成随机的字符串作为加密用的key
//在这个之前,首先开启配置文件中的加密key,路径是www\ci\application\config
//echo md5(uniqid());exit;
//找到那一行,$config['encryption_key'] = '08eecdf63ec31d37a6ae1f24f11382ef';然后就可以注释掉
//注意,底下还有很多对于session的加密配置可以修改
$this->load->library('session');
$user=array('id'=>3,'name'=>'jack');
$this->session->set_userdata('user',$user);
}

public function showsession()
{
$this->load->library('session');
$user=$this->session->userdata('user');
var_dump($user);

}

验证码

public function yanzheng()
{
$this->load->helper('captcha');
$this->load->helper('url');
$vals = array(
//'word' => 'Random word',
'word' =>rand(1000,9999),
'img_path' => './captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './path/to/fonts/texb.ttf',
//'img_width' => '50',
//'img_height' => 30,
//'expiration' => 7200 图片存在的时间
);
$cap = create_captcha($vals);
echo $cap['image'];
//var_dump($cap);
//传递图片给登录页面来使用
//$this->load->view('index',array('cap'=>'$cap['image']'));

//如何验证
//session_start();
//$_SESSION['cap']=$cap['word'];
}

表单辅助函数
注意:其实只需要一个insert方法就可以了,不需要以前那么复杂的add方法

public function logininsert()
{
//var_dump($this->input->post('name'));
$this->load->library('form_validation');
$this->form_validation->set_rules('name', '用户名', 'required');
$this->form_validation->set_rules('password', '密码', 'required');
$this->form_validation->set_rules('email', '邮箱', 'required|valid_email');
$bool=$this->form_validation->run() ;
if($bool){
//进行数据的判断和验证

}else{
$this->load->view('user/login');
}

}

至于前台的页面也要设计

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<?php echo validation_errors(); ?>
<form action="<?php echo site_url('user/logininsert')?>" method="post" >
name <input type="text" value="<?php echo set_value('name'); ?>" name="name"/> <?php echo form_error('name','<span>','</span>'); ?> <br>
password <input type="password" value="<?php echo set_value('password'); ?>" name="password" /><?php echo form_error('password','<span>','</span>'); ?> <br>
E-mail <input type="text" value="<?php echo set_value('email'); ?>" name="email" /><?php echo form_error('email','<span>','</span>'); ?> <br>
<input type="submit" value="submit" />
</form>
<img src="<?php echo base_url();?>/uploads/flash.jpg" alt="" width="120" />
</body>
</html>

ci 基础知识的更多相关文章

  1. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  2. C#基础知识回顾-- 反射(3)

    C#基础知识回顾-- 反射(3)   获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺垫, ...

  3. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  4. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  5. 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识

    使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...

  6. 【数据库上】 第四讲 E-R模型基础知识

    第四讲 E-R模型基础知识 一.数据库设计过程 数据库设计的关键阶段? 各个阶段设计的主要任务? 基础条件:清楚一个应用系统的功能需求与数据需求(直接与用户交互.数据流程图示例/UML类图等) 核心阶 ...

  7. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  8. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

随机推荐

  1. 树形DP(统计直径的条数 HDU3534)

    分析:首先树形dp(dfs计算出每个点为根节点的子树的最长距离和次长距离),然后找出L=dis[u][0]+dis[u][1]最长的那个点u,然后在以u为根节点dfs,统计长度为L的条数:具体做法:把 ...

  2. javascript DOM对象

    DOM简介 1.html DOM:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model) 2.DOM操作html JS能改变页面中的所有html元素 JS能改变页 ...

  3. 02---Net基础加强

    将普通日期格式:“2014年7月8日”转换成汉字日期格式:“二零一四年七月八日”.(暂时不考虑10日,13日,23日) class Program { static void Main(string[ ...

  4. Oracle数据库归档模式的切换及其相关操作详解

    SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> ...

  5. oracle的冷备份

    oracle冷备份要备份三类文件:数据文件,控制文件,日志文件 查看所有数据文件 select name from v$datafile; 查看所有日志文件 select member from v$ ...

  6. ThinkPHP讲解(七)——修改删除

    修改数据 方式一:数组方式,直接将数据库里需要修改的内容进行修改 function Update() { //1.数组方式 $model=D("Info"); $attr=arra ...

  7. zw版【转发·台湾nvp系列Delphi例程】HALCON InpaintingCt2

    zw版[转发·台湾nvp系列Delphi例程]HALCON InpaintingCt2 unit Unit1;interfaceuses Windows, Messages, SysUtils, Va ...

  8. $.trim()函数

    $.trim(str) 返回:string: 参数str :String类型,需要去除两端空白字符的字符串.如果参数str不是字符串类型,该函数将自动将其转为字符串(一般调用其toString()方法 ...

  9. 【海岛帝国系列赛】No.4 海岛帝国:LYF的太空运输站

    50212228海岛帝国:LYF的太空运输站 [试题描述] 最近,“购物券”WHT在“药师傅”帝国资源大会上提出了“SSTS”太空运输站计划.由于恐怖分子前些日子刚猖狂完,炸毁高楼无数,YSF不得不执 ...

  10. 前端控制器DispatcherServlet 详解

    DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spri ...