SpringMVC经典系列-02基于Spring2.5注解的方式进行项目开发---【LinusZhu】

来源:互联网 发布:2017年十大网络红歌 编辑:程序博客网 时间:2024/04/30 15:41

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

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

      在实际项目的开发中我喜欢使用SpringMVC的注解的方式,比较灵活,同时可以大大提高我们的开发效率,实现零配置。

      所以,首先我采用注解的方式来开发一个简单项目。

      注意了:下面的项目SpringMVC全部基于注解的,同时对Hibernate3进行了集成操作。项目框架采用的是:SpringMVC+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">

 

 <!-- 1  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/springmvc-servlet.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.springmvc-servlet.xml配置内容如下:

<?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:p="http://www.springframework.org/schema/p" 

    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/context 

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

 

<!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->

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

 

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />


<!--对模型视图名称的解析,即在模型视图名称添加前后缀 p:prefix="/WEB-INF/jsp/" -->

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"

p:suffix=".jsp">

</bean>

</beans>

5.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>

6. WEB-INF下建立jsp文件夹,并且将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>

7.建立整个项目的包结构和相关类。如下图所示:



8. UserUserDaoUserServiceUserController类的代码如下:

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 {

@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;

 

import javax.annotation.Resource;

 

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

import org.springframework.stereotype.Repository;

 

import com.spring.bean.User;

@Component

//@Repository("userDao")

public class UserDao {

@Resource

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;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import org.springframework.stereotype.Service;

import com.spring.bean.User;

import com.spring.dao.UserDao;

 

@Component

// @Service("userService")

public class UserService {

@Resource

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.annotation.Resource;

import org.springframework.stereotype.Component;

import org.springframework.web.bind.annotation.RequestMapping;

import com.spring.bean.User;

import com.spring.service.UserService;

 

@Component

// @org.springframework.stereotype.Controller("userController")

@RequestMapping("/user.do")

public class UserController {

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

// 注入service的使用

@Resource

private UserService userService;

// 方法对应 通过方法参数自动对应装配

@RequestMapping(params = "method=reg")

public String reg(String uname) {

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

System.out.println(uname);

userService.add(uname);

return "index";

}

 

// 只要input的名称与user属性一致就可以装配过来

@RequestMapping(params = "method=reg1")

public String reg1(User user) {

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

System.out.println(user.getUname());

userService.add(user.getUname());

return "index";

}

 

public UserService getUserService() {

return userService;

}

 

public void setUserService(UserService userService) {

this.userService = userService;

}

}


9. 项目运行测试:

http://localhost:8080/SpringMVC02/user.do?method=reg&uname=zhuxs

则会调用userControllerreg方法,从而将数据内容插入到数据库中,数据库记录如下:



成功后返回到主页面index.jsp,如下:


注意:可以通过url中的参数method=?来控制访问控制器的那个方法。


10.为了更好的测试,书写了一个注册页面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 name="method" type="hidden" value="reg1" />

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

</form>

</body>

</html>

注意:可以通过隐藏域method的value数值来控制访问控制器的那个方法。

11.注册页面测试:

输入:http://localhost:8081/SpringMVC02/zhuce.jsp


点击注册后,添加数据到数据库,成功后返回到主页面:



此时数据库中表的数据:




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

CREATE TABLE CS_USER

(

  ID     NUMBER(10)                             NOT NULL,

  UNAME  VARCHAR2(255 CHAR)

)


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




0 0