eclipse+springmvc+mybatis+mysql搭建web工程

        本人在使用eclipse+springMVC+mybatis+mysql搭建web工程时,总结了一些经验和方法,供大家学习交流。之所以采用这些工具和技术搭建工程,是因为它们的应用比较广泛且是开源的,有很多的资料可供参考,在较长的时间内不会被淘汰,废话少说直接上干货。

说明:eclipse中的maven工程和基础的数据库安装、环境搭建大家可在网上搜索,比较多,不再赘述。

1、工程目录结构

1)后台java文件

   2)配置文件

   3)前端jsp页面(如果创建工程中没有WEB-INF目录可在eclipse中配置生成;views是自己添加的)

2、具体文件内容及说明

1)UserController.java(控制层文件,主要负责客户端的请求拦截,调用业务层进行处理,并将处理结果返回到前端的jsp页面)

package com.bj58.stp.controller;

import javax.servlet.http.HttpServletRequest;

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

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

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

import com.bj58.stp.entity.User;

import com.bj58.stp.service.UserService;

 

//@Controller注解用于标示本类为web层控制组件

@Controller

 //@RequestMapping("/user")用于标定访问时对url位置

   @RequestMapping("/user")

 //在默认情况下springmvc的实例都是单例模式,所以使用scope域将其注解为每次都创建一个新的实例

   @Scope("prototype")

   public class UserController{

       @Autowired

        UserService userService;

       @RequestMapping("/login")

       public String login(User user,HttpServletRequest request){

            //调用login方法来验证是否是注册用户

            boolean loginType = userService.login(user.getUsername(),user.getPassword());

            if(loginType){

                //如果验证通过,则将用户信息传到前台

                request.setAttribute("user",user);

                //并跳转到success.jsp页面

                return "success";

            }else{

                //若不对,则将错误信息显示到错误页面

                request.setAttribute("message","用户名密码错误");

                return "fail";

            }

        }

   }

 

2)IUserDao.java(持久层文件,主要封装了数据访问对象,便于对数据库进行访问操作)

package com.bj58.stp.dao;

import com.bj58.stp.entity.User;

public interface IUserDao {

    public User selectById(int id);

    public User selectByName(String username);

 

}

   3User(实体层文件,对应数据库中具体的表;变量对应表中的字段)

package com.bj58.stp.entity;

public class User {

    private int id;

    private String username;

    private String password;

   

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password=password;

    }

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id=id;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username=username;

    }

}

 

4)UserServiceImpl.java(实现层文件,这是业务层负责业务逻辑的处理,实现的是UserService接口)

package com.bj58.stp.impl;

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

import org.springframework.stereotype.Service;

import com.bj58.stp.dao.IUserDao;

import com.bj58.stp.entity.User;

import com.bj58.stp.service.UserService;

 

//@Service("UserService") 注解用于标示此类为业务层组件,在使用时会被注解的类会自动由

//spring进行注入,无需我们创建实例

@Service("UserService")

public class UserServiceImpl implements UserService{

    //自动注入iuserdao 用于访问数据库

    @Autowired

    IUserDao Mapper;

    //登录方法的实现,从jsp页面获取username与password

    public boolean login(String username,String password) {

        //对输入账号进行查询,取出数据库中保存对信息

        User user=Mapper.selectByName(username);

        if(user!=null) {

            if(user.getUsername().equals(username)&&user.getPassword().equals(password))

                return true;

        }

        return false;

    }

}

 

5)UserService.xml(mybatis配置文件,映射面向对象和关系型数据库的关系)

<?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">

    <!--namespace用于与DAO层的接口类进行绑定,这样我们无需实现DAO层的接口类,其接口类就能够自动的找到相关的SQL语句进行绑定实现-->

 <mapper namespace="com.bj58.stp.dao.IUserDao">

      <!--select表示查询,它的id名称必须与DAO层接口的方法名相同,否则无法绑定-->

      <select id="selectByName" parameterType="string" resultType="User">

          select * from user  where username=#{username}

      </select>

      <select id="selectById" parameterType="int" resultType="User">

          select * from user  where id=#{id}

      </select>

 </mapper>

 

6)UserService(接口文件,定义业务操作具体实现在子类中)

package com.bj58.stp.service;

public interface UserService {

    public boolean login(String username,String password);

}

 

7applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

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

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

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

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

        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

 

    <!-- 引入db.properties属性文件 -->

    <context:property-placeholder location="classpath:db.properties" />

    <!--定义一个jdbc数据源,创建一个驱动管理数据源的bean -->

    <bean id="jdbcDataSource"

        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="${jdbc.driver}" />

        <property name="url" value="${jdbc.url}" />

        <property name="username" value="${jdbc.username}" />

        <property name="password" value="${jdbc.password}" />

    </bean>

    <!--创建一个sql会话工厂bean,指定数据源 --> <!-- *Mapper.xml -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <!-- 指定数据源 -->

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

        <!--类型别名包,引入com.lmei.ssm.entity下的所有类 -->

        <property name="typeAliasesPackage" value="com.bj58.stp.entity"></property>

        <!--指定sql映射xml文件的路径 -->

        <property name="mapperLocations"

            value="classpath*:com/bj58/stp/mapper/*.xml"></property>  

    </bean>

    <!--自动扫描映射接口-->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <!-- 指定sql会话工厂,在上面配置过的 -->

        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>

        <!-- 指定基础包,即自动扫描com.bj58.stp.dao这个包下的所有接口类 -->

        <property name="basePackage" value="com.bj58.stp.dao"></property>

    </bean>

      <!-- 创建一个sqlSession对象 -->

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

        <constructor-arg index="0" ref="sqlSessionFactory" />

    </bean>

      <!-- 自动扫描组件 -->

    <context:component-scan base-package="com.bj58.stp">

        <context:exclude-filter type="aspectj" expression="com.bj58.stp.dao.*"/>

        <!-- <context:exclude-filter type="annotation" expression="com.lmei.ssm.controller.*"/> -->

    </context:component-scan>

    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

</beans>

 

8db.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://10.252.61.65:3306/ftp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

jdbc.username=root

jdbc.password=root

 

9log4j.properties

################ FATAL, ERROR, WARN, INFO, DEBUG

log4j.rootLogger=WARN

### stdout  ,stdout,D,E ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern= %d{ABSOLUTE} %5p %c{1}:%L - %m%n

### logFile ###

### save error to another file ###

log4j.appender.D=org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File=D:/logs/test-error.log

log4j.appender.D.Append=true

#error only in this file

log4j.appender.D.Threshold =WARN

log4j.appender.D.layout=org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p]  %m%n

 

10springmvc-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: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.xsd

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

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

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

        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">

 

    <!-- 自动扫描包,实现支持注解的IOC -->

    <context:component-scan base-package="com.bj58.stp.controller" />

    <!-- Spring MVC不处理静态资源 -->

    <mvc:default-servlet-handler />

    <!-- 支持mvc注解驱动 -->

    <mvc:annotation-driven />

    <!-- 视图解析器 -->

    <bean

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

        id="internalResourceViewResolver">

        <!-- 前缀 -->

        <property name="prefix" value="/WEB-INF/views/" />

        <!-- 后缀 -->

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

    </bean>

   

</beans>

 

另外需要两个最终要的配置文件web.xmlpom.xml,具体配置如下:

Web.xml

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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <display-name>stp</display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  <!-- 配置spring监听器 -->

  <listener>

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

  </listener>

  <!-- 加载spring配置文件applicationContext.xml -->

  <context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:applicationContext.xml</param-value>

  </context-param>

  <!--  配置前端控制器 -->

  <servlet>

      <servlet-name>springmvc</servlet-name>

      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      <init-param>

          <param-name>contextConfigLocation</param-name>

          <param-value>classpath:springmvc-servlet.xml</param-value>

      </init-param>

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

  </servlet>

  <servlet-mapping>

      <servlet-name>springmvc</servlet-name>

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

  </servlet-mapping>

  <!-- 配置字符編碼 -->

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

</web-app>

 

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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.bj58.stp</groupId>

  <artifactId>com.bj58.stp</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

 

  <repositories>

    <repository>

      <id>maven repo</id>

      <url>http://repo1.maven.org/maven2/</url>

    </repository>

  </repositories>

 

  <properties> 

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- spring版本号 --> 

        <spring.version>4.2.0.RELEASE</spring.version> 

        <!-- log4j日志文件管理包版本 --> 

        <slf4j.version>1.6.6</slf4j.version> 

        <log4j.version>1.2.12</log4j.version> 

        <!-- junit版本号 --> 

        <junit.version>4.10</junit.version> 

        <!-- mybatis版本号 --> 

        <mybatis.version>3.4.1</mybatis.version> 

    </properties> 

   

    <dependencies> 

        <!-- 添加Spring依赖 --> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-core</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-webmvc</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-context</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-context-support</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-aop</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-aspects</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-tx</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-jdbc</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-web</artifactId> 

            <version>${spring.version}</version> 

        </dependency> 

 

        <!--单元测试依赖 --> 

        <dependency> 

            <groupId>junit</groupId> 

            <artifactId>junit</artifactId> 

            <version>${junit.version}</version> 

            <scope>test</scope> 

        </dependency> 

 

        <!-- 日志文件管理包 --> 

        <!-- log start --> 

        <dependency> 

            <groupId>log4j</groupId> 

            <artifactId>log4j</artifactId> 

            <version>${log4j.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.slf4j</groupId> 

            <artifactId>slf4j-api</artifactId> 

            <version>${slf4j.version}</version> 

        </dependency> 

        <dependency> 

            <groupId>org.slf4j</groupId> 

            <artifactId>slf4j-log4j12</artifactId> 

            <version>${slf4j.version}</version> 

        </dependency> 

        <!-- log end --> 

 

        <!--spring单元测试依赖 --> 

        <dependency> 

            <groupId>org.springframework</groupId> 

            <artifactId>spring-test</artifactId> 

            <version>${spring.version}</version> 

            <scope>test</scope> 

        </dependency> 

 

        <!--mybatis依赖 --> 

        <dependency> 

            <groupId>org.mybatis</groupId> 

            <artifactId>mybatis</artifactId> 

            <version>${mybatis.version}</version> 

        </dependency> 

 

        <!-- mybatis/spring --> 

        <dependency> 

            <groupId>org.mybatis</groupId> 

            <artifactId>mybatis-spring</artifactId> 

            <version>1.3.1</version> 

        </dependency> 

 

        <!-- mysql驱动包 --> 

        <dependency> 

            <groupId>mysql</groupId> 

            <artifactId>mysql-connector-java</artifactId> 

            <version>5.1.29</version> 

        </dependency> 

 

        <!-- json数据 -->

        <dependency>

            <groupId>org.codehaus.jackson</groupId>

            <artifactId>jackson-mapper-asl</artifactId>

            <version>1.9.13</version>

        </dependency>

        <!-- JSTL标签库 -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>javax.servlet-api</artifactId>

            <version>3.1.0</version>

        </dependency>

       

        <!-- servlet -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>servlet-api</artifactId>

            <version>3.0-alpha-1</version>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>jstl</artifactId>

            <version>1.2</version>

        </dependency>

        <!--添加aspectjweaver -->

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjweaver</artifactId>

            <version>1.8.5</version>

        </dependency>

        <!-- jackson -->

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-core</artifactId>

            <version>2.5.2</version>

        </dependency>

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.5.2</version>

        </dependency>

    </dependencies>

    <build>

    <plugins> 

        <!-- define the project compile level --> 

        <plugin> 

            <groupId>org.apache.maven.plugins</groupId> 

            <artifactId>maven-compiler-plugin</artifactId> 

            <version>2.3.2</version> 

            <configuration> 

                <source>1.8</source>

                <target>1.8</target>

                <encoding>UTF-8</encoding>

            </configuration> 

        </plugin> 

       

        <!-- 跳过测试 -->

  <plugin>

   <groupId>org.apache.maven.plugins</groupId>

   <artifactId>maven-surefire-plugin</artifactId>

   <version>2.16</version>

   <configuration>

      <skip>true</skip>

      <argLine>-Dfile.encoding=UTF-8</argLine>

   </configuration>

  </plugin>    

    </plugins> 

  </build>

 

</project>

 

3、运行工程,访问页面如下:

  1)通过jetty启动服务,在浏览器访问地址:http://localhost:8080/login.jsp

2)用户名和密码进行登录

至此demo搭建成功,可以在此基础上进行扩展,从零到一慢慢积累

 

4、踩过的坑

     1、如果启动工程出现文件查找不到,建议查看配置文件中名称和路径是否配置正确

     2、如果服务启动正常访问页面出现404,建议查看jsp或者html前端页面存放路径和返回url是否一致

     3、使用过程中请按照上面给定pom中配置的版本,否则出现版本不兼容服务启动失败(你自己找到合适的其他版本组合也可以)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值