首页
|
互联网
|
IT动态
|
IT培训
|
Cisco
|
Windows
|
Linux
|
Java
|
.Net
|
Oracle
|
软件测试
|
C/C++
|
嵌入式开发
|
存储世界
|
服务器
网络设备
|
IDC
|
安全
|
求职招聘
|
数字网校
|
网页设计
|
平面设计
|
技术专题
|
电子书下载
|
教学视频
|
源码下载
|
搜索
|
博客
|
论坛
输入您的搜索字词
提交搜索表单
首页
资讯动态
认证考试
新手入门
核心技术
高级技术
J2EE
J2ME
Java&XML
开源技术
其他技术
RSS订阅
论坛
专题
您现在的位置:
中国IT实验室
>>
Java
>>
J2EE
>>
mvcwea
>> 正文
MVC 构架学习之渐行渐进(三)
ChinaItLab
2004-7-15
保存本文
推荐给好友
收藏本页
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
[b:9e5a30927b]操作Servlet[/b:9e5a30927b]
action
ActionServlet
action
*.do
部署信息把以.do结尾的URL映射到操作的servlet. JSP页面在引用的方法为:
action="<%=response.encodeURL("actions.LoginAction.do")%>">
[b:9e5a30927b]用Servlet把URL映射到操作类[/b:9e5a30927b]
示例:ActionServlet类 /WEB-INF/classes/ ActionServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import actions.Action;
import actions.ActionRouter;
import actions.ActionFactory;
public class ActionServlet extends HttpServlet
{
private ActionFactory factory=new ActionFactory();
public void init(ServletConfig config) throws ServletException
{
/*根据ActionRouter类导读内容中对HttpServlet类的描述来看,HttpServlet规定了必须执行的方法,该时期调用了init()方法,当Servlet被Servlet引擎载入后,接下来就会执行init()这个方法,因此我们可以重载这个方法以做一些我们自己的初始化的工作。在Servlet的生命期中,init()方法仅在
服务器
装入Servlet时被执行一次,此后无论有多少客户机访问这个Servlet,init()都不会被重复执行。*/
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException, ServletException
{
/*在Servlet被载入后,主要通过service()方法对外响应,该方法可以被同时、多次地呼叫。*/
try
{
Action action=factory.getAction(getClassname(req),getClass().getClassLoader());
ActionRouter router=action.perform(this,req,res);
router.route(this,req,res);
}
catch(Exception e)
{
throw new ServletException(e);
}
}
public String getClassname(HttpServletRequest req)
{
String Path=req.getServletPath();
int beginPos=Path.lastIndexOf("/");
int endPos=Path.lastIndexOf(".");
if (beginPos>-1 && endPos>beginPos)
{
Path=Path.substring(beginPos+1,endPos);
}
return Path;
}
}
该类的service方法实现了:从操作库中获取操作,然后调用接口的perform方法。由perform的实现返回一个操作路径,最后由ActionRouter类的route方法进行重定向操作。达到页面跳转的作用。
导读:getClassname(req)将获取操作类名,过程如下:
由req.getServletPath()获取servlet的路径为/ actions.LoginAction.do通过截取得到类名:actions.LoginAction。
getClass().getClassLoader():getClass()方法是类的一个方法,主要用于返回一个类型为Class的对象。该例中返回为:class ActionServlet
GetClassLoader()是Class类的一个方法,返回为ClassLoader对象。本例返回为:sun.misc.Launcher$AppClassLoader@92e78c。这说明加载ActionServlet类的类的加载者(classLoader的翻译)为AppClassLoader.那么AppClassLoader又是什么呢?下面我们来解答该问题:
首先要明确java虚拟机上所有的类,必须要加载才能运行。JVM在运行时会产生三个ClassLoader, 它们分别是Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader:
ClassLoader 作 用
Bootstrap ClassLoader 加载核心类库static const char classpathFormat[] ="%/lib/rt.jar:""%/lib/i18n.jar:""%/lib/sunrsasign.jar:""%/lib/jsse.jar:""%/lib/jce.jar:""%/lib/charsets.jar:""%/classes";这里我们可看到为什么在classpath里为什么不加载这些类
Extension ClassLoader 加载扩展类,即/lib/ext中的类。
AppClassLoader 加载Classpath中指定的类。
从上面可以看出,所有web应用程序的类都是AppClassLoader来加载的,三者的关系为:AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。加载一个类时,首先BootStrap先进行寻找,找不到再由ExtClassLoader寻找,最后才是AppClassLoader。ClassLoader这种加载类的模型被称为是委托模型。
下面我们要了解的问题是动态加载类原基本原理?或者说为什么我们要这么做?
【责编:admin】
相关文章
J2EE MVC模式JSF与Struts的异同
在Swing中使用高级的MVC和POJOs
J2EE综合应用之——解析MVC模式
Spring WebFlow:4(Spring MVC和WebFlow)
MVC在J2ME项目中的应用之MVC慨述
J2EE的Web和企业架构(WEA)设计模式
MVC 构架学习之渐行渐进(四)
MVC 构架学习之渐行渐进(二)
MVC 构架学习之渐行渐进(一)
MVC 设计模式:将 Web 应用分三层
编辑推荐
· [
开发工具
]
脚本编程语言--JavaFX应用问题解答
· [
Hibernate
]
开源框架Hibernate3的新特性以及发展趋势
· [
oop面向对象
]
使用重构移除丑陋的if else代码
· [
Spring
]
基于Spring框架的WebSphere应用开发
· [
Eclipse
]
Jazz能否复制Eclipse的成功
· [
EJB
]
一步一步学EJB 3.0(二):初探企业EJB模块开发
· [
Struts
]
struts简单案例-适合初学者(一)
· [
高级编程
]
防止java反编译的一些常用方法
· [
安装配置
]
在 Tomcat 上配置虚拟主机
· [
高级编程
]
jacob中的QueryInterface()方法
相关产品和培训
文章评论
友情推荐链接
·
Asp源码
PHP源码
·
CGI源码
JSP源码
·
建站书籍教程
·
服务器软件
.net源码
·
建站工具软件
·
IDC资讯大全
·
机房品质万里行
·
IDC托管必备知识
·
网站推广优化
·
全国IDC报价
认证培训
专题推荐
·
关于Java框架技术专题
·
XML全攻略技术专题
·
JAVA开源技术介绍专题
·
Java嵌入式开发之J2ME技术专题
·
超前体验 Oracle 11g的5个新特性…
·
揭密使用VB.NET的五个实用技巧
·
Oracle和SQL Server常用函数对比专题…
·
展现C#世界 C#程序设计专题…
·
Java入门 Tomcat的配置技巧精华专题…
·
Oracle RMAN物理备份技术详解…
今日更新
·
J2ME手机游戏:Canvas类基本绘图实例
·
J2ME手机游戏:Canvas类基本绘图应用
·
J2ME手机游戏:TimerTask与Timer类的应用
·
J2ME手机游戏:运行实现Runnable接口的类
·
J2ME手机游戏设计:Thread类
·
J2EE综合:Struts上传多个文件的例子
·
推荐:Blogjava备份数据的阅读器
·
SpringSide 3.0.1接踵而来
·
对J2EE应用系统分层设计的思考
·
利用WebSphere创建和管理ESB解决方案
社区讨论
博客论点
频道精选
·
新版CCNA考试大纲 07年8月1日生效
·
新手学习宝典:Linux常用命令全集
·
知已知彼,深入了解系统安全知识
·
从入门到精通 java初学者实践系列教程
·
共同学习——Oracle入门基础专题
·
ADO.net与PowerBuilder的综合比较
·
评论:中国互联网“钱”途何在?
·
中科院:龙芯要成"中国奔腾" 能卖1亿颗
Java 频道导航
新手入门
:
安装配置
|
开发工具
|
JDK
|
oop面向对象
核心技术
:
SwingAwtApplet
|
高级编程
|
网络编程
Jvm技术
|
JavaMedia
高级技术
:
设计模式
|
UML/OO
|
p2p/Jxta
|
多线程
|
JavaSecurity
J2EE
:
J2ee核心
|
Servlet/Jsp
|
EJB
|
JDBC/JDO
|
Rmi/Corba/Jini
|
Mvcwea
|
应用服务器
J2ME
:
核心技术
|
嵌入式
|
无线开发
Java&XML
:
XMLBeans
|
WebServices
开源技术
:
ANT
|
Struts
|
Hibernate
|
Spring
Eclipse
|
JBoss
|
Tomcat
|
JUnit
其他技术