小菜鸟的Struts MVC和Java反射机制等知识的学习总结
来源:互联网 发布:知迷途其未远 编辑:程序博客网 时间:2024/06/15 13:56
最近学习Struts MVC,做了一些东西,明白了struts为什么是那样的结构,小菜鸟一个,以下是我自己几点浅浅的理解:
struts的结构,视图,模型,控制,三个部分:
1.在用户请求的*.jsp里面没有出现任何的处理代码,页面设计和后台的处理工作分开,提高了各自的工作效率。
2.控制部分,是一个总的控制台,只是接受了所有用户请求的页面,然后把它交给对应的action来处理
3.控制中心是怎么找到对应的action的呢,当提交一个请求程序就知道该去往哪里,具有一定的"智能",控制它的结构里面有一个关于所有的action的XML,XML文件包含了所有的action的信息,action要处理哪一个页面,页面从哪里的,页面里面用户填写的信息数据又该存到哪里去,还有处理完以后需要转向哪里去,里面的信息,在struts-config-xml文件里面都有,而这个文件在web.xml里面又有说明了,它应当被解析的,struts开发环境帮助做了这些工作。
4.action处理结果返回给了控制台,然后控制台要把结果返回给相应的用户,这个控制台不做任何页面里面的数据处理工作。
5.模型部分完成所有用户的请求的页面的数据处理。
最近编程做的一个东西没有使用struts的开发环境,不完全采用struts结构
编程环境:MyEclipse +tomcat 新建web project
关于其中的知识点总结:
1.关于Java反射
Java反射机制,既然是反射,顾名思义,就是像一面镜子让你能够通过它看到你原来所使用的类;
它的用途:用于获取有关的类的信息,类的变量成员,名字,变量的数据类型,修饰类型,方法成员,方法名字,方法的参数,返回值类型,
可以构造反射的类的对象,可以执行一个类的方法等。
在我的工程里面用到了Java反射的几个最常用的接口:
Class cls = Class.forname("classname";); //取得了要反射的类
ObjectClass objectClass = (ObjectClass )cls.newInstance(); //等价于objectClass = new clssname();
Method method[] = cls.getDeclaredMethod(); //获取这个类的所有的方法
Class pvec[] = method[0].getParamenterType(); //获取这个类的参数类型
Object arglist[] = new Object[n]; //新建一个object的数组,用于存放你要传入的参数的值;
arglist[0] = new parametertype("你要传入的参数值"); //把待传入的参数值存入数组;
Object retobj = method.invoke(ObjectClass ,arglist); //method.invoke(object,object[]);
这里是执行了一个new clssname()对象的方法;
resultname = (填写方法返回值的类型)retobj; //得到执行了的方法的返回值;
2.关于Java中的继承和多态问题
(1)关于继承的问题
注意上面的Java的反射中,有一个问题,
ObjectClass objectClass = (ObjectClass )cls.newInstance(); //等价于objectClass = new clssname();
等价于 ObjectClass objectClass = new clssname();在这里按照我们一般的定义一个类的对象的方法,应当是以下的定义:
ClassName classname = new clssname();上面的这种定义方法,就包含了Java继承的机制,
ObjectClass 与ClassName 这两个类之间存在着一种关系,(可以理解,在我们所写的程序里面,各个类不是孤立存在的,它们之间存在的联系,被包含,被调用,组合,继承等,这些关系的共同作用,这一点是关于Java的代码复用,实现了我们程序的功能,然而得到了他们之间的关系,在实际操作中又是如何使用它们的,这个我自己的理解,用接口来解决这个问题。)这一点与c++里面函数之间的继承性是相通的。
在我的程序里,是这样使用的,
public class AbstractAction{ //action的基类
public String process(HttpServletRequest request,HttpServletResponse response,String beanname){
return null;
}
}
public class Action extends AbstractAction{ //action类
public String process(HttpServletRequest request,HttpServletResponse response,String beanname){
return "display";
}
}
在action中的extends是在声明“新类与旧类,基类相似”,新类Action 会自动获得AbstractAction中所有的域和方法。
在这个地方,Action 的对象也是一种AbstractAction对象,如何理解,继承重点强调的是新类与基类之间的关系,新类是现有类的一种类型,所以Action的对象也是一种类型的AbstractAction,
通俗的举例:
public class anamal{};
public class panda extends anamal{};
定义:
animal a = new anamal();基类是动物;
panda b = new panda(();定义了一个熊猫对象;b是该对象的引用;
animal c = b定义了一个熊猫的对象,
但是说明了熊猫也是属于动物;在此有一个很重要的概念,“向上转型”panda的引用b转换成了animal 的引用c
所以有此,不难理解为什么上面的ObjectClass objectClass = (ObjectClass )cls.newInstance();
cls.newInstance()是定义了一个新类的对象,在此“向上转型”成了基类的对象
写到此,不难明白,在1关于Java反射 里面,Object arglist[0] = new parametertype("你要传入的参数值");
假设parametertype是String类型,Object arglist[0] = new String("你要传入的参数值"); 前面为什么写的是Object,object是String类的标准根类,也即基类,所以这个地方用了一个object的引用。
(2)Java中的多态问题
在我的程序里面,有一段关于所有的action解析,
public class ActionReflect {
public String reflect(HttpServletRequest request,HttpServletResponse response ,String actionurl,String beanname){
String resultname = null;
AbstractAction abstractaction = null;
try{
Class cls= Class.forName(actionurl);
abstractaction =(AbstractAction) cls.newInstance();
resultname = abstractaction.process(request, response, beanname);
System.out.println(resultname);
}catch (Throwable e) {
e.printStackTrace();}
return resultname;}
基于上面的继承问题,会发现,在这里abstractaction.process(request, response, beanname);新类Action 和基类AbstractAction都有一个方法process(),基于上面继承中,不难理解,这个地方实质上执行的是Action的一个对象的process(),
而其中的机制则是,引入绑定的概念,所谓绑定,其实质是将一个方法调用与一个方法的主题关联起来叫做绑定,该方法是什么,是哪个主体在调用这个方法,这个方法的执行体是什么,编译器并不知道它传入的对象类型,但是绑定机制则在对象里面隐藏了对象的数据类型,那么编译器在执行时得到这个这个对象的类型,它的方法。
Java的这种机制解决了基于同一个基类的所有的继承新类,它们的各自不同的行为和特征,在执行的时候所有方法执行代码编写都是调用了基类的引用。
3.关于Java的webproject中的web.xml中servletmapping和*.jsp中表单填写的<form action=..>中action的问题
做网页以来的时间,我一直没用弄明白一个问题,
<servlet-mapping>
<servlet-name>Test</servlet-name> //声明了一个servlet
<url-pattern>*.do</url-pattern> //为servlet配置了很多个路径
</servlet-mapping>
将servlet的声明映射到URL--*.do,当用户请求页面时,就会调用Test这个servlet,在这里一个servlet-Test对应了很多个路径,定义了很多条路是通向这个目的地。
关于页面*.jsp里面的表单,这些表单,例如:
<body>
<form action="action.do" method="post">
<table border="10" width="2%" align="left">
<tr>........
form表单的第一个属性action,这个地方填写的是action.do,所有的表单都是提交给servlet的,注意上面的servlet的映射URL-*.do,
这里我的理解是,为提交的页面分配一条路,action指明了这条路,页面应该提交给谁,
当我们输入网址Http://localhost:8080/../index.jsp,tomcat内部查找了表单里面的action,把它抛到这个action,然后找到了证servlet
- 小菜鸟的Struts MVC和Java反射机制等知识的学习总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- Java反射机制知识总结
- Java反射机制的总结
- 学习Java的反射机制
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- 上传图片并生成缩略图的一个方法
- C# 中的委托和事件
- linux logo 的启动方式
- long---clob转化
- 一些网址,陆续添加
- 小菜鸟的Struts MVC和Java反射机制等知识的学习总结
- drag与drop事件
- OpenGL发展历程与扩展
- Setforegroundwindow 将窗口置最前
- (6K-10K外派到盛大).NET/PHP/Java/Web前端/Linux C++开发
- 云计算是什么
- 只是记录下
- 无法安装 Windows Internet Explorer 因为其他程序或更新正在等待重启您的计算机,解决方法
- 前营中间件(2) - 配置