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

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

创建项目

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

idea community ssh插件 idea ssh框架_xml

idea community ssh插件 idea ssh框架_struts_02

之后Next→工程起名→Finish。

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

导入其他相关的jar包

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

添加数据库

接下来配置数据库。

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

idea community ssh插件 idea ssh框架_xml_03

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

idea community ssh插件 idea ssh框架_spring_04

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

idea community ssh插件 idea ssh框架_struts_05

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

创建实体类和ORM文件

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

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

idea community ssh插件 idea ssh框架_spring_06

按下图所示进行操作:

idea community ssh插件 idea ssh框架_spring_07

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

idea community ssh插件 idea ssh框架_struts_08

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

 

本框架会涉及到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>

  • <constant/>
  • <include/>
  • <package></package> 用于将多个action组织成一个模块。
  • <action></action> 用于注册action。name属性用来标识action,class为action所在类的位置,method指要访问action类中的方法名。
  • <param></param>
  • <result></result>

 

配置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,然后起好名字就可以了。

idea community ssh插件 idea ssh框架_spring_09

idea community ssh插件 idea ssh框架_spring_10

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

idea community ssh插件 idea ssh框架_struts_11

 

初创建的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 - 构造/析构方法