使用Maven搭建一個SSM工程,文中有借鑑他人的知識,僅供學習使用:
1、工程預覽:
2、maven工程使用pom.xml導入相關jar包:如果不使用maven那麼就將jar包下載好,直接放到lib中
首先要創建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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ssm20170621</groupId>
<artifactId>ssm</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ssm Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- javaee-web-api包 注意和項目使用的JDK版本對應 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- 阿里巴巴數據源包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.2</version>
</dependency>
<!-- Oracle JDBC Driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<!-- <dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId>
<version>2.0.2</version> </dependency> -->
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
<!-- 格式化對象,方便輸出日誌 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
<!-- mybatis延遲加載 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>ssm</finalName>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
</project>
---------------------------------------------------------------------
3、配置文件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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<!-- springmvc配置begin -->
<!-- 打開註解配置 -->
<!-- ajax返回中文亂碼問題 -->
<mvc:annotation-driven>
<!-- 消息轉換器 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 配置掃描註解的路徑,由於bean的注入是由本springmvc-servlet.xml管理的,-->
<!-- 所以必須讓本文件掃描所有包 -->
<context:component-scan base-package="com"/>
<!-- 注入viewResolver -->
<bean name="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/resource/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 用於排除的資源文件,如jdbc、js、css等 -->
<mvc:resources location="/resource/" mapping="/resource/**" />
<!-- 使用JSON交互格式 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
<!-- springmvc配置end -->
<!-- 注入數據源 -->
<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:base-config.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc_driverClassName}"/>
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}"/>
<property name="password" value="${jdbc_password}"/>
</bean>
<!-- mybatis sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/*/mapper/*.xml"/>
</bean>
<!-- mybatis映射接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- dao層 -->
<property name="basePackage" value="com.*.dao"/>
</bean>
<!-- 開啓事務管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 開啓註解支持事務 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- <aop:aspectj-autoproxy/> -->
<!-- 支持文件上傳 -->
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
<!-- spring mvc國際化配置 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>LocalStrings</value>
</list>
</property>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
<!-- 使用jdbcTemplate -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
</beans>
---------------------------------------------------------------------
4、配置文件web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>ConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</context-param>
</web-app>
---------------------------------------------------------------------
5、實體bean的配置文件,EmpMapper.xml:
<?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.emp.dao.EmpDao">
<resultMap id="baseResultMap" type="com.emp.entity.Emp">
<id column="EMPNO" property="empNo" jdbcType="DECIMAL"/>
<result column="ENAME" property="ename" jdbcType="VARCHAR"/>
<result column="JOB" property="job" jdbcType="VARCHAR"/>
<result column="MGR" property="mgr" jdbcType="VARCHAR"/>
<result column="HIREDATE" property="hireDate" jdbcType="TIMESTAMP"/>
<result column="SAL" property="sal" jdbcType="DECIMAL"/>
<result column="COMM" property="comm" jdbcType="DECIMAL"/>
<result column="DEPTNO" property="deptNo" jdbcType="DECIMAL"/>
</resultMap>
<select id="selectAll" resultMap="baseResultMap">
SELECT
*
FROM EMP
</select>
<select id="selectEmpByEmpNo" resultMap="baseResultMap">
SELECT
*
FROM EMP
WHERE EMPNO=#{empNo,jdbcType=DECIMAL}
</select>
<select id="selectEmpByName" resultMap="baseResultMap" parameterType="java.lang.String">
SELECT
*
FROM EMP
WHERE ENAME=#{ename,jdbcType=VARCHAR}
</select>
<select id="selectEmpByConditions" resultMap="baseResultMap" parameterType="com.emp.entity.Emp">
SELECT
*
FROM EMP
WHERE 1=1
<if test="empNo != null">
AND EMPNO=#{empNo,jdbcType=DECIMAL}
</if>
<if test="ename != null">
AND ENAME=#{ename,jdbcType=VARCHAR}
</if>
<if test="job != null">
AND JOB=#{job,jdbcType=VARCHAR}
</if>
<if test="mgr != null">
AND MGR=#{mgr,jdbcType=VARCHAR}
</if>
<if test="hireDate != null">
AND HIREDATE=#{hireDate,jdbcType=TIMESTAMP}
</if>
<if test="sal != null">
AND SAL=#{sal,jdbcType=DECIMAL}
</if>
<if test="comm != null">
AND COMM=#{comm,jdbcType=DECIMAL}
</if>
<if test="deptNo != null">
AND DEPTNO=#{deptNo,jdbcType=DECIMAL}
</if>
</select>
<delete id="deleteEmp" parameterType="java.lang.Integer">
DELETE FROM EMP WHERE EMPNO=#{empNo,jdbcType=DECIMAL}
</delete>
<insert id="insertEmp" parameterType="com.emp.entity.Emp">
INSERT INTO EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
VALUES(#{empNo,jdbcType=DECIMAL},
#{ename,jdbcType=VARCHAR},
#{job,jdbcType=VARCHAR},
#{mgr,jdbcType=VARCHAR},
#{hireDate,jdbcType=TIMESTAMP},
#{sal,jdbcType=DECIMAL},
#{comm,jdbcType=DECIMAL},
#{deptNo,jdbcType=DECIMAL})
</insert>
<update id="modifyEmp" parameterType="com.emp.entity.Emp">
UPDATE EMP
<set>
<if test="ename != null">
ENAME=#{ename,jdbcType=VARCHAR},
</if>
<if test="job != null">
JOB=#{job,jdbcType=VARCHAR},
</if>
<if test="mgr != null">
MGR=#{mgr,jdbcType=VARCHAR},
</if>
</set>
<where>
EMPNO=#{empNo,jdbcType=DECIMAL}
</where>
</update>
</mapper>
6、jdbc.properties文件:
jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
jdbc_url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc_username=scott
jdbc_password=1
7、java代碼:
ENTITY
------
package com.emp.entity;
import java.io.Serializable;
import java.util.Date;
/**
* @author lijg7 on 2017/6/19 - 16:55.
*/
public class Emp implements Serializable {
private static final long serialVersionUID = 7960327610388638028L;
private Double comm;
private Integer deptNo;
private Integer empNo;
private String ename;
private Date hireDate;
private String job;
private String mgr;
private Double sal;
public Emp(){
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Emp emp = (Emp) o;
if (empNo != null ? !empNo.equals(emp.empNo) : emp.empNo != null)
return false;
if (ename != null ? !ename.equals(emp.ename) : emp.ename != null)
return false;
if (job != null ? !job.equals(emp.job) : emp.job != null)
return false;
if (mgr != null ? !mgr.equals(emp.mgr) : emp.mgr != null)
return false;
if (hireDate != null ? !hireDate.equals(emp.hireDate) : emp.hireDate != null)
return false;
if (sal != null ? !sal.equals(emp.sal) : emp.sal != null)
return false;
if (comm != null ? !comm.equals(emp.comm) : emp.comm != null)
return false;
return deptNo != null ? deptNo.equals(emp.deptNo) : emp.deptNo == null;
}
public Double getComm() {
return comm;
}
public Integer getDeptNo() {
return deptNo;
}
public Integer getEmpNo() {
return empNo;
}
public String getEname() {
return ename;
}
public Date getHireDate() {
return hireDate;
}
public String getJob() {
return job;
}
public String getMgr() {
return mgr;
}
public Double getSal() {
return sal;
}
@Override
public int hashCode() {
int result = empNo != null ? empNo.hashCode() : 0;
result = 31 * result + (ename != null ? ename.hashCode() : 0);
result = 31 * result + (job != null ? job.hashCode() : 0);
result = 31 * result + (mgr != null ? mgr.hashCode() : 0);
result = 31 * result + (hireDate != null ? hireDate.hashCode() : 0);
result = 31 * result + (sal != null ? sal.hashCode() : 0);
result = 31 * result + (comm != null ? comm.hashCode() : 0);
result = 31 * result + (deptNo != null ? deptNo.hashCode() : 0);
return result;
}
public void setComm(Double comm) {
this.comm = comm;
}
public void setDeptNo(Integer deptNo) {
this.deptNo = deptNo;
}
public void setEmpNo(Integer empNo) {
this.empNo = empNo;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public void setJob(String job) {
this.job = job;
}
public void setMgr(String mgr) {
this.mgr = mgr;
}
public void setSal(Double sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Emp{" + "empNo=" + empNo + ", ename='" + ename + '\'' + ", job='" + job + '\'' + ", mgr='" + mgr +
'\'' + ", hireDate=" + hireDate + ", sal=" + sal + ", comm=" + comm + ", deptNo=" + deptNo + '}';
}
}
DAO--不需要實現類
-----------
package com.emp.dao;
import com.emp.entity.Emp;
import java.util.List;
/**
* @author lijg7 on 2017/6/19 - 16:56.
*/
public interface EmpDao {
public List<Emp> selectAll();
public Emp selectEmpByEmpNo(Integer empNo);
public Emp selectEmpByName(String ename);
public List<Emp> selectEmpByConditions(Emp emp);
public int deleteEmp(Integer empNo);
public int modifyEmp(Emp emp);
public int insertEmp(Emp emp);
}
SERVICE
-------
package com.emp.service;
import com.emp.entity.Emp;
import java.util.List;
/**
* @author lijg7 on 2017/6/19 - 16:56.
*/
public interface EmpService {
public List<Emp> selectAll();
public Emp selectEmpByEmpNo(Integer empNo);
public Emp selectEmpByName(String ename);
public List<Emp> selectEmpByConditions(Emp emp);
public int deleteEmp(Integer empNo);
public int modifyEmp(Emp emp);
public int insertEmp(Emp emp);
}
SERVICEIMPL
-----------
package com.emp.service.impl;
import com.emp.dao.EmpDao;
import com.emp.entity.Emp;
import com.emp.service.EmpService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author lijg7 on 2017/6/19 - 16:57.
*/
@Service
public class EmpServiceImpl implements EmpService {
@Resource(name = "empDao")
private EmpDao empDao;
//@Resource name可以不寫,默認就是empDao,如果將名稱改了,則要指定name
//private EmpDao empDao;
public List<Emp> selectAll() {
return this.empDao.selectAll();
}
public Emp selectEmpByEmpNo(Integer empNo) {
return this.empDao.selectEmpByEmpNo(empNo);
}
public Emp selectEmpByEname(String ename) {
return this.empDao.selectEmpByName(ename);
}
public List<Emp> selectEmpByConditions(Emp emp) {
return this.empDao.selectEmpByConditions(emp);
}
public Emp selectEmpByName(String ename) {
return this.empDao.selectEmpByName(ename);
}
public int deleteEmp(Integer empNo) {
return this.empDao.deleteEmp(empNo);
}
public int modifyEmp(Emp emp) {
return this.empDao.modifyEmp(emp);
}
public int insertEmp(Emp emp) {
return this.empDao.insertEmp(emp);
}
}
CONTROLLER
----------
(1)登錄LoginController
這裏用到了個常量文件
package com.emp.constants;
/**
* @author lijg7 on 2017/6/19 - 16:57.
*/
public class EmpConstants {
public static final String USER_EDIT_INFO = "/jsp/emp/user-editInfo";
public static final String USER_INFO = "/jsp/emp/user-info";
}
//return跳轉的是jsp文件例如http://localhost:8080/ssm/login.jsp,
直接寫return "login";因爲前綴與後綴在springmvc-servlet中配置過了。
--------------------------------------------------------------------------------
LoginController:
----------------
package com.login.controller;
import com.constants.Constants;
import com.emp.entity.Emp;
import com.emp.service.EmpService;
import com.login.entity.LoginVo;
import com.util.DateUtil;
import com.util.UtilsForString;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("busi/login")
public class LoginController {
private static final String operTime = DateUtil.insertDate();
@Resource
private EmpService empService;
@RequestMapping("/toLogin")
public String toLoginJsp() {
System.out.println("進入登錄頁面……" + operTime);
return Constants.JSP.LOGIN_PAGE;
}
@RequestMapping("/doLogin")
@ResponseBody
public String doLogin(HttpSession session,LoginVo vo) {
System.out.println("用戶登錄……" + operTime);
if (null != vo) {
if (UtilsForString.isEmpty(vo.getEname())) {
System.out.println("用戶名爲空……" + operTime);
return "ng";
}
System.out.println(this.empService.selectAll());
String name = UtilsForString.isNotEmpty(vo.getEname()) ? vo.getEname().toUpperCase() : "";
Emp dbEmp = this.empService.selectEmpByName(name);
if (null == dbEmp || !vo.getEname().equalsIgnoreCase(dbEmp.getEname())) {
System.out.println("用戶名不正確……" + operTime);
return "ng";
}
System.out.println(vo.getEname() + ",登錄成功……" + operTime);
session.setAttribute("currentUser", dbEmp);
return "ok";
}
return null;
}
@RequestMapping("/frontPage")
public String login(HttpSession session) {
System.out.println("登錄到首頁!!!!" + operTime);
return Constants.JSP.FRONT_PAGE;
}
}
--------------------------------------------------------------
8、JSP頁面:
啓動tomcat,訪問http://localhost:8880/ssm我將端口修改了,因爲tomcat太多了~
下面是默認加載的index.jsp,進入該頁面將打開如下鏈接,到login.jsp:
(1)login.jsp圖一
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
<title>用戶登錄</title>
<!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
<link href="<%=cssBootstrap%>" rel="stylesheet"/>
<link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
<script type="text/javascript" src="<%=jsJquery%>"></script>
<script type="text/javascript" src="<%=jsBootstrap%>"></script>
<script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
<style type="text/css">
.container{
padding-top:100px;
}
</style>
<script type="text/javascript">
$(function(){
<%-- 這是鼠標移動後出現的tip提示 --%>
$('[data-toggle="popover"]').popover();
});
<%-- enter鍵登錄 --%>
$(document).keydown(function() {
if (event.keyCode == 13) {
if ($("#loginBtn").is(":disabled") == false) {
$("#loginBtn").click();
}
}
});
function resetValue(){
$("input").val("");
}
<!--這裏是登錄的邏輯url都是controller的RequestMapping路徑-->
<!--這裏使用到了ajax需要返回值則在java方法中添加@ResponseBody,-->
<!--返回值類型可以是任意類型。-->
function login(){
$.post("<%=bp%>busi/login/doLogin",{
"ename":$("#ename").val()
},function(result){
if("ok"==result){
window.location="<%=bp%>busi/login/frontPage";
}else{
window.location="<%=bp%>index.jsp";
}
});
}
</script>
</head>
<body>
<div class="container">
<div class="col-md-5 col-md-offset-3">
<div class="panel panel-default">
<div class="panel-heading bg-info">
用戶登錄
</div>
<div class="panel-body">
<form class="form-horizontal">
<div class="form-group">
<label class="col-md-3 control-label" for="ename">登錄名:</label>
<div class="col-md-6">
<input id="ename" class="form-control" type="text" name="ename" value="scott" placeholder="請輸入登錄名"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="password">密碼:</label>
<div class="col-md-6">
<input id="password" class="form-control" type="password" name="job" value="" placeholder="請輸入密碼"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="vcode">驗證碼:</label>
<div class="col-md-6">
<input id=vcode class="form-control" type="text" name="vcode"
value=''/>
</div>
</div>
<div class="form-group">
<div class="col-md-5 col-md-offset-5">
<button id="loginBtn" type="button" onclick="login()" class="btn btn-primary">登錄</button>
</div>
</div>
</form>
</div>
<div class="panel-footer">
</div>
</div>
</div>
</div>
</body>
</html>
--------------------------------------------------------------------------------
(2)上面是模擬登錄,成功後就到了front-page.jsp圖二
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
<title>我的工作臺</title>
<!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
<link href="<%=cssBootstrap%>" rel="stylesheet"/>
<link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
<script type="text/javascript" src="<%=jsJquery%>"></script>
<script type="text/javascript" src="<%=jsBootstrap%>"></script>
<script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
<style type="text/css">
body{
background-color: #F1F3F7;
}
body *{
padding: 0px;
margin: 0px;
}
body .container,.container .col-md-12{
width: 100%;
height: 90%;
padding-top: 5px;
}
body .container .panel{
background-color: #FFFFFF;
}
body .container a:hover{
cursor: pointer;
}
#pendingToDoArea{
margin-top: 5px;
}
label:hover{
cursor: pointer;
}
.dropdown-menu{
border: none;
}
.well{
background-color: #FFFFFF;
border:none;
margin-bottom: 0px;
}
iframe{
height: 350px;
}
</style>
<script type="text/javascript">
$(function(){
<%-- 這是鼠標移動後出現的tip提示 --%>
$('[data-toggle="popover"]').popover();
});
function toModifyUserInfo(){
window.location="<%=bp%>busi/emp/userEditInfo?empNo=${currentUser.empNo}";
}
</script>
</head>
<body>
<div class="container">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-body">
<div id="mainAcctInfoArea" class="col-md-12 bg-info" style="padding-top: 25px;">
<div class="row">
<div class="col-md-1" onclick="toModifyUserInfo()">
<a tabindex="0" class="thumbnail" role="button" data-toggle="popover" data-trigger="hover"
data-content="${currentUser.ename},歡迎回來~" data-container="body">
<img src="<%=bp%>resource/common/images/img_main/user2.png" width="80px" height="80px">
</a>
</div>
<div class="col-md-11">
<span class="h1">${currentUser.ename}</span> <span>歡迎回來</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="btn-toolbar">
<a class="btn btn-info" href="<%=bp%>busi/emp/userInfo">僱員列表</a>
<a class="btn btn-info" href="<%=bp%>busi/emp/userEditInfo?empNo=${currentUser.empNo}">個人信息${currentUser.empNo}</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
(3)進入首頁後,可以點擊對應按鈕,讀取數據庫,展示信息:
僱員列表userInfo.jsp:圖三
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
<title>查看僱員信息</title>
<!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
<link href="<%=cssBootstrap%>" rel="stylesheet"/>
<link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
<script type="text/javascript" src="<%=jsJquery%>"></script>
<script type="text/javascript" src="<%=jsBootstrap%>"></script>
<script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
<style type="text/css">
.container{
padding-top:100px;
}
</style>
<script type="text/javascript">
function doDelete(empNo){
$.post("<%=bp%>busi/emp/userDelInfo",{
"empNo":empNo
},function(ret){
});
}
</script>
</head>
<body>
<div class="container">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading bg-info">
<a href="<%=bp%>busi/login/frontPage">首頁</a> 查看僱員信息 <a href="<%=bp%>busi/emp/userEditInfo?operType=add">新增</a>
</div>
<div class="panel-body">
<table class="table table-striped table-bordered table-hover table-condensed table-responsive">
<tr>
<th>編號</th>
<th>姓名</th>
<th>職位</th>
<th>上級</th>
<th>所在部門</th>
<th>薪水</th>
<th>佣金</th>
<th>入職日期</th>
<th>操作</th>
</tr>
<c:choose>
<c:when test="${not empty empList}">
<c:forEach items="${empList}" var="emp" varStatus="index">
<tr>
<td>${emp.empNo}</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.mgr}</td>
<td>${emp.deptNo}</td>
<td>${emp.sal}</td>
<td>${emp.comm}</td>
<td><fmt:formatDate value="${emp.hireDate}" pattern="yyyy-mm-dd"/></td>
<td>
<a href="<%=bp%>busi/emp/userEditInfo?empNo=${emp.empNo}&operType=edit" class="btn btn-primary btn-sm">編輯</a>
<a href="javascript:void(0);" onclick="doDelete(${emp.empNo})" class="btn btn-danger btn-sm">刪除</a>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td>沒有僱員信息</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-grain"></span>
<a href="<%=bp%>busi/login/frontPage">首頁</a>
</div>
</div>
</div>
</div>
</body>
</html>
(4)如果點擊首頁的個人信息則跳轉到個人信息編輯頁面user-editInfo.jsp:圖四
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
<title>個人信息編輯</title>
<!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
<link href="<%=cssBootstrap%>" rel="stylesheet"/>
<link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
<script type="text/javascript" src="<%=jsJquery%>"></script>
<script type="text/javascript" src="<%=jsBootstrap%>"></script>
<script type="text/javascript" src="<%=bp%>resource/common/js/datePicker/WdatePicker.js"></script>
<script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
<style type="text/css">
.container{
padding-top:100px;
}
</style>
<script type="text/javascript">
$(function(){
<%-- 這是鼠標移動後出現的tip提示 --%>
$('[data-toggle="popover"]').popover();
});
function resetValue(){
$("input").val("");
}
function val(id){
return $("#"+id).val();
}
function doModify(operType){
var empNo=val("empNo");
var ename=val("ename");
var job=val("job");
var mgr=val("mgr");
var hireDate=val("hireDate");
var sal=val("sal");
var comm=val("comm");
var deptNo=val("dept");
//alert(empNo + ename + job + mgr + hireDate + sal + comm + deptNo);
$.post("<%=bp%>busi/emp/doEditUserInfo",{
"operType":"${operType}",
"empNo":empNo,
"ename":ename,
"job":job,
"mgr":mgr,
"hireDate":hireDate,
"sal":sal,
"comm":comm,
"deptNo":deptNo
},function(ret){
alert(ret);
});
}
</script>
</head>
<body>
<div class="container">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading bg-info">
<a href="<%=bp%>busi/login/frontPage">首頁</a> 個人信息 - ${operType}
</div>
<div class="panel-body">
<form class="form-horizontal">
<div class="form-group">
<label class="col-md-3 control-label" for="empNo">編號:</label>
<div class="col-md-6">
<input id="empNo" class="form-control" type="text" name="empNo" value="${emp.empNo}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="ename">姓名:</label>
<div class="col-md-6">
<input id="ename" class="form-control" type="text" name="ename" value="${emp.ename}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="job">職位:</label>
<div class="col-md-6">
<input id="job" class="form-control" type="text" name="job" value="${emp.job}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="mgr">上級:</label>
<div class="col-md-6">
<select id="mgr" class="selectpicker show-tick form-control">
<option value="BLAKE" selected="selected">BLAKE</option>
<option value="CLARK">CLARK</option>
<option value="JONES">JONES</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="hireDate">入職日期:</label>
<div class="col-md-6">
<input id=hireDate class="form-control" type="text" name="hireDate"
value='<fmt:formatDate value="${emp.hireDate}" pattern="yyyy-MM-dd"/>'/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="sal">薪水:</label>
<div class="col-md-6">
<input id="sal" class="form-control" type="text" name="sal" value="${emp.sal}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="comm">佣金:</label>
<div class="col-md-6">
<input id="comm" class="form-control" type="text" name="comm" value="${emp.comm}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="dept">部門:</label>
<div class="col-md-6">
<input id="dept" class="form-control" type="text" name="dept" value="${emp.deptNo}"/>
</div>
</div>
<div class="form-group">
<div class="col-md-5 col-md-offset-5">
<button type="button" onclick="resetValue()" class="btn btn-warning">重置</button>
<button type="button" onclick="doModify()" class="btn btn-primary">提交</button>
</div>
</div>
</form>
</div>
<div class="panel-footer">
<a href="<%=bp%>busi/login/frontPage">首頁</a>
</div>
</div>
</div>
</div>
</body>
</html>
(5)在僱員列表頁有個新增鏈接點擊後使用的是user-editInfo.jsp,有operType區別加載頁面內容:
至此SSM工程搭建完畢!這是基礎的沒有添加過多設計的工程,會有欠缺,僅學習使用。
圖一:
圖二:
圖三:
圖四: