用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

本文整理了用Idea Intellij 开发一个综合运用Strut 2, Maven 和Hibernate 项目的流程,并在步骤中对比了此项目技术相对于Servlet、手动添加Jar 和JDBC 的优势,还记录了一些可能出现问题的坑,最后总结项目收到请求后的执行过程。

源码地址 (**** 下载需要积分,欢迎支持):http://download.****.net/download/rock154/10261449

或者 https://pan.baidu.com/s/1hueXfKg

1)File - New - Project... - Maven - Create from archetype (勾选上) - webapp - Next。如下图:

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

2)填写GroupId 和 ArtifactId,一路Next(其间可修改项目名称等),直到Finish,需等待Idea Run "Import change"。

3)分别配置Maven 的pom.xml,Tomcat 的web.xml,Struts 2 的struts.xml,Hibernate 的hibernate.cfg.xml。如下图:

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

a) pom.xml: 添加依赖(dependencies, 可在http://mvnrepository.com 查询) struts, servlet, json, fast json (或 Gson), hibernate, mysql-connector. 有了Maven 此配置之后,就不用手动添加相关Jar 包了。此处有坑:Idea 不自动编译发布java 文件夹内的资源文件,在pom 配置中的build 标签内添加以下代码填上此坑

<resources>
  <resource>
    <directory>src/main/java</directory>
    <includes>
      <include>**/*.xml</include>
    </includes>
  </resource>
</resources>

b) web.xml: 添加struts2 核心过滤器 filter,也可设置主页等 (welcome-file-list)。此处有坑:Idea 自动生成的web.xml 好象有问题,简单粗暴的方法是直接用一个新的可用web.xml 替换。

c) struts.xml: 配置package 内 default-action-ref 和action, 当然这些可以晚点再做。struts.xml(作为独立出来的控制层,降低耦合) 和Action(业务层) 共同代替了Servlet。Struts 2 框架代替Servlet 完成的事:获取参数,设置返回Attribute,调取转发语句 (直接返回字符串就可以定位到相应的界面); 国际化和上传下载操作也可以由框架完成。

d) idea 没有自动将java 文件夹标识为资源文件,在此文件夹上右键 - "mark directory as Source Root" 即可。

e) hibernate.cfg.xml: 一次配好,多次复用。菜单View - Tool Windows - Database (左下角有一个快捷窗口按钮,也可打开Database)导入此文件,测试连接,成功的话有提示"Successful"。如下图:

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

4)配置Tomcat:菜单Run - Edit configurations - 左侧栏Defaults - Tomcat Server - Local, 设置Application Server 和Open browser,Apply,如下图;然后不用关此对话框,点左上角加号,添加Tomcat Server - Local - 设置Deployment,OK。(更新:貌似Defaults里的tomcat server 不设置也可以?只是Project strutrue 需要设一下SDK)

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

5)创建HibernateSessionFactory 类;用Hibernate 反向生成Pojo:菜单View  - Tool Windows - Persistence (左下角有一个快捷窗口按钮,也可打开Persistence),空白处右键,Generate Persistence Mapping - By Database Schema,之后如下图。Hibernate 是对JDBC 轻量级的封装,将对象和数据库字段一一对应,减少了创建pojo 和封装数据的工作量。

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程

6)创建DAO 和其实现类。

7)创建Action 类。Action 方法不允许带参数,因为Struts2本质是通过反射实现的。返回值类型为String,因为要匹配结果集。需要从浏览器接收或传递给目标页面的参数,在Action 类中创建private 该参数的变量并生成getter setter 即可,比Servlet 中用request.getParameter() 接收参数或用request.setAttribute() 方便多了。此类中调用DAO 实现类,即对数据库增删改查,取得的数据即可传给目标jsp 页面。

8)创建前端页面等相关资源。用Struts iterator 标签可循环取出Action 传递回来的数据,配合EL 表达式将数据填到相应位置。
struts2 标签<>里面不能使用el表达式${} (但可放在开始和结束标签之间), 只可以使用ongl表达式%{}; 
EL表达式可以直接输出内容,但是ONGL不行,它是与STRUTS的标签相结合使用的。


简单总结项目运行过程:浏览器发出请求 - Tomcat web.xml 过滤 - struts.xml 匹配action - action 接收参数并传数据到struts.xml 结果集(result) 指定的jsp 页面。

小功告成!

用Idea 开发一个简单的Struts2+Maven+Hibernate 项目的流程