Mybatis JPetStore 学习笔记(一):
1. 首先看配置文件:
根目录/WEB-INF 下有两个配置文件:applicationContext.xml和web.xml
很显然,applicationContext.xml是专门用来配置spring的。
其中有:
1)对数据库的配置:jdbc:embedded-database
2)数据库transaction manager的配置:org.springframework.jdbc.datasource.DataSourceTransactionManager
3) enable component scanning: <context:component-scan base-package="org.mybatis.jpetstore.service" />
4)<context:annotation-config />
5)<tx:annotation-driven />
6)define the SqlSessionFactory,并指明mybatis的配置文件。
7)scan for mappers and let them be autowired:<property name="basePackage" value="org.mybatis.jpetstore.persistence" />
web.xml则是常规配置,
1)其中就有stripes的配置:StripesDispatcher,这个见配置最后的filter和servelet,这个和stripes-example一模一样,具体为什么这样配置,以后来详细研究。
前面还有一些配置,这主要是对spring的配置。
其中filter的配置,如果已经有点遗忘了,可以参考书head first jsp and servlet的第13章,678页(PDF 683)
2)还有对spring的配置,这里用到了context的概念,具体可以参考下面的描述。
关于servlet init-param,可以在servlet中由方法getServeletConfig().getInitParam("")获取,参见书本150页。
上 下文初始化参数<context-param>与servelet 初始化参数很相似,只不过上下文参数对整个web应用而不只是一个servlet可用。说明应用中所有的servelet和jsp都能自动访问上下文初始 化参数。可以由方法getServeletContext().getInitParam("")获取,参见书本155页。
servletContextListener 是一个单独的类,它能监听servletcontext一生中的两个关键事件:初始化和撤销。contextInitialized和 contextDestroyed.然后我们还要在web.xml中添加listen描述,见书本169页。
监听是一个很广泛的概念,不仅仅只针对上下文事件。如serveltcontextAttributeEvent,HttpSessionEvent,ServeletRequestEvent等等,见书本182页。
2. 再看index.html,其中只有一个需要注意的地方就是:href="actions/Catalog.action",这里可以参考stripes的映射规则。
To convert class names to URLs Stripes:
So in the above case, net.sourceforge.stripes.examples.quickstart.CalculatorActionBean became:
3.顺着脉络往下走,就应该来看ActionBean了:
1)AbstractActionBean:实现了ActionBean, Serializable接口。作为本工程的ActionBean的基类。
2)注意其他ActionBean的声明上面都有一个这样的注解:@SessionScope,默认我想应该是ServeletScope.这里表示session中,这些变量值都保存。
3)CatalogActionBean:
需要注意的是:
@SpringBean
private CatalogService catalogService;
@DefaultHandler
public ForwardResolution viewMain() {
return new ForwardResolution(MAIN);
}
这句话表示默认的操作是直接跳转至:/WEB-INF/jsp/catalog/Main.jsp
4.接下来,我们就将来到Main.jsp,注意到main.jsp最开始有一句:<%@ include file="../common/IncludeTop.jsp"%>
接着来看includeTop.jsp:
比较典型的有这样一个标签:
<stripes:link
beanclass="org.mybatis.jpetstore.web.actions.CatalogActionBean"
event="viewCategory">
<stripes:param name="categoryId" value="CATS" />
<img src="../images/cats_icon.gif" />
</stripes:link>
stripes:link-> Tag that generates HTML links, used for linking to pages and ActionBean events within a Stripes application.
beanclass-> The fully qualified name of an ActionBean class, or alternatively a Class instance for an ActionBean class. An alternative to the 'href' attribute,
event-> The (optional) event that should be fired if the link is to an ActionBean. If not supplied then the tag will not render an explicit event (but one may by built in to the URL/href supplied).
stripes:param->Used to add parameters to the link and url tags
还有一个典型的地方:
<c:if
test="${sessionScope.accountBean == null}">
<stripes:link
beanclass="org.mybatis.jpetstore.web.actions.AccountActionBean"
event="signonForm">
Sign In
</stripes:link>
</c:if>
这是用来判断用户登录与否的语句,值得注意的是jstl中的core标签:c:if