基于SSM框架的Web项目(二)
通过上一篇文章,我们已经大致搭建好了spring的框架结构,并且能通过配置bean,执行单元测试成功,接下来就是配置数据源以及整合SSM了。
一、配置数据源
在main包下的resources包下创建如下几个文件:
并且配置好安装好的MySQL的各项参数,其中很多参数笔者这里没有用,不过有要求的可以配置这些参数。
#db config
mysql.driverClass=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://localhost:3306/online_test?useUnicode=true&characterEncoding=UTF-8
mysql.user=root
mysql.password=soraSR11
mysql.minPoolSize=5
mysql.maxPoolSize=500
mysql.initialPoolSize=10
mysql.maxIdleTime=60
mysql.acquireIncrement=5
mysql.maxStatements=0
mysql.idleConnectionTestPeriod=60
mysql.acquireRetryAttempts=30
mysql.breakAfterAcquireFailure=false
mysql.testConnectionOnCheckout=false
连接数据库的各个参数配置好了,就是配置mybatis了:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置全局属性 -->
<settings>
<!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 使用列别名替换列名 默认:true -->
<setting name="useColumnLabel" value="true" />
<!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
因为笔者mapper接口和xml文件在同一个包下,所以关于xml文件位置可以不配置,mybatis会自动扫描mapper下的xml文件。
然后在spring配置文件中配置dataSource这个bean(为了方便读者阅读,关于视图的一些配置也一并在下面贴出来):
<?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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 配置整合mybatis过程 -->
<!-- 1.配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 2.数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<!-- 配置连接池属性 -->
<property name="driverClass" value="${mysql.driverClass}" />
<property name="jdbcUrl" value="${mysql.jdbcUrl}" />
<property name="user" value="${mysql.user}" />
<property name="password" value="${mysql.password}" />
</bean>
<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="com.alice.entity" />
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:/com/alice/mapper/*Mapper.xml" />
</bean>
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.alice.mapper" />
</bean>
<!--配置spring-service-->
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="com.alice" />
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置基于注解的声明式事务 -->
<!-- <tx:annotation-driven transaction-manager="transactionManager" />-->
<!--配置spring-web-->
<!-- 配置SpringMVC -->
<!-- 1.开启SpringMVC注解模式 -->
<!-- 简化配置:
(1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
(2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
-->
<mvc:annotation-driven />
<!-- 2.静态资源默认servlet配置
(1)加入对静态资源的处理:js,gif,png
(2)允许使用"/"做整体映射
-->
<mvc:default-servlet-handler/>
<!-- 3.配置jsp 显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
这些配置好了,就是配置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>ssm</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--Spring核心监听器 -->
<!--在服务器启动时加载Spring容器,且只会加载一次 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!--配置Springmvc核心控制器 -->
<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:spring.xml</param-value>
</init-param>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!--配置由Spring 提供的针对中文乱码的编码过滤器 -->
<!-- 编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
这些配置好了之后,读者就可以运行Tomcat,成功启动之后,浏览器打开默认页面index,如下图:
这是首页图:
点击的登录按钮之后,跳转的页面:
下面贴出俩个JSP页面的代码:
index.jsp页面代码如***意表单action的地址以及后面后端controller层的mapping):
<%@ page 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 style="text-align: center">
<img src="" height="600" width="100%" />
<form action="http://localhost:8080/sybonlinetestsystem_war_exploded/login/test.action" method="post">
<div style="margin: 0 auto">
<label>用户名:</label>
<input type="text" />
<label>密 码:</label>
<input type="password" />
<input type="submit" value="登 录" style="display: inline-block; width: 100px" />
</div>
</form>
</body>
</html>
登录成功测试页面代码如下:
<%--
Created by IntelliJ IDEA.
User: SoraHoro
Date: 2019/3/13 0013
Time: 22:12
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登录成功页面,测试JSP提交按钮访问服务器</h1>
</body>
</html>
最后则是服务器端Controller层的代码,服务端Controller通过Spring的前端控制器处理对应的请求(该Controller类里设置了俩个requestMapping,细心的读者可以发现,这两个地址拼接起来就是表单提交action的地址的最后部分):
package com.alice.controller;
import com.alice.service.IUserLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* 用户登录接口
*/
@Controller
@RequestMapping("/login")
public class UserLoginController {
@Autowired
private IUserLoginService IUserLoginService;
@RequestMapping(value="/test",method= RequestMethod.POST)
public String test() {
System.out.println("调用接口成功");
return "manage";
}
}
通过这些,相信读者应该就能大致了解如何通过前端表单按钮访问后端服务端的Controller层了,下面一章将讲解关于JSP页面渲染后端数据并返回动态数据的步骤。