struts2基本知识总结1

1.struts.xml配置文件(解释):

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"""><struts></span><span style="color:#ff0000;"><span style="font-size:18px;"><!– package:包* name:包名,唯一的,必选项* namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是"/"。页面中请求连接的前半部分* extends:继承* extends="struts-default":struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件* 为什么要继承这个struts-default.xml文件?</span></span><pre name="code" class="html" style="font-size:18px;"><span style="white-space:pre"></span>1.<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">struts-default.xml声明了所有的拦截器</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"></span>2.有默认的拦截器栈</span><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size: 18px;"><span style="white-space:pre"></span>这两行是</span></span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;">struts-default.xml中确认默认拦截器栈和默认执行action的类</span><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size: 18px;"></span></span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><span style="white-space:pre"></span><default-interceptor-ref name="defaultStack"/><default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

–><package name="primer" namespace="/primer" extends="struts-default"><!– action:* name:对应页面中请求连接的后面半部分* class:对应要执行的类的完整路径 –><action name="helloWorldAction" class="cn.itcast.primer.HelloWorldAction"><!– result:结果类型* name:对应的是执行的类的方法的返回值* 后半部分的文本内容:要转向到的页面 –><result name="success">/primer/success.jsp</result></action></package></struts>

2.action请求路径是namespace + action的name

public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {Map extraContext = this.createContextMap(request, response, mapping);ValueStack stack = (ValueStack)request.getAttribute("struts.valueStack");boolean nullStack = stack == null;if(nullStack) {ActionContext timerKey = ActionContext.getContext();if(timerKey != null) {stack = timerKey.getValueStack();}}if(stack != null) {extraContext.put("com.opensymphony.xwork2.util.ValueStack.ValueStack", this.valueStackFactory.createValueStack(stack));}String timerKey1 = "Handling request from Dispatcher";try {UtilTimerStack.push(timerKey1);<span style="color:#ff0000;">String e = mapping.getNamespace();String name = mapping.getName();String method = mapping.getMethod();</span>ActionProxy proxy = ((ActionProxyFactory)this.getContainer().getInstance(ActionProxyFactory.class)).createActionProxy(e, name, method, extraContext, true, false);request.setAttribute("struts.valueStack", proxy.getInvocation().getStack());if(mapping.getResult() != null) {Result result = mapping.getResult();result.execute(proxy.getInvocation());} else {proxy.execute();}if(!nullStack) {request.setAttribute("struts.valueStack", stack);}} catch (ConfigurationException var17) {this.logConfigurationException(request, var17);this.sendError(request, response, 404, var17);} catch (Exception var18) {if(!this.handleException && !this.devMode) {throw new ServletException(var18);}this.sendError(request, response, 500, var18);} finally {UtilTimerStack.pop(timerKey1);}}

2.action搜索顺序

3.<default-action-ref name="hello" /> 如果没有找到对应action,默认执行的action

4.<constant name="struts.action.extension" value="html,love"/> 用来配置请求action的后缀名,多个用”,“隔开

1.可在struts2.xml中配置

2.可在struts.property文件中配置:struts.action.extension=html

如果都进行配置,只有struts.property文件的配置起作用

原因:常量配置和文件加载的顺序有关系,先struts-default.xml,再struts.xml,再struts-plugin,再struts.property,再web.xml,后面会覆盖前面

5.其他常量和细节

上天完全是为了坚强你的意志,才在道路上设下重重的障碍。

struts2基本知识总结1

相关文章:

你感兴趣的文章:

标签云: