这几天的时间,把新闻管理系统用ssh和ssh2整了一遍。想写一点对这两者的看法。
ssh在昨天已经写过了。先把ssh2的流程说一下吧。
在web.xml里面配置struts2.0用filter代码如下:
中间的<param-name>struts.i18n.encoding</param-name><param-value>GB18030</param-value>这个是设置他的编码。。
写的路径也有点不同。。原先在struts1.2中路径一般都以.do结尾的,而struts2.0中是以.action结尾的。并且参数是写在"."之前,以"!"打头,举个例子:UserAction!login.action
路径是跳到struts.xml里面去。。在struts.xml里面有个package的属性,可以用它来控制权限。
<action name="UserAction" class="springUserAction">
这个name必须和发过来的请求相对应,而class是跳到spring的配置文件里面去,由它帮忙注入serice层。。
spring的配置文件和ssh的几乎相同,可以增加一层model层,由spring来负责new出model,当然还得重写一下scope,在上篇文章中有提到。
action层的类,不再是继承DispatchAction的类,而是继承ActionSupport,再重写它的方法,为了需要,可以把相应的代码给修改掉。。
例如在jsp层传过来的参数是save,代码如下:
在struts.xml的路径是这样的:
<result name="">/xx.jsp</result>
在action那个类里面还有一个问题,原先的request没有了。。那么该怎样获得呢?代码如下,它是通过上下文来取得的
另外说一下struts2.0的标签,我就用到了三个:一个是 <s:iterator>,一个是<s:property>,最后一个是<s:if>
第一个是用来迭代的,用法如下:
<s:iterator id="news" value="#request.newslist">
这个id就是用来标识的,和c标签的用法相同,后面的value值是表示用数据库里面拿过来的newslist,后台的代码是这样的
request.setAttribute("newslist", list);
关于这个“#”号,大家可以理解成"${}",看到这个EL标签,应该很熟悉了吧,呵呵。。
第二个是用来输出值:
可配合迭代使用,当然其他地方也一样的。。
接上的:<s:property value="#news.id"/>
第三个是可以用来做一些逻辑判断。。
和java中的if 、elseif、else用法差不多。。大家可以去尝试一下。。
整合完ssh2,我的感觉是确实要比struts1.X简单,至少少写了一个form层,本来这个form层是和struts打交道的,model和hibernate打交道,现在就只剩下model层了。。
但是有一点要注意的是:在jsp页面上,form里面的name声明必须是serice层所声明的对象的来点出它的属性值。。
举个例子吧,在User类里面有一个username,password
本来写一个<input type="text" name="username">
可是struts2.0里面就不允许这样写,除非你在serice层声明的是这样的
一般来说,在serivce层类的属性都是用对象声明的。。即User user;
这样写的话,前台的name必须要写成name="user.username",不然它取不到这个值。。当然要对上面的user做get、set方法。。其实get方法是没必要的,因为它是通过set方法的,这样写也是一种代码的规范性吧。
另外,我觉得struts不管是1.2还是2.0,他们的标签都很强大,2.0的似乎更好一些,呵呵。。。