mvc
vc
controller,
(depends on view)
front controller, back controller
Steps:
1. c:/abc/s1
WEB-INF
classed
lib
web.xml
2. import struts
3. web.xml, deploy ActionServlet(Front Controller)
部署方式:
<web-app>
<servlet>
<serlvet-name>
a
</serlvet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<!-- 就只有这一个Servlet -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>
a
</servlet-name>
<url-pattern>
*.do <!-- /do/* 也可以 -->
</url-pattern>
</servlet-mapping>
</web-app>
我佛了,到底在讲什么
public class ActionServlet {
public void service(request, response) {
// code snippet 1, faster
Action a = (Action) ...;
a.execute(...);
// code snippet 2, no need to extends Action
String className = null; // from config file
String methodName = null; // from config file
Object o = Beans.instantiate(
getClass().getClassLoader(),
className
);
Method method = o.getClass().getMethod(methodName);
method.invoke(a, ...);
}
}
public class CalcForm extends ActionForm {
private String v1, v2, result;
public String getV1() {
return v1;
}
public void setV1(String v1) {
this.v1 = v1;
}
}
import javax.servlet.*;
import javax.servlet.http.*;
public class AddAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response
) throws Exception {
CalcForm form = (CalcForm) form;
Calculator c = new Calculator();
// ...
}
}
public class GenericForm {
private Map<String, Object> m;
public Object get(String varName) {
return m.get(varName);
}
public void set(String varName, Object var) {
m.put(varName, var);
}
}
当然其实已经有万能Form了:
public class DynaActionForm {
}
配置文件
<!-- struts-config.xml
Servlet, Listener, Filter, JSP, Tag, ServletConfig, ServletContext, HttpServletRequest, HttpServletResponse -->
<!-- in struts-config.xml -->
<action-mappings>
<action type="AddAction" path="/add" name="calcForm">
<forward name="result" path="result.jsp"/> <!-- 多个可能导向的结果。 -->
<forward name="error" path="error.jsp"/> <!-- 多个可能导向的结果。 -->
</action>
</action-mappings>
课后自学
- Struts 1和2的区别
- DispatchAction 用于减少后端控制器的个数
- 老师写的Struts工程
考试题
有一道题是两段代码,分析他们的性能差异。