Struts总结
2011.11.6
Jpetstore的实现主要用了两个重要的东西,一个是struts,另一个是ibatis。
首先总结一个struts。据我了解,struts其实就是在MVC模式的基础上进行了完善的函数封装。使得我们更加高效的进行Web应用开发。因此,struts就是面向对象的设计,也就是一个个功能齐全的类。所以,使用很方便。
struts能够很好的分离出业务逻辑层,使得jsp与事务处理之间交叉更少,使得逻辑流程更加清晰明了。同时struts很好的实现了请求的过滤和请求的跳转。
MVC设计模式
M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层V,主要设计数据库的各种操作。
V: View(Presentation layer),视图,就是用户交互界面,在VC之间进行数据的交互。
C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图。
Struts 提供的API
M:由于不同的web开发,会有不同业务逻辑,因此就没有提供相应的类。因此ibatis的引进完善这个体系,使得数据的存储变得更加灵活。
V:Struts提供了action form创建form bean, 用于在controller和view间传输数据。
C:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Action form,然后调用一个Action控制器。Action控制器中提供了model的逻辑接口。
对比jpetstore上的代码(如登陆验证操作):
signonForm.jsp
<html:form action="/shop/signon" method="POST">
<p>Please enter your username and password.</p>
<p>
Username:<input type="text" name="username" value="j2ee"/>
<br/>
Password:<input type="password" name="password" value="j2ee"/>
</p>
<input type="submit" name="submit" value="Login"/>
</html:form>
Struts-config.xml
<form-bean name="accountBean"
type="com.ibatis.jpetstore.presentation.AccountBean"/>
...
<action path="/shop/signon"
type="org.apache.struts.beanaction.BeanAction"
name="accountBean" scope="session"
validate="false">
<forward name="success" path="/shop/index.shtml"/>
</action>
Web.xml
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
AccountBean.java
public String signon() {
account = accountService.getAccount(account.getUsername(), account.getPassword());
if (account == null || account == null) {
String value = "Invalid username or password. Signon failed.";
setMessage(value);
clear();
return FAILURE;
} else {
account.setPassword(null);
myList = catalogService.getProductListByCategory (account.getFavouriteCategoryId());
authenticated = true;
return SUCCESS;
}
}
总的来说,struts就是一个辅助的开发工具包,能够以MVC框架来辅助开发者实现便捷的开发过程,使得我们只关注业务逻辑,而不需要去关注C层的实现过程。因为struts已经把控制层完善得很好了。我们只需要把重点放到业务逻辑上,也就是M,数据层次逻辑。