深入理解struts碰到的几个问题?

看了这篇文章 https://www.ibm.com/developerworks/cn/java/l-struts1-1/
对其中有些地方不理解 请大家指教下

1客户端请求流程是怎么到达struts的,在web.xml之中找到了*.do文件之后呢?不需要到struts-config.xml文件中找程序吗?还是struts-config.xml这个文件只用于找form-bean?
2.控制器如果发现struts-config.xml这个文件中没有对应的action子类的情况下,怎么转到jsp或者静态页面下去?action的path属性是不是就是web.xml文件中的<servlet-class>属性去掉.do?
3.文中写到ActionForm首先利用属性的getter和setter方法来实现初始化。请问是怎么初始化的?把接收到的数据set进去吗?
4。actionformbean的生命周期是什么?为什么有说servlet-context有说session的?
5。Struts将根据xml配置文件中的定义来检验表单输入,并将不符合要求的错误信息输出到页面
这句话后面的输出到页面时怎么输出的?

看来你应该学的是struts1了

1、客户端的请求通过你在web.xml中配置的ActionServlet来决定你的请求由谁来处理。ActionServlet会在Web项目启动的时候把struts-config.xml文件内容读到内存中,如果你的请求是struts的请求(取决于你的ActionServlet的配置,比如*.do),那么ActionServlet会把你的请求根据struts-config.xml的信息转发到相应的Action来处理。

2、如果你的请求是struts的请求,比如a.do(web.xml里的配置),而又找不到的话,会出异常。如果直接请求的是.jsp或.html之类的非struts请求,ActionServlet会直接调用Request的getDispatcher.forward()方法帮助你转发请求。这里不太确定了,因为好久没用过struts1了,你直接看到ActionServlet的源码会比我说的更清楚一些。

3、ActionForm的初始化的问题我没明白你想表达什么。你的意思是不是页面的Form是如何传到ActionForm中的?

4、FormBean的生命周期是你自己在struts-config.xml里设置的,scope="xxx",但默认是Session级的,这个一般情况Request级的较常用一些。

5、当Struts验证表单失败时,会在Request里放置出错的信息。在jsp页面,用Struts的<html:error/>标签来输出。error标签会检查上下文环境,有没有可输出的信息。

希望回答的问题能帮助到你。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-10
你很多struts1的基础问题都没搞明白,谈不上深入。
1.到struts-config.xml文件找对应的Action;form-bean是你配置的action来选择调用的。
2.struts-config.xml这个文件中没有对应的action就会报错;跳转页面是由action的forward属性决定的;action的path属性是你的jsp页面中的form标签中的action属性一样的。
3.如何初始化的你不用管,只要记住jsp中input标签的名字和你ActionForm中属性的名字一致,就可以成功的set进去。也就是说页面提交后先用set方法将数据set到ActionForm中,action里用的时候再通过get方法取出来。
4.就是一次提交。你再提交其他的,这个就没了。
5.将错误信息返回到你提交的页面,并输出在页面上。具体如何实现的,可以查看源码。本回答被提问者采纳
第2个回答  2010-05-10
这东西没老师带入门的话,你总会以为自己搞明白了,但却是不明白的哦!
下面来给你讲解下吧:
1.首先,我们的页面发一个请求,就是url(也就是你输入的网址),在struts-config.xml里面有个配置名称叫path的,这个配置的path是经过程序处理过的,它刚好对应的就是url(这个path是由网址url经过字符串截取得到的)。
2.struts-config.xml里还配置有type,name,forward等,其中type是你这个网页要去请求的那个Action类(struts里的类),name对应的是你要验证的form表单,也就是formbean那个配置,forward对应的是你要转发还是跳转的页面参数。
3.通常struts-config.xml里配置的东西我们都放到一个个的Map中,然后一个页面请求,我们去这个map找有没有这个path,找到了我们去struts-config.xml中取出配置的type,取出来后通过JAVA反射机制将它自动映射成struts的类。
4.接着判断name的存在与否,存在则你可以去查找formbean里是否有与他相同的的formbean,同时这里面也有个type的配置,这也是用java反射机制去生成form类。
5.至于怎么通过配置文件生成类那些,看你这基础都说深入理解struts了,说了你可能也不懂,其实你的JAVA基础还得加强。之所以看不懂我想可能是因为这步,JAVA反射机制动态生成类。
6.最后,这些工作完成后,去生成forward参数,forward的生成是这样的
String forward = action.execute(request, response);这里的action就是struts的action实例。通过反射机制Class clazz = Class.forName(className);生成并实例化Action action = (Action) clazz.newInstance();的
7.最后,你再通过struts-config.xml的一个配置参数redirect="" true还是false判断转发还是重定向。
第3个回答  2010-05-23
AtionServlet是struts的核心类,理解了这个的运行原理
你下面的问题都不是问题
自己去看AtionServlet的源码,好过听别人讲.一知半解
相似回答
大家正在搜