步步为营搭建spring+springmvc+mybatis(oracle)项目

 很多初学者想搭建一个springmvc项目,但是网上的教程东拼西凑的总是不能让人如愿,所以我今天写下这个博客,给没有成功的朋友一点借鉴,如有问题请指出,大家共同进步。

        先说明下自己的工作环境:

        1、jdk1.8

        2、oracle11g

        3、eclipse LUNA

        4、tomcat 7

        其实这些即便不一样也是可以搭建的,只是我觉得说明下自己的工作环境是种比较好的习惯。下面开始进入正题:

        第一步:

                打开你的eclipse,新建一个java web项目,在eclipse里,java web项目叫做Dynamic Web Project(有多少新手拼命的在eclips里找javaWeb项目却找不到的,反正我初学的时候真不知道,一通瞎找)。填写上你的项目名字,其他的基本不用修改,一路next,最后在Generate web.xml deployment descriptor前面的复选框打勾(这步用于生成web.xml文件),然后Finish。

        第二步:

                导入jar包,导入位置:/WebContent/WEB-INF/lib文件夹下,jar包和源文件我都会在后面提供下载。选中你的项目,鼠标右击项目,选择Properties,在弹出的页面左边导航栏选择Resource,右边有个Text file encoding,选择Other,下拉框选择UTF-8,apply,ok,保存(这一步不配置也可以,主要是避免后续开发出现的一些乱码问题)。

    

       现在准备配置spring+springmvc+mybatis(oracle)的项目。现在大部分的项目都是分控制层,逻辑层,持久层,当然,也可以认为是mvc模式,model、view、controller,简单说就是每一块有每一块的功能,降低项目的耦合性,低耦合性的优点就是开发快,维护方便,可以重复使用。所以我们遵循着这个思路去配置springmvc项目。在这之前我先说下,我喜欢在Navigator下查看我的项目,所以大家觉得有需要可以和我一样,在window-show view-Navigator调处这个窗口,初次使用可能不太习惯,但后来会爱上这个窗口的。


        第三步:

                在src目录下新建一个folder,命名config(不是必须,这是一个习惯,看的更清楚),在这里配置spring和springmvc的一些xml文件。

                在config下新建propery文件夹,用于保存一些properties类型的配置文件。

                在src目录下新建一些将要用到的工作目录

                                    

                com文件夹和bpdcc文件夹是一种命名规范,简单说就是如果你的项目打成jar包发到网上,怎么避免和别人的项目重名?用网址的唯一性来避免重复,从后往前依次命名,就是bpdcc.com(我没有自己的网址,但是我开源中国的账号叫奔跑的菜菜。。。)。

                controller就是控制层,这里的文件都是和页面请求有关的,service就是所谓的逻辑层,页面请求发来,或许会有一些需要处理的运算,都写在这个文件夹下的类里,注意service文件夹里的都是接口,而service-impl里的是接口的实现类。

                mapper是与数据库的交互,就是持久层,这里没有逻辑,没有页面,只管和数据库的交互,注意mapper里是接口,mapper-impl里是xml文件。

                1、配置spring的xml文件。

                新建一个xml文件,命名spring.xml(不是一定要叫这个名字,spring的配置文件有自己的命名规范,大家可以上网去找找,这里我用spring.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-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- 启动注解和POJO(java基本类) -->
	<bean
	class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
	</bean>

</beans>

                2、配置spring-mvc.xml文件

                新建一个xml文件,命名spring-mvc.xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" 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-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<!-- 扫描controller -->
	<context:component-scan base-package="com.bpdcc.**.controller" />
	<!-- 扫描service层 -->
	<context:component-scan base-package="com.bpdcc.**.service" />

	<!-- 视图模式下的前缀和后缀 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/page/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
</beans>

                3、配置spring-mybatis.xml文件和数据库的参数文件

                新建一个properties类型文件,File-New-Other-Gerneral-File,这时是建立一个没有后缀名称的文件,可以命名为jdbc.properties。内容如下

dataSource_1.diverClassName=oracle.jdbc.driver.OracleDriver
dataSource_1.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
dataSource_1.username=admin
dataSource_1.password=admin
#定义初始连接数
dataSource_1.initialSize=5 
#定义最大连接数
dataSource_1.maxActive=20
#定义最大空闲
dataSource_1.maxIdle=20
#定义最小空闲
dataSource_1.minIdle=1
#定义最长等待时间
dataSource_1.maxWait=60000
dataSource_1.testWhileIdle=true
dataSource_1.timeBetweenEvictionRunsMillis=3600000
dataSource_1.minEvictableIdleTimeMillis=3600000
dataSource_1.numTestsPerEvictionRun=3
dataSource_1.poolPreparedStatements=false
dataSource_1.maxOpenPreparedStatements=0
dataSource_1.defaultAutoCommit=true   
dataSource_1.removeAbandoned=true
dataSource_1.removeAbandonedTimeout=300
dataSource_1.logAbandoned=false

                新建一个xml文件,命名spring-mybatis.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"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<!-- 引入数据库配置文件 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:/config/property/jdbc.properties" />
	</bean>

	<!-- 数据库配置 -->
	<bean id="dataSource_1" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${dataSource_1.diverClassName}" />
		<property name="url" value="${dataSource_1.url}" />
		<property name="username" value="${dataSource_1.username}" />
		<property name="password" value="${dataSource_1.password}" />
		<property name="initialSize" value="${dataSource_1.initialSize}" />
		<property name="maxActive" value="${dataSource_1.maxActive}" />
		<property name="maxIdle" value="${dataSource_1.maxIdle}" />
		<property name="minIdle" value="${dataSource_1.minIdle}" />
		<property name="maxWait" value="${dataSource_1.maxWait}" />
		<property name="testWhileIdle" value="${dataSource_1.testWhileIdle}" />
		<property name="timeBetweenEvictionRunsMillis"
			value="${dataSource_1.timeBetweenEvictionRunsMillis}" />
		<property name="numTestsPerEvictionRun" value="${dataSource_1.numTestsPerEvictionRun}" />
		<property name="minEvictableIdleTimeMillis" value="${dataSource_1.minEvictableIdleTimeMillis}" />
		<property name="poolPreparedStatements" value="${dataSource_1.poolPreparedStatements}" />
		<property name="maxOpenPreparedStatements" value="${dataSource_1.maxOpenPreparedStatements}" />
		<property name="defaultAutoCommit" value="${dataSource_1.defaultAutoCommit}" />
		<property name="removeAbandoned" value="${dataSource_1.removeAbandoned}" />
		<property name="removeAbandonedTimeout" value="${dataSource_1.removeAbandonedTimeout}" />
		<property name="logAbandoned" value="${dataSource_1.logAbandoned}" />
	</bean>

	<!-- 扫描dao层的接口 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.bpdcc.**.mapper" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>

	<!-- 扫描dao层的xml文件 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource_1" />
		<property name="mapperLocations" value="classpath:com/bpdcc/**/mapper/impl/*.xml"></property>
	</bean>

	<!-- 事物管理 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource_1" />
	</bean>

</beans>

                4、配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>springmvcDemo</display-name>


	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:config/*.xml</param-value>
	</context-param>

	<!-- 过滤器,所有文件参数用UTF-8编译 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- spring请求配置,指向springmvc的核心配置文件,并且定义所有以.xhtml结尾的请求都被springmvc拦截 ,加载顺序为1 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:config/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>

	<!-- spring监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- spring内存监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- session配置,生命周期为60分钟 -->
	<session-config>
		<session-timeout>60</session-timeout>
	</session-config>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

                这时springmvc的项目已经配置好了,可以试着运行下,如果报这种找不到classes下某个文件的错误

                多半是项目source配置错误,具体操作如下:

                先在WEB-INF下建立一个classes文件夹,然后在project explorer视图下右击项目名称,Build Path-Configure Build Path-Java Build Path-Source-Default output folder ,选择新建的classes文件。这么做是将编译后的class文件 放在该目录下。

        第四步:写一个简单的登录功能。

package com.bpdcc.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.bpdcc.model.User;
import com.bpdcc.service.LoginService;


@RequestMapping("/login/")//该类的访问路径
@Controller//一定要加这个注解
public class LoginController {

	@Autowired
	private LoginService loginService;
	
	@RequestMapping("login")//该类下的具体某个方法的访问路径
	public ModelAndView login(HttpServletRequest request){
		ModelAndView mav = new ModelAndView("/login");
		return mav;
	}
	
	@RequestMapping("loginResult")
	public ModelAndView loginResult(HttpServletRequest request,User user){
		ModelAndView mav = new ModelAndView("/result");
		User resultUser = this.loginService.loginUser(user);
		if(null!=resultUser&&user.getUsername().equals(resultUser.getUsername())){
			mav.addObject("msg","用户:"+resultUser.getUsername()+"登录成功!");
		}else{
			mav.addObject("msg","用户名:"+user.getUsername()+"不存在或密码错误!");
		}
		return mav;
	}

}
package com.bpdcc.service;

import com.bpdcc.model.User;

public interface LoginService {
	/**
	 * 用户登录方法
	 * @param user
	 * @return
	 */
	User loginUser(User user);
}
package com.bpdcc.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bpdcc.mapper.LoginMapper;
import com.bpdcc.model.User;
import com.bpdcc.service.LoginService;

@Service//一定要在实现类添加这个注解,注意是实现类,不是接口
public class LoginServiceImpl implements LoginService{

	@Autowired
	private LoginMapper loginMapper;
	
	//用户登录方法
	@Override
	public User loginUser(User user) {
		return this.loginMapper.loginUser(user);
	}

}
package com.bpdcc.mapper;

import com.bpdcc.model.User;

public interface LoginMapper {
	/**
	 * 用户登录方法
	 * @param user
	 * @return
	 */
	User loginUser(User user);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bpdcc.mapper.LoginMapper">
	<!-- 用户登录方法 -->
	<select id="loginUser" resultType="com.bpdcc.model.User">
		select * from t_sys_user where username = #{username,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}
	</select>
</mapper>
package com.bpdcc.model;

/**
 * t_sys_user
 * @author bpdcc
 *
 */
public class User {
	private String id;
	private String username;
	private String password;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

                我将所有代码都贴上来了,注意接口就放在对应层级的文件夹里,实现类在文件夹下的impl文件夹里

                然后在WEB-INF里新建一个page文件夹,注意在WEB-INF文件夹下,文件都是不能直接访问的,所以在springmvc视图配置时,将页面文件放在WEB-INF下,安全性比较高。

                两个页面如下:

                1、登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页</title>
</head>
<body>
<form action="./loginResult.xhtml">
	<table>
		<tbody>
			<tr>
				<td>用户名:</td>
				<td><input type="text" id="username" name="username" value="" /></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" id="password" name="password" value="" /></td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" id="sub" name="sub" value="登录" />
				</td>
			</tr>
		</tbody>
	</table>
</form>
</body>
</html>

                2、登录后的反馈页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录结果</title>
</head>
<body>
${msg}
</body>
</html>

        然后运行项目试试,如果提示找不到缺少bean,那一定是注解出错或者类没有被springmvc扫描到,检查配置文件。

        代码手打,难免有漏字、错字、描述不清现象,欢迎大家批评指教,切勿人身攻击,如果觉得有用,就告诉我一声,给我点鼓励。

        源文件及jar包下载:360云盘

        http://yunpan.cn/cucc8AUfvkCiL  访问密码 7829

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值