IntelliJ IDEA关于SSH(Struts2, Spring, Hibernate)框架的搭建

这学期的Web作业要求用这个框架来搭建一个Web App,这里快乐地记一下自己的实现步骤。

本工程没有使用maven、gradle等构建工具。

本框架对应使用数据库MySQL,并采用C3P0连接池,下载地址:https://sourceforge.net/projects/c3p0/

创建项目

新建项目。左侧选择Spring,右侧选择Struts2, Application Server, Hibernate,点击库名后会在下方出现相应的配置,没有本地库的选择Download就可以,在配置选项完成之后IDE会自动下载对应的jar。

之后Next→工程起名→Finish。

接下来会有或长或短的一段配置时间。如果之前有选过Download,则会先自动下载对应的jar包。

导入其他相关的jar包

项目创建完成之后,需要手动往项目中导入需要的其他jar包。导入方法是将jar文件放入工程的lib目录下,然后在IDE中进行相关配置。

  1. mysql-connector-java:MySQL的java驱动,下载地址:https://dev.mysql.com/downloads/connector/j/
  2. c3p0连接池相关的包,本文最开始已提供下载地址:https://sourceforge.net/projects/c3p0/
  3. spring-web,下载地址:https://mvnrepository.com/artifact/org.springframework/spring-web
  4. struts2-spring-plugin,下载地址:https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin

添加数据库

接下来配置数据库。

选择IDE最右侧栏的Database标签,点击加号,选择Data Source中的MySQL:

先填URL,之后Name、Host、Database等会自动生成,然后填好用户名和密码,单击Test Connection,显示连接成功后,单击OK。

这是就会在窗口中看到刚连接好的数据库了:

我们可以通过这个小工具代替MySQL的Shell或者Workbench使用。

创建实体类和ORM文件

接下来要创建的是数据库各表对应的实体类了,这里IDE可以全部自动生成。具体操作见下:

单击IDE左下方的Persistence,在弹出标签页的工程名那里右键,选择Generate Persistence Mapping中的By Database Schema。

按下图所示进行操作:

配置完成后,就可以看到在所选的包下生成了数据表对应的实体类和hbm.xml文件。

 至此,持久化类已生成完毕。

 

本框架会涉及到4个xml配置文件:

  • web.xml - web application
  • struts.xml - struts2
  • hibernate.cfg.xml - Hibernate
  • applicationContext.xml - Spring

配置web.xml

web.xml需要添加对struts2和spring的支持,其中struts2的部分(过滤器)已经自动配置好了:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

接下来只需要配置spring的部分:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/applicationContext.xml</param-value>
</context-param>

配置struts.xml

struts.xml中主要配置的是各种action,在和spring搭配使用的情况下,action的class需要与spring生成的JavaBean的id对应。

添加action的示例如下:

<struts>
    <constant name="struts.objectFactory" value="spring"/>
<package name="blogPkg" namespace="/blogs" extends="struts-default"> <action name="login" class="login"> <result name="login">UserLogin.jsp</result> </action> <action name="signup" class="signup"> <result name="signup">UserSignup.jsp</result> </action> </package>

</struts>

  <struts></struts> 是struts.xml文件的根标签,其下的标签结构为:

  •  <constant/> 用于定义常量,name属性为常量名,value属性为常量值。
  •  <include/> 用于包含其他的struts.xml配置文件,这里没有用到。
  •   <package></package> 用于将多个action组织成一个模块。
    • <action></action> 用于注册action。name属性用来标识action,class为action所在类的位置,method指要访问action类中的方法名。
      •  <param></param> 参数设置。name对应Action中的bean属性名。
      •  <result></result> 对应Action类的返回值。name属性和返回值内容一致。

 

配置hibernate.cfg.xml

这个是Hibernate框架的核心配置文件。

实际上Hibernate框架相关的配置文件有两种:一个是核心配置文件hibernate.cfg.xml;另一个是针对每个实体类都有的一个OR映射文件xxx.hbm.xml,这个文件在之前的步骤中已经自动创建好了。

hibernate.cfg.xml主要涉及MySQL的驱动和登录,以及Hibernate的相关配置。

此文件在前面生成持久化类的时候选择创建。自动生成的配置文件已经包含了OR映射的部分,我们只需要添加MySQL的部分就可以了:

    <!--MySQL驱动-->
    <property name="connection.url">jdbc:mysql://127.0.0.1:3306/servlet_db?serverTimezone=GMT</property>
    <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>

    <!--MySQL的用户名和密码-->
    <property name="connection.username">root</property>
    <property name="connection.password">yourPassword</property>

 

配置applicationContext.xml

这个是有关spring的配置。Spring本质上是一个BeanFactory,可以按照业务逻辑的需求生产出各种JavaBean。

在本工程里涉及C3P0连接池的配置、SessionFactory的配置、各层(Action、业务逻辑、DAO)的配置。

此文件需要手动创建:在工程目录的src处右键,选择XML Configuration File下的Spring Config,然后起好名字就可以了。

创建完成之后,需要先配置一下Spring的Application Context。一般来说IDE会在页面上方自动提示,按照提示完成即可。如果没有提示,需要进入Project Structure(Ctrl+Alt+Shift+S),在Facets中的Spring里,单击加号创建新的application context,把刚才创建的xml添加进来即可,如下图。

 

初创建的ApplicationContext.xml文件是一个只包含一个根节点<beans></beans>的xml文件,我们需要手动向<beans></beans>中添加bean标签。

关于c3p0连接池,这里将其封装为一个JavaBean:

<!-- 数据源(C3P0连接池) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/servlet_db?serverTimezone=GMT"/>
    <property name="user" value="root"/>
    <property name="password" value="yourPassword"/>
    <property name="maxPoolSize" value="80"/>
    <property name="minPoolSize" value="1"/>
    <property name="initialPoolSize" value="1"/>
    <property name="maxIdleTime" value="20"/>
</bean>

对于其他类的配置,基本格式如下:

<bean id="规定Bean的ID" class="来自于哪个类">
    <property name="来自于那个类的某个属性名" ref="依赖的bean的ID"/>
</bean>

 Bean有以下的属性,除了class属性必须配置,其他属性都可以不配置:

  • id - 在整个IoC容器中的唯一标识
  • class - 实例化的Bean类
  • scope - 作用域,有5种类型:
    • singleton - 单例,bean容器
    • prototype - 每次请求创建新的实例
    • request - 每次请求创建新的实例,仅在当前request有效
    • session - 每次请求创建新的实例,仅在当前sessioni有效
    • global session - 这里同session
  • constructor arguments - 构造器参数
  • proterties - 属性,构造器注入还是设值注入
  • autowriting mode - 自动装配模式
  • lazy-initialization mode - 懒加载模式
  • initialization/destruction method - 构造/析构方法

参考

posted @ 2019-05-30 10:22  鳄鱼伏特加  阅读(1455)  评论(0编辑  收藏  举报