日期:2014-05-20  浏览次数:20755 次

struts 原理问题,请熟悉原理的看一下。
actionservlet调用在actionmapping中声明的action类,创建并生成相应的actionform bean实例。然后把actionform bean传到action类;
actionservlet对action类实例调用适当的perform方法,给它传递actionform bean,actionmapping,request和response对象;
action在其perform方法里将产生处理好的业务逻辑的结果;
actionservlet接受从perform方法返回的actionforward,转发response到由actionforward指定的源(可以是一个jsp或另一个action或另一个servlet)

我想问一下,actionservlet可以看到吗,像action一样能看到,或者它只是struts的原理,摸不到也看不到,还有actionform如果没有这一步的话,actionservlet会不会直接找到action类然后调用它的perform方法呢??

------解决方案--------------------
你好,最近我倒是在看STRUTS 1.X,希望我的回答能使你明白一些,当然有错误理论的话,也请高手指点。
首先ActionServlet是一个标准的HttpServlet子类,在web服务器截获指定的url 例<url-pattern>*.do</url-pattern>时,请求就被被指向ActionServlet,那么ActionServlet自然会执行其对应的doGet() 或 doPost()方法。ActionServlet在doGet() 或 doPost()方法中调用process(HttpServletRequest request,HttpServletResponse response)。在process中调用processActionPerform(request, response, action, form, mapping),当然在这之前process方法中,它会从mapping中获取你指定的action,并进行一系列操作,例如,从mapping中找对应action的form并将其填充画面带过来的值,如果没有指定form将跳过,以及一系列的初始化操作。而processActionPerform()方法就是调用你自己继承action那个类的action.execute(mapping, form, request, response)方法,这时struts就与开发者正是的关联起来。当然我只是说了大概的流程,还有许多细节都忽略了。那就得LZ自己研究了。希望所说的能对你有一些帮助。