1.struts
现在用的比较多的ssh架构,即spring+struts+hibernate,我用了后两种,struts用的是1代,主要就是处理表单的信息获取、验证、以及信息输出,很多常见的逻辑都不需要自己去设计代码结构,遵循他设定好的思路就行了。最简单的一个例子: 一个表单中有一个文本输入框、一个提交按钮,输入文字,点击按钮,自动跳到另一页,把输入的文字显示出来,有输入则显示输入文字,没输入则显示error。这样一个功能,用struts实现的话有以下几个文件:
hello.jsp
- <html:form action="/hello">
- <p><html:submit>login</html:submit></p>
- </html:form>
success.jsp
- <bean:wirte name="result"/>
error.jsp
struts-config.xml
- <struts-config>
- <form-beans>
- <form-bean name="HelloForm" type="HelloForm"/>
- </form-beans>
-
- <action-mappings>
- <action path="/hello" type="HelloAction" name="HelloForm">
- <forward name="success" path="/success.jsp"/>
- <forward name="error" path="/error.jsp"/>
- </action>
- </action-mappings>
上面的根据配置文件里面的定义,有个叫HelloForm的类对应路径为/hello的这个动作提交上来的表单,而hello.jsp里面的表单,正式对应了这个动作,同时配置文件还指出,用HelloAction这个类来接收表单并且处理逻辑,最后根据表单的内容决定跳转到哪个页。如果有输入内容,则跳转到/success.jsp,如果没有则跳转到/error.jsp.(顺便说下,感觉j2ee里面有好多东西,传递参数都是通过一个字符串作为参数名的,挺有意思的。和编译器一样,应用服务器也经常要做些字符串解析的事情吧。)
说到这里,再把上面提到的两个类,HelloForm和HelloAction贴出来:
HelloForm.java
- import org.apache.struts.action.ActionForm;
- public class LoginForm extends ActionForm {
- private static final long serialVersionUID = 1L;
- private String hello = "";
- public String getHello(){
- return this.hello;
- }
- public void setHello(String s) {
- this.hello = s;
- }
- }
HelloAction.java
- import org.apache.struts.action.*;
- import javax.servlet.http.*;
- public class HelloAction extends Action {
- public ActionForward execute(ActionMapping actionMapping,
- ActionForm actionForm, HttpServletRequest request,
- HttpServletResponse response) throws Exception {
-
- HelloForm form = (HelloForm) actionForm;
- if("".equal(form.getHello())
- return actionMapping.findForward("error");
- else
- return actionMapping.findForward("success");
- }
- }
这样所有必须的文件就都有了,struts是一个独立于tomcat的工具,要让他工作起来,一方面要配置tomact的web.xml,截获http请求,另外一方面就是要把相应的库放在正确的位置,这些可以参考网上的教程。
2.Hibernate Hibernate是一个专门用于处理数据库操作的工具,配置文件有一个全局的xml配置为文件,数据库里面每个表对应一个POJO也就是一个类,同时也对应一个解释自己以及与其他表之间数据关系的配置文件。
所有的配置文件以及POJO类,都可以用自动化的工具生成,这类工具具有反向工程的能力,开发时先用数据库工具设计好表、关系,再用这些工具连接数据库后根据数据库中的关系,生成配置文件和POJO类,当数据库发生变化时,只需要重新自动生成一次就行了,十分方便,例如eclipse的插件HibernateTool就十分好用。
以上步骤完成后,为了封装逻辑操作,一般都要编写一些DAO(Date Access Object),把常用的操作以方法的形式实现,这样在struts的Action里面只需要调用DAO就可以了,而一般不需要关注更底层的数据结构。
其实DAO和Hibernate没有什么联系,以前不用Hibernate时,DAO中的代码比较复杂,有很多SQL语句,并且要设定和保持和数据库的连接。有了Hibernate只有,DAO中的代码就简化了许多,只要获取Hibernate和数据库建立的session,在这个session中针对POJO对象操作即可,不需要控制数据库连接,也不需要使用SQL语句。当然,在遇到某些特殊问题、或者考虑到效率时,不得不用SQL语句;针对这个问题,Hibernate设计了一种HQL语句,与SQL类似,其优越之处在于可以在语句中使用面向对象的概念,从而在复杂数据关系中,大大简化了查询语句。此外,Hibernate也支持SQL原语查询。
在我的项目里,一般针对单条记录用面向对象操作比较方便,涉及到复杂条件查询多条记录以及排序时,往往用HQL语句比较方便。
阅读(1422) | 评论(0) | 转发(0) |