- 浏览: 147550 次
文章分类
最新评论
-
supercode:
创业是艰苦的,受常人难以想象的苦,包括精神上的。希望你越做越好 ...
淘淘软件的开发历程 -
brilliant09:
lie to me不错的推荐一哈
我看过的美剧排行 -
cuichang:
你什么电脑啊,macbook?
看完了《mac os x 10.5 从入门到精通》 -
java2000_net:
JAVA自测题栏目正式上线,来测测你的Java功力到底如何!h ...
Java基础测试题 -
gurudk:
第4条,很有感触!技术是为商业目标服务的,不是玩具,从这点来看 ...
《修炼-我的职场十年》读书摘要
一 什么是Struts
Struts是基于MVC设计模式的开发Web应用程序的开源框架,当前的版本是1.1
他的建立者是著名的开源组织Apache Software Foundation,提起Apache software Foundation(ASF) 大家一定不会陌生,好多口碑不错的开源产品像Tomcat,Ant,Velocity,JSF等都出自他们.
如果对他们感兴趣的话可以到他们的网站去看一看:http://Jakarta.apache.org
二 为什么叫Struts
Struts的英文意思是: (框架的)支柱,支撑物
就像我们盖楼一样,各楼层之间是用钢筋,混凝土构成的柱子去支撑的,在开发三层结构的Web应用程序时,Struts 的角色就是支撑这些应用程序的各个层次.
三 什么是框架
框架是可重用的应用程序的半成品,使用框架你可以构造出具体的个性化的应用程序.
框架是建立在应用程序的共性基础上的,给开发者提供了可重用的结构.像Struts,Jsf,Spring都是比较成熟的框架.
四 利用struts框架开发Web应用程序你需要哪些知识
Http协议是一种无状态的协议
能够利用Jsp构建Web页面
了解Servlet技术
能够建立简单的JavaBean
对MVC思想有认识
好了,具备了这些知识你就可以利用Struts开发Web应用程序了
五 理解Struts是如何工作的
理解Struts框架的工作原理要理解下面这幅重要的图片.
Struts的ActionServlet是一个控制器,起着流程导航的作用,Struts 的Action类用来访问相关的业务类.
当ActionServlet从容器中接收到一个请求时,他会根据URI决定哪一个Action 来处理这个请求,Action进行输入的验证,访问业务层,从数据库或其他的数据服务器中获得必要的信息.
验证输入或者根据输入的数据更新数据库,Action需要知道哪些数据被提交了,ActionServlet把这些输入绑定到JavaBean中,这个JavaBean是Struts的ActionForm的子类,ActionServlet根据请求路径决定使用哪个ActionForm和Action.
每一个Http请求要对应一个Http响应,通常情况下,StrutsAction自己并不生成响应,而是把请求传递给其他的资源,比如Jsp页面.
在Struts中提供了一个ActionForward类使用逻辑名存储页面路径,当Action 完成业务逻辑处理的时候,会向AcitonServlet返回一个ActionForward,ActionServlet会根据存储在ActionForward中的对象调用相关的页面完成响应.
Struts把这些细节绑定到ActionMapping对象中,每一个ActionMapping都是和路径相关的,当这个路径被请求时,Servlet会找到哪些Action,ActionForm,ActionForward可以使用.
所有的这些细节Action,ActionForm,ActionForward,ActionMapping都在Struts-config.xml中被声明.ActionServlet在启动时会读取这个文件并且建立一个配置对象的数据库,在运行时ActionServlet会参照这些对象而不是这个配置文件.
不管你信不信,知道了这些你就可以建立一些简单的Web应用程序了.
六 建立第一Struts应用程序
我们的第一个Struts应用程序是一个简单的用户注册应用程序
1 功能描述:
用户需要输入用户名,密码,重复输入密码,当两次输入的密码相匹配时就认为注册成功,否则认为注册失败.
2 MVC模式分析:
M (model):模型层(业务逻辑) 我们这里的业务逻辑很简单就是判断两次输入的密码是否一致.
V(view):视图层:
A 用户输入的用户名,两次输入的密码
B 显示注册成功信息
C 显示注册失败信息
C(contrl)控制层:由Struts 的servlet来实现控制的导航.
3 界面原型:
A 录入注册信息
B 显示注册成功
C 显示注册失败
4 要完成这个程序我们只需要建立
一个ActionForm 绑定用户的输入信息
一个Action 进行业务处理
一个配置文件Struts-config.xml
三个表示层页面 注册信息录入页面,注册信息成功,注册失败显示页面
1)首先建立三个显示页面
Register.jsp success.html failure.html
相关代码如下:
Register.jsp:
<form:form action="register.do">
<form:text property="username">
<form:password property="password1">
<form:password property="password2">
<form:submit value="Register"> </form:submit>
Success.html:
</form:password>
</form:password>
</form:text>
</form:form>
Failure.html:
2)用户的输入是绑定到ActionForm中的,接下来我们建立一个ActionForm.
RegisterForm是一个JavaBean继承自Struts框架的org.apache.struts.ActionForm,这个对象能够捕获通过请求发送的输入域.当一个web浏览器提交一个表单的时候,web浏览器会为表单的每一个域在请求中建立一个参数.在ActionForm 中对应于Html的表单的每一个域都有一个相应的属性.ActionServlet会把请求中的参数和ActionForm中的属性进行匹配,调用属性的Setter方法来绑定请求中的值.
我们这里用户需要输入的数据有userName,password1,password2,我们的ActionForm就要提供SetUserName(String),SetPassword1(String),和SetPassword2(String)方法.
下面是我们的ActionForm 的代码:
RegisterForm.java:
package app;
import org.apache.struts.action.*;
public class RegisterForm extends ActionForm {
protected String username;
protected String password1;
protected String password2;
public String getUsername () {return this.username;};
public String getPassword1() {return this.password1;};
public String getPassword2() {return this.password2;};
public void setUsername (String username) {this.username = username;};
public void setPassword1(String password) {this.password1 = password;};
public void setPassword2(String password) {this.password2 = password;};
}
3)我们来建立业务处理层的RegisterAction类:
RegisterAction是继承自Struts框架的org.apache.struts.Action类.ActionServlet把刚刚组装的ActionForm传递给Action,Action负责验证输入,访问业务信息,决定把哪个ActionForward返回给Servlet.
RegisterAction.java的代码如下:
RegisterAction.java:
package app;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterAction extends Action {
public ActionForward perform (ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
// Cast the form to the RegisterForm
RegisterForm rf = (RegisterForm) form;
String username = rf.getUsername();
String password1 = rf.getPassword1();
String password2 = rf.getPassword2();
// Apply business logic
if (password1.equals(password2)) {
try {
// Return ActionForward for success
UserDirectory.getInstance().setUser(username,password1);
return mapping.findForward("success");
} catch (UserDirectoryException e) {
return mapping.findForward("failure");
}
}
// Return ActionForward for failure
return mapping.findForward("failure");
}
}
注意:
在struts1.1中使用的execute()方法来代替了perform()方法(perform是struts1.0)中的方法,execute()方法应用了更好的异常处理机制.
通过以上步骤我们已经准备好了所有Web开发必备的材料,下面我们要做的就是把这些材料进行有机的组合,建立一个实实在在的Web应用.
4)建立Struts的配置文件Struts-config.xml
Struts-config.xml是Struts框架中最重要的配置文件,所有的细节像Acgtions,ActionForms,ActionForwards,ActionMappings等都是在这里进行配置.ActionServlet将根据这个文件来实现流程的控制.
Struts-config.xml的内容如下:
Struts-config.xml:
<struts-config> <form-beans> <form-bean type="app.RegisterForm" name="registerForm"> </form-bean> <action-mappings>
七 知识回顾:
1)我们做了什么
为了完成这个注册程序我们建立了
A RegisterForm
B RegisterAction
C 三个页面 注册页面,成功失败显示页面
D struts-config.xml文件
2)他们是如何有机的结合起来的
我们再来改造一下前面那幅图:
</action-mappings> </form-beans> </struts-config>
我们回顾一下Struts-config.xml这个比较重要的配置文件:
Struts-config.xml:
<struts-config> <form-beans> <action-mappings><action path="/register"><forward path="/success.html" name="success"></forward></action>
八 思考题:
我们建立一个简单的Web程序
需求描述: 用户注册的程序我们已经完成了,假定用户需要登陆系统,登陆时需要输入用户名,密码,当用户名和密码正确时显示欢迎页面,否则显示密码或用户名错误的页面.在这里为了使程序简单我们假设输入的密码为password就通过登陆验证。</action-mappings> </form-beans> </struts-config>
Struts是基于MVC设计模式的开发Web应用程序的开源框架,当前的版本是1.1
他的建立者是著名的开源组织Apache Software Foundation,提起Apache software Foundation(ASF) 大家一定不会陌生,好多口碑不错的开源产品像Tomcat,Ant,Velocity,JSF等都出自他们.
如果对他们感兴趣的话可以到他们的网站去看一看:http://Jakarta.apache.org
二 为什么叫Struts
Struts的英文意思是: (框架的)支柱,支撑物
就像我们盖楼一样,各楼层之间是用钢筋,混凝土构成的柱子去支撑的,在开发三层结构的Web应用程序时,Struts 的角色就是支撑这些应用程序的各个层次.
三 什么是框架
框架是可重用的应用程序的半成品,使用框架你可以构造出具体的个性化的应用程序.
框架是建立在应用程序的共性基础上的,给开发者提供了可重用的结构.像Struts,Jsf,Spring都是比较成熟的框架.
四 利用struts框架开发Web应用程序你需要哪些知识
Http协议是一种无状态的协议
能够利用Jsp构建Web页面
了解Servlet技术
能够建立简单的JavaBean
对MVC思想有认识
好了,具备了这些知识你就可以利用Struts开发Web应用程序了
五 理解Struts是如何工作的
理解Struts框架的工作原理要理解下面这幅重要的图片.
发件人 tech |
Struts的ActionServlet是一个控制器,起着流程导航的作用,Struts 的Action类用来访问相关的业务类.
当ActionServlet从容器中接收到一个请求时,他会根据URI决定哪一个Action 来处理这个请求,Action进行输入的验证,访问业务层,从数据库或其他的数据服务器中获得必要的信息.
验证输入或者根据输入的数据更新数据库,Action需要知道哪些数据被提交了,ActionServlet把这些输入绑定到JavaBean中,这个JavaBean是Struts的ActionForm的子类,ActionServlet根据请求路径决定使用哪个ActionForm和Action.
每一个Http请求要对应一个Http响应,通常情况下,StrutsAction自己并不生成响应,而是把请求传递给其他的资源,比如Jsp页面.
在Struts中提供了一个ActionForward类使用逻辑名存储页面路径,当Action 完成业务逻辑处理的时候,会向AcitonServlet返回一个ActionForward,ActionServlet会根据存储在ActionForward中的对象调用相关的页面完成响应.
Struts把这些细节绑定到ActionMapping对象中,每一个ActionMapping都是和路径相关的,当这个路径被请求时,Servlet会找到哪些Action,ActionForm,ActionForward可以使用.
所有的这些细节Action,ActionForm,ActionForward,ActionMapping都在Struts-config.xml中被声明.ActionServlet在启动时会读取这个文件并且建立一个配置对象的数据库,在运行时ActionServlet会参照这些对象而不是这个配置文件.
不管你信不信,知道了这些你就可以建立一些简单的Web应用程序了.
六 建立第一Struts应用程序
我们的第一个Struts应用程序是一个简单的用户注册应用程序
1 功能描述:
用户需要输入用户名,密码,重复输入密码,当两次输入的密码相匹配时就认为注册成功,否则认为注册失败.
2 MVC模式分析:
M (model):模型层(业务逻辑) 我们这里的业务逻辑很简单就是判断两次输入的密码是否一致.
V(view):视图层:
A 用户输入的用户名,两次输入的密码
B 显示注册成功信息
C 显示注册失败信息
C(contrl)控制层:由Struts 的servlet来实现控制的导航.
3 界面原型:
A 录入注册信息
发件人 tech |
B 显示注册成功
发件人 tech |
C 显示注册失败
发件人 tech |
4 要完成这个程序我们只需要建立
一个ActionForm 绑定用户的输入信息
一个Action 进行业务处理
一个配置文件Struts-config.xml
三个表示层页面 注册信息录入页面,注册信息成功,注册失败显示页面
1)首先建立三个显示页面
Register.jsp success.html failure.html
相关代码如下:
Register.jsp:
html代码
- <%@ taglib uri="/WEB-INF/struts-form.tld" prefix="form" %>
- <form:form action="register.do">
- UserName:<form:text property="username"/><br>
- enter password:<form:password property="password1"/><br>
- re-enter password:<form:password property="password2"/><br>
- <form:submit value="Register"/>
- </form:form>
<form:submit value="Register"> </form:submit>
Success.html:
html代码
- <HTML>
- <HEAD>
- <TITLE>SUCCESS</TITLE>
- </HEAD>
- <BODY>
- Registration succeeded!
- <P><A href="register.jsp">try another?</A></P>
- </BODY>
- </HTML>
Failure.html:
html代码
- <HTML>
- <HEAD>
- <TITLE>FAILURE</TITLE>
- </HEAD>
- <BODY>
- Registration failed!
- <P><A href="register.jsp">try again?</A></P>
- </BODY>
- </HTML>
2)用户的输入是绑定到ActionForm中的,接下来我们建立一个ActionForm.
RegisterForm是一个JavaBean继承自Struts框架的org.apache.struts.ActionForm,这个对象能够捕获通过请求发送的输入域.当一个web浏览器提交一个表单的时候,web浏览器会为表单的每一个域在请求中建立一个参数.在ActionForm 中对应于Html的表单的每一个域都有一个相应的属性.ActionServlet会把请求中的参数和ActionForm中的属性进行匹配,调用属性的Setter方法来绑定请求中的值.
我们这里用户需要输入的数据有userName,password1,password2,我们的ActionForm就要提供SetUserName(String),SetPassword1(String),和SetPassword2(String)方法.
下面是我们的ActionForm 的代码:
RegisterForm.java:
package app;
import org.apache.struts.action.*;
public class RegisterForm extends ActionForm {
protected String username;
protected String password1;
protected String password2;
public String getUsername () {return this.username;};
public String getPassword1() {return this.password1;};
public String getPassword2() {return this.password2;};
public void setUsername (String username) {this.username = username;};
public void setPassword1(String password) {this.password1 = password;};
public void setPassword2(String password) {this.password2 = password;};
}
3)我们来建立业务处理层的RegisterAction类:
RegisterAction是继承自Struts框架的org.apache.struts.Action类.ActionServlet把刚刚组装的ActionForm传递给Action,Action负责验证输入,访问业务信息,决定把哪个ActionForward返回给Servlet.
RegisterAction.java的代码如下:
RegisterAction.java:
package app;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterAction extends Action {
public ActionForward perform (ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
// Cast the form to the RegisterForm
RegisterForm rf = (RegisterForm) form;
String username = rf.getUsername();
String password1 = rf.getPassword1();
String password2 = rf.getPassword2();
// Apply business logic
if (password1.equals(password2)) {
try {
// Return ActionForward for success
UserDirectory.getInstance().setUser(username,password1);
return mapping.findForward("success");
} catch (UserDirectoryException e) {
return mapping.findForward("failure");
}
}
// Return ActionForward for failure
return mapping.findForward("failure");
}
}
注意:
在struts1.1中使用的execute()方法来代替了perform()方法(perform是struts1.0)中的方法,execute()方法应用了更好的异常处理机制.
通过以上步骤我们已经准备好了所有Web开发必备的材料,下面我们要做的就是把这些材料进行有机的组合,建立一个实实在在的Web应用.
4)建立Struts的配置文件Struts-config.xml
Struts-config.xml是Struts框架中最重要的配置文件,所有的细节像Acgtions,ActionForms,ActionForwards,ActionMappings等都是在这里进行配置.ActionServlet将根据这个文件来实现流程的控制.
Struts-config.xml的内容如下:
Struts-config.xml:
<struts-config> <form-beans> <form-bean type="app.RegisterForm" name="registerForm"> </form-bean> <action-mappings>
七 知识回顾:
1)我们做了什么
为了完成这个注册程序我们建立了
A RegisterForm
B RegisterAction
C 三个页面 注册页面,成功失败显示页面
D struts-config.xml文件
2)他们是如何有机的结合起来的
我们再来改造一下前面那幅图:
</action-mappings> </form-beans> </struts-config>
发件人 tech |
我们回顾一下Struts-config.xml这个比较重要的配置文件:
Struts-config.xml:
<struts-config> <form-beans> <action-mappings><action path="/register"><forward path="/success.html" name="success"></forward></action>
xml 代码
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
- <struts-config>
- <form-beans>
- <form-bean name="registerForm" type="app.RegisterForm"/>
- </form-beans>
- <action-mappings>
- <action path="/register"
- type="app.RegisterAction"
- name="registerForm">
- <forward name="success" path="/success.html"/>
- <forward name="failure" path="/failure.html"/>
- </action>
- </action-mappings>
- </struts-config>
八 思考题:
我们建立一个简单的Web程序
需求描述: 用户注册的程序我们已经完成了,假定用户需要登陆系统,登陆时需要输入用户名,密码,当用户名和密码正确时显示欢迎页面,否则显示密码或用户名错误的页面.在这里为了使程序简单我们假设输入的密码为password就通过登陆验证。</action-mappings> </form-beans> </struts-config>
发表评论
-
struts2中的文件上传--都是官方文档惹的祸
2009-02-20 11:35 1453最近在使用struts2做一个多文件上传,使用的是Commo ... -
java面试题整理
2007-04-17 14:50 1594j2ee 面试题 1、MVC的各个部分都有那些技术来实现?如何 ... -
如何配置Tomcat以支持SSL
2007-04-11 09:52 19781 名词解释: page 3 1.1ssl(Server ... -
关于Servlet的路径
2007-04-10 15:39 1516http://localhost:8080/pathdemo/ ... -
关于查询串
2007-04-10 14:59 1270http://localhost:8080/petclinic ... -
include 指令和 include 动作的区别
2007-04-10 08:37 2022include 指令和 include 动作的区别 inclu ... -
Jsp&servlet中Dispatcher.forward和response.sendRedirect的区别
2007-04-10 08:35 4690RequestDispatcher.forward()是在服务 ... -
Java基础测试题
2007-04-03 10:24 35821 下面的语句哪一行在编译时没有警告和编译错误 a) ... -
jdbc试题
2007-04-03 10:19 3998一 选择题(共30分,每题5分,共6题)<o:p> ... -
通过JDBC操纵Oracle数据库LOB字段的几种情况分析
2007-03-27 10:10 1707在Oracle中,LOB(Large Object,大型对象) ... -
Java代码走查要点
2007-03-27 09:46 24271 尽可能不要使用import* 写的人很方便,读的人不爽,引 ... -
eclipse 快捷键2
2007-03-27 09:19 1568源菜单命令: ... -
eclipse 快捷键1
2007-03-21 08:16 1884文件菜单命令: ... -
Mastering JaveServerFaces(JSF)介绍
2007-03-21 08:10 2068JavaServer Faces(JSF)是一项 ... -
《eclipse in action》读书笔记 第七章 web开发工具
2007-03-20 08:29 878主要内容: 1 安装Tomcat插件 2 调试jsp和serv ... -
《eclipse in action》第五章 用ant构建项目
2007-03-20 08:26 1427主要内容: 1 java的构建工具ant 2 ant 的pro ... -
《Eclipse in action》读书笔记―第四章 eclipse中的源代码操作
2007-03-20 08:23 1379主要内容: 1 导入一个 ... -
《Eclipse in action》 第三章 java开发循环,测试,代码,重复
2007-03-19 08:39 1549主要内容: 1 简短介绍灵活开发,测试-驱动模式开发 2 JU ... -
《Eclipse in action》 读书笔记-第二章 从eclipse的工作台开始
2007-03-19 08:34 1300主要内容: 1 下载和安装eclipse 2 ecli ... -
eclipse in action 读书笔记(第一章-概述)
2007-03-19 08:32 10841 eclispse的网站:www.eclipse.org 2 ...
相关推荐
本资料"struts入门与实践.zip"是一个压缩包,包含了关于Struts框架的基础知识和实战教程。 Struts的核心概念包括: 1. **Action类**:在Struts中,Action类是业务逻辑的主要载体。它负责接收来自客户端的请求,...
这个"struts入门最简单例子"旨在帮助初学者快速理解并掌握Struts2的基本用法。Struts2框架提供了丰富的功能,如动作映射、结果类型、拦截器、动态方法调用等,使得开发者能够构建结构清晰、可维护性强的Web应用程序...
struts 入门与实践
本资源“struts入门源代码”旨在为初学者提供一个基础的入门教程,帮助理解Struts框架的工作原理和实际应用。 在Struts框架中,Controller部分通常由Action类实现,它负责接收用户请求,调用相应的业务逻辑(Model...
本资源"struts入门(中文版).pdf"为初学者提供了一个全面的 Struts 学习指南,涵盖了从基础配置到高级特性的多个方面。 1. **环境配置**:在开始使用 Struts 之前,你需要先搭建开发环境。这通常包括安装 Java ...
Struts入门 作者:余立非 本书为入门者准备的,其中讲述了Struts的一些基础东西。请读者首先能建立一个Struts的开发环境,其次了解Struts基础的东西,由MVC的概念进入Struts。 目录 前言 简介 第一章 配置环境 第二...
这个“struts入门简单例子”旨在为初学者提供一个基础的 Struts 应用示例,帮助理解 Struts 的核心概念和工作流程。 1. **MVC设计模式**:Struts 是基于 Model-View-Controller (MVC) 设计模式的,它将应用的业务...
Struts入门 作者:余立非 本书为入门者准备的,其中讲述了Struts的一些基础东西。请读者首先能建立一个Struts的开发环境,其次了解Struts基础的东西,由MVC的概念进入Struts。 本书的目的是使你快速入门。本书的...
在Struts入门的过程中,首先需要了解的是Struts的基本架构。Struts的核心是ActionServlet,它是控制器,负责处理所有的HTTP请求,并根据配置文件决定调用哪个Action来处理请求。Action类是业务逻辑的载体,它会与...
在这个"Struts入门实例:通讯录"中,我们将探讨如何使用Struts框架来创建一个简单的通讯录应用。 首先,了解通讯录应用的基本需求。该应用应具备添加、查看、编辑和删除联系人的功能。在Struts框架下,这些功能通常...
本篇将深入探讨Struts入门的相关知识点,包括其核心概念、工作原理以及实际应用。 一、Struts的基本概念 1. MVC模式:MVC模式是软件工程中一种用于分离业务逻辑、用户界面和数据存储的设计模式。在Struts中,模型...
struts入门与实践 struts入门的好助手,深入浅出,精辟易懂
这个“Struts入门小程序”旨在帮助初学者理解并掌握Struts框架的基本用法和核心概念。通过提供的多个模块,我们可以深入学习到Struts在实际应用中的常见场景。 首先,我们来看登陆模块。在Web应用程序中,用户登录...
### Struts 入门知识点详解 #### 一、概述 本文档通过介绍一个简单的Struts应用实例——`helloapp`,帮助读者快速掌握Struts框架的基础知识与开发流程。`helloapp`应用的核心功能是接收用户的姓名输入,并返回个性...
在Java Struts入门学习中,首先要理解的是MVC设计模式。Model代表应用程序的数据模型,View负责显示数据,Controller接收用户请求并调用相应的Model和View进行处理。Struts框架将这些元素整合在一起,为开发者提供了...
这个"经典struts入门(中文PDF版)"资源对于初学者来说是一个很好的起点,它包含详细的讲解和项目制作截图,使得学习过程更加直观易懂。 Struts框架的核心组件包括: 1. **ActionServlet**:这是Struts框架的入口点...
在Struts入门学习中,首先需要理解MVC设计模式。MVC模式是一种将业务逻辑、数据和用户界面分离的设计方式。Model代表应用的数据模型,负责处理业务逻辑;View是用户界面,用于展示数据;Controller是两者之间的桥梁...
在《Struts 入门实践》这本书中,作者详细介绍了如何使用Struts进行实际的Web开发。 首先,Struts框架的核心概念包括Action、ActionForm、Dispatcher Servlet(也就是Struts Controller)和配置文件。Action是处理...