SpringMVC经典系列-03基于Spring2.5采用XMl配置的方式进行项目开发---【LinusZhu】

来源:互联网 发布:红蜘蛛软件7.2破解版 编辑:程序博客网 时间:2024/04/30 10:46

      注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。

      如下项目代码是经过我个人调试通过的,保证安全可靠。

      虽然在项目的开发中我还是喜欢使用SpringMVC的注解,但是还是要为朋友们讲一讲xml配置的方式,哈哈,开始进行……

      注意了:下面的项目SpringMVC全部基于XML配置,同时对hibernate进行了集成操作。

      项目采用的是spring MVC+spring+hibernate3的开发架构,数据库使用的是Oracle,需要下载Oracle驱动包。 

      项目创建步骤如下:

1. 首先建立web项目

2. 导入jar(spring.jar, spring-webmvc.jar, commons-logging.jar。其他jar包为hibernate相关jar),如下图:

3. 修改web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 

xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 

 <!-- Spring的核心控制器  过滤所有的.do请求 -->

 <servlet>

        <servlet-name>dispatcherServlet</servlet-name>

        <servlet-class>

            org.springframework.web.servlet.DispatcherServlet

        </servlet-class>

        <init-param>

        <!-- 拆分多个配置文件   方便管理 -->

            <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/hib-config.xml,/WEB-INF/web-config.xml,/WEB-INF/service-config.xml,/WEB-INF/dao-config.xml</param-value>

        </init-param>

        <!-- 项目被加载的时候启动此dispatcherServlet -->

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>dispatcherServlet</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

</web-app>

4. 增加对应的web-config.xml(这里包含spring mvc相关的相关配置)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Spring核心配置 -->

<!-- Controller方法调用规则定义 -->

    <bean id="paraMethodResolver"

        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">

        <property name="paramName" value="action"/>

        <property name="defaultMethodName" value="list"/>

    </bean>

  

   <!-- 页面View层基本信息设定 -->

    <bean id="viewResolver"

          class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="viewClass"

            value="org.springframework.web.servlet.view.JstlView"/>

        <!--<property name="prefix" value="/myjsp/"/>   前后缀-->

        <property name="suffix" value=".jsp"/>

    </bean>

 

<!-- servlet映射列表,所有控制层Controller的servlet在这里定义 -->

    <bean id="urlMapping"

          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <property name="mappings">

            <props>

            <!-- 配置对应关系   action==user.do -->

              <prop key="user.do">userController</prop>

            </props>

        </property>

    </bean>

 <bean id="userController" class="com.spring.controller.UserController">

<property name="userService" ref="userService"></property>

</bean>

</beans>

5. 在WEB-INF下增加service-config.xml(这里包含service层类的相关配置)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!--service层的处理   业务逻辑层 -->

<bean id="userService" class="com.spring.service.UserService">

<property name="userDao" ref="userDao"></property>

</bean>

</beans>

6. 在WEB-INF下增加hib-config.xml(这里包含spring集成hibernate相关的配置)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

http://www.springframework.org/schema/aop 

http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

  http://www.springframework.org/schema/context   

   http://www.springframework.org/schema/context/spring-context-2.5.xsd

">

 

<!-- 集成的hibernate的配置 -->

<context:component-scan base-package="com.spring" />

<!-- 支持aop注解 -->

<aop:aspectj-autoproxy />

 

<!-- jdbctemplate/hibernateTemplate使用的 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="close">

<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>

<property name="jdbcUrl" value="jdbc:oracle:thin:@10.1.130.33:1521:orcl"></property>

<property name="user" value="huro"></property>

<property name="password" value="123456"></property>

<!--1连接池中保留的最小连接数。 -->

<property name="minPoolSize">

<value>10</value>

</property>

<!--1连接池中保留的最大连接数。Default: 15 -->

<property name="maxPoolSize">

<value>100</value>

</property>

<!--1最大空闲时间,100秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

<property name="maxIdleTime">

<value>100</value>

</property>

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

<property name="acquireIncrement">

<value>10</value>

</property>

<!--1初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->

<property name="initialPoolSize">

<value>20</value>

</property>

<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->

<property name="idleConnectionTestPeriod">

<value>60</value>

</property>

</bean>

 

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<property name="dataSource">

<ref bean="dataSource" />

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">true</prop>

<!-- 程序运行时自动生成表 生成表之后,程序就不需要,可以注释掉 -->

<prop key="hibernate.hbm2ddl.auto">update</prop>

<!-- 设定jdbc的statement读取数据的时候每次从数据库中取出的记录条数 30、50、100性能好,内存消耗小 提高数据库性能 -->

<prop key="hibernate.jdbc.fetch_size">100</prop>

<!-- 批量更新操作时候的批次大小 提高数据库性能 -->

<prop key="hibernate.jdbc.batch_size">50</prop>

</props>

</property>

<property name="packagesToScan">

<value>com.spring.bean</value>

</property>

</bean>

 

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

 

<!--配置一个JdbcTemplate实例 -->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource" ref="dataSource" />

</bean>

 

 

<!-- 配置事务管理 -->

<bean id="txManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

<tx:annotation-driven transaction-manager="txManager" />

<aop:config>

<aop:pointcut expression="execution(public * com.spring.service.impl.*.*(..))"

id="businessService" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />

</aop:config>

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="find*" read-only="true" propagation="NOT_SUPPORTED" />

<!-- get开头的方法不需要在事务中运行 。 有些情况是没有必要使用事务的,比如获取数据。开启事务本身对性能是有一定的影响的 -->

<tx:method name="*" />    <!-- 其他方法在实务中运行 -->

</tx:attributes>

</tx:advice>

</beans>

7. 在WEB-INF下增加dao-config.xml(这里包含dao层类的相关配置)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Dao层的处理 -->

<bean id="userDao" class="com.spring.dao.UserDao">

  <property name="hibernateTemplate" ref="hibernateTemplate"></property>

</bean>

</beans>

8. 最终建立的相关类和包结构,如下图所示:

9. 各对应类的代码如下: 

package com.spring.bean;

//实体类Hibernate使用注解的方式

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity 

@Table(name="CS_USER")

public  class  User {

/**

 * select

        hibernate_sequence.nextval 

    from

        dual

 * 

 * 

 */

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int id;

private String uname;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

 

}

==============================================================================

 

package com.spring.dao;

//Dao数据持久层

import org.springframework.orm.hibernate3.HibernateTemplate;

import com.spring.bean.User;

public   class   UserDao {

private HibernateTemplate hibernateTemplate;

public void add(User u){

System.out.println("UserDao.add()");

hibernateTemplate.save(u);

System.out.println("添加数据");

}

 

public HibernateTemplate getHibernateTemplate() {

return hibernateTemplate;

}

 

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

}

 

 =============================================================================

 

package com.spring.service;

//service

import com.spring.bean.User;

import com.spring.dao.UserDao;

 

public   class    UserService {

private UserDao userDao;

public void add(String uname){

System.out.println("UserService.add()");

User u = new User();

u.setUname(uname);

userDao.add(u);

}

 

public UserDao getUserDao() {

return userDao;

}

 

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

}

 

==============================================================================

 

package com.spring.controller;

//流程控制层

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

 

import com.spring.service.UserService;

public   class    UserController   implements   Controller {

//SpringMVC里面最好使用Controller结束  Controller接口只有一个handleRequest方法 处理请求的

//  ModelAndView  返回数据和试图对象

private UserService userService;

@Override

public ModelAndView handleRequest(HttpServletRequest req,

HttpServletResponse resp) throws Exception {

System.out.println("HelloController.handleRequest()");

req.setAttribute("tishi", "测试配置SpringMVC方式");

userService.add(req.getParameter("uname")); 

return new ModelAndView("index");

}

 

public UserService getUserService() {

return userService;

}

 

public void setUserService(UserService userService) {

this.userService = userService;

}

}

10. 以上操作完成后可以直接进行运行测试:

http://locahost:8080/SpringMVC/user.do?uname=zhangsan

结果:数据库中会增加zhangsan的记录,成功后页面跳转到index.jsp

11.为了更好的帮助朋友们,我写了个注册页面zhuce.jsp,代码如下:

 <%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>注册</title>

<META http-equiv="content-type" CONTENT="text/html;charset=UTF-8">

</head>

<body bgcolor="#d6e3f6">

<form action="user.do" method="post">

<input name="uname" type="text" class="input1" maxLength="10"

size="20" /> <br /> <input type="submit" value="注册" />

</form>

</body>

</html>

12.主页面index.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>tishi</title>

<META http-equiv="content-type" CONTENT="text/html;charset=UTF-8">

</head>

<body bgcolor="#d6e3f6">

<div id="tiaozhuan">

<h1>LinusZhu测试成功</h1>

</div>

</body>

</html>

13.测试如下:

注册页面:

提交后返回到主页面:

查询数据库如下:

14.数据库的建表语句如下:

CREATE TABLE CS_USER

(

  ID     NUMBER(10)                             NOT NULL,

  UNAME  VARCHAR2(255 CHAR)

)

15.注意:项目所需jar包请到相应官方网站下载。

 

 

 

0 0
原创粉丝点击