SpringMVC MyBatis PostgreSQL整合

继续记录学习过程欧~~

昨天不小心把辛辛苦苦做的SpringMVC MyBatis PostgreSQL代码给删除掉了,哎~想undo,结果不允许

不过塞公失马焉知非福

今天再来一遍就是了,就当是巩固了,不过确实把一些遗留的问题给解决了。

昨天首先遇到的一个问题就是,由于配置文件路径不对,导致Web应用程序初始化错误,导致无法加载,

我还傻乎乎的通过浏览器访问,结果心灰意冷,因为以前都是初始化没有问题,真正访问程序的时候出问题,

此种情况还会在eclipse里面显示出错误信息再进行定位。但是现在什么错误信息都没有,直接访问不了了,就让人很担心,

后来调查发现,在启动tomcat服务器的时候,如果Web应用程序加载有问题,会出现错误信息,比如哪个配置文件无法读取之类的错误。

着实让我看到了生的希望,把问题给排除了。

OK,进入正题。

首先肯定是要创建动态web工程,加入web.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list>

    <context-param>            <param-name>contextConfigLocation</param-name>            <param-value>WEB-INF/classes/config/applicationContext.xml</param-value>        </context-param>   

    <listener>        <listener-class>my.MyContextLoaderListener</listener-class>    </listener>

    <!--    <listener>          <listener-class>               org.springframework.web.context.ContextLoaderListener          </listener-class>        </listener>        -->

    <servlet>        <servlet-name>dispatcherServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    </servlet>    <!-- 拦截所有以do结尾的请求 -->    <servlet-mapping>        <servlet-name>dispatcherServlet</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping></web-app>

下面这段代码是为了创建全局的ApplicationContext用的。

    <context-param>            <param-name>contextConfigLocation</param-name>            <param-value>WEB-INF/classes/config/applicationContext.xml</param-value>        </context-param>   

    <listener>        <listener-class>my.MyContextLoaderListener</listener-class>    </listener>

MyContextLoaderListener从ContextLoaderListener继承。

import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;

import org.springframework.context.ApplicationContext;import org.springframework.web.context.ContextLoaderListener;import org.springframework.web.context.support.WebApplicationContextUtils;

public class MyContextLoaderListener extends ContextLoaderListener{

    @Override    public void contextInitialized(ServletContextEvent event){        super.contextInitialized(event);        ServletContext context = event.getServletContext();

         //获取web环境下的ApplicationContext        ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);

        //将ApplicationContext,set到ContextUtil的静态变量context        ContextUtil.setContext(ctx);    }       }

创建ContextUtil

package my;

import org.springframework.context.ApplicationContext;

public class ContextUtil {    private static ApplicationContext context;

    public static ApplicationContext getContext() {        return context;    }

    public static void setContext(ApplicationContext aContext) {        context = aContext;    }}

这样在需要的时候,就可以像下面这样访问代码,而不需要通过request等得到ServletContext再去获取了。

        //ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(req.getSession().getServletContext());         ApplicationContext ctx=ContextUtil.getContext();        UserMapper maper=(UserMapper)ctx.getBean(UserMapper.class);        User user = maper.getUser("fff"); 

下面来配置SpringMVC的配置文件dispatcherServlet-servlet.xml,我的理解是这样,呵呵

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>    <!-- 定义映射 -->    <bean id="urlMapping"        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">        <property name="mappings">            <props>                <prop key="helloWorld.do">helloWorldAction</prop>            </props>        </property>    </bean>    <!-- 定义视图 -->    <bean id="viewResolver"        class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass">            <value>org.springframework.web.servlet.view.InternalResourceView</value>        </property>    </bean>

    <!-- 定义控制器 -->    <bean id="helloWorldAction" class="com.jp.action.HelloWorldAction">        <property name="helloWorld">            <value>Good Luck!</value>        </property>        <property name="viewPage">            <value>/index.jsp</value>        </property>    </bean></beans>

我的理解就是把helloWorld.do映射到helloWorldAction里面去,再定义一下显示的方法。

package com.jp.action;

import java.util.HashMap;import java.util.Map;import java.util.logging.Logger;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import my.ContextUtil;

import org.springframework.context.ApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;

import bean.User;import Mapper.UserMapper;

public class HelloWorldAction implements Controller{    private Logger logger=Logger.getLogger(this.getClass().getName());    private String helloWorld;    private String viewPage;

public String getHelloWorld() {        return helloWorld;    }

    public void setHelloWorld(String helloWorld) {        this.helloWorld = helloWorld;    }

    public String getViewPage() {        return viewPage;    }

    public void setViewPage(String viewPage) {        this.viewPage = viewPage;    }

    public ModelAndView handleRequest(HttpServletRequest req,            HttpServletResponse res) throws Exception {        // TODO Auto-generated method stub

        //ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(req.getSession().getServletContext());         ApplicationContext ctx=ContextUtil.getContext();        UserMapper maper=(UserMapper)ctx.getBean(UserMapper.class);        User user = maper.getUser("fff"); 

        Map model=new HashMap();        model.put("helloWorld",user.getName());        return new ModelAndView(getViewPage(),model);         } }

这里在取显示数据的地方,是由映射器接口UserMapper,通过MyBatis连接PostgreSQL取得的。

但这个映射器接口UserMapper是通过Spring的注入生成。

来看看applicationContext.xml文件里是怎么注入UserMapper的。

<?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.0.xsd     http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd     "> 

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="org.postgresql.Driver">        </property>        <property name="url"            value="jdbc:postgresql:testdb">        </property>        <property name="username" value="postgres"></property>        <property name="password" value="nirvana7"></property>     </bean> 

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="myDataSource"/>        <property name="configLocation" value="WEB-INF/classes/config/mybatis-config.xml"/>    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="Mapper"/>     </bean> 

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="myDataSource"/>     </bean></beans>       

org.mybatis.spring.mapper.MapperScannerConfigurer会扫描Mapper的package,然后生成接口,可以参照前篇文章来了解。

到这里主要流程都已经搞定了,很多麻烦的地方在于配置文件的路径问题,很是让人烦恼啊。

》》源码地址获取

springmvc + mybatis整合详细,及遇到的问题请参看以下资料:

参考资料:

http://www.springmvc,net/detail/6074493.html

http://my.spring.net/wangbiglei/blog/489583

http://my.springmvc.net/wangbiglei/blog/489604

时间: 2024-11-05 11:55:57

SpringMVC MyBatis PostgreSQL整合的相关文章

springMVC+MyBatis+Spring 整合(3)

spring mvc 与mybatis 的整合. 加入配置文件: spring-mybaits.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" xm

springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题

解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640人阅读 评论(1) 收藏 举报 用的是 SSM3的框架 Spring MVC 3.1 + Spring 3.1 + Mybatis3.1第一种情况:Spring MVC 和 Spring 整合的时候,SpringMVC的springmvc.xml文件中 配置扫描包,不要包含 service的注解,S

spring,springmvc,mybatis基本整合(一)--xml文件配置方式(2)

spring,springmvc,mybatis基本整合(一)–xml文件配置方式(2)之mapper接口 一,整合结构 二,所需jar包 如上图. 三,整合配置 1,web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://j

Spring+mybatis+postgresql整合

最近做了一个项目,需要使用Spring+mybatis+postgresql,下面记录一下整合步骤: 一.准备JAR包: 我使用的是maven,所以直接晒出pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apa

SpringBoot+SpringMVC+MyBatis快速整合搭建

使用过SpringBoot的同学都知道,SpringBoot的pom.xml中的坐标都是按功能导入的,jar包之间的依赖SpringBoot底层已经帮我们做好了,例如我们要整合SprngMVC,只需要导入SpringMVC的起步依赖就可以了,SpringBoot会帮我们导入Spring和SpringMVC整合需要的jar包. SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Sp

SSM框架Spring+SpringMVC+MyBatis——详细整合教程

摘要: 包括SQL Maps和Data Access ObjectsDAOMyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的... 摘要:   spring MVC属于SpringFrameWork的后续产品已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对... 1.基本概念 1.1.Spring Spring是一个开源框架Spring是于2003 年兴起的一个轻量级的Java 开发框架由Rod Johnson 在其著作Expert 

Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试

承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:123456 从构思这个博客,一直到最终确定以这个项目为切入点,中间也是各种问题出现,毕竟是新人,所以也是十分的小心,修改代码以及搬上github其实花了不少时间,但也特别的认真,不知道是怎么回事,感觉这几天的过程比逼死产品经理还要精彩和享受.或许是博客路上的第一站吧,有压力也有新奇,希望自己能坚持下

Spring+SpringMVC+Mybatis+Mysql整合实例【转】

本文要实现Spring+SpringMVC+Mybatis+Mysql的一个整合,实现了SpringMVC控制访问的页面,将得到的页面参数传递给Spring中的Mybatis的bean类,然后查找Mysql数据的功能,并通过JSP显示出来.建议可以先看笔者另一文章Mybatis与Spring整合创建Web项目 .笔者觉得整合过程中问题比较多的还是Spring+Mybatis的整合,SpringMVC的整合还是比较简单. Spring        Spring 是一个开源框架, Spring 是

Maven项目管理:SpringMVC+Mybatis+Velocity整合笔记

Maven创建项目 略…具体过程可参考用Maven创建第一个web项目 配置Spring MVC 导入Spring MVC 需要的包在pom.xml 文件下加入: 123456789101112 <!-- spring mvc begin --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <v