1. 程式人生 > >練習搭建spring+springmvc+mybatis實現java web登陸

練習搭建spring+springmvc+mybatis實現java web登陸

  關於spring、springmvc、mybatis的相關資料需要提前瞭解一下。我也只是初學者,就不介紹了。

我使用的是idea 如果有用eclipse也是類似

第一步我是用的maven來引進外部包,它很好用省得你到處去下載包。
新建一個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.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>hp</groupId>
  <artifactId>bookworm-spring</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>bookworm-spring Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <!-- spring版本號 -->
    <spring.version>3.2.4.RELEASE</spring.version>
    <!-- mybatis版本號 -->
    <mybatis.version>3.2.4</mybatis.version>
    <!-- log4j日誌檔案管理包版本 -->
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.9</log4j.version>
  </properties>

    <dependencies>
      <!-- spring核心包 -->
      <!-- springframe start -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</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-webmvc</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-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-test</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <!-- springframe end -->

      <!-- 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.2.2</version>
      </dependency>
      <!-- mysql驅動包 -->
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.29</version>
      </dependency>
      <!-- junit測試包 -->
      <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>

      <!-- json資料 -->
      <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
      </dependency>

      <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
      </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>

      <!--servlet 包-->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
      </dependency>
      <!-- log end -->
    </dependencies>

  <build>
    <finalName>bookworm-spring</finalName>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <targetPath>${basedir}/target/classes</targetPath>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

上面整個檔案我都貼出來了,如果大家使用記得請改專案名字,或者視情況貼上。

下面是我整個專案的截圖


大家建立專案時可以仿著建立。

controller 、dao、service、model這是springmvc的四個層,關於他們的介紹大家可以參考 點選開啟連結

      conf存放的是springmvc spring mybatis 的配置檔案 mapper存放的是xml格式的mapper它是mybatis範疇 點選開啟連結

   

其實spring.xml spring-mvc.xml  spring_mybatis.xml 可以配置到一個裡面。只不過這樣為了清楚地看


我是用Mysql資料庫 新建了一個userinfo表裡麵包括userid username password

下面我貼出controller 、dao、service、model裡的程式碼,login是註冊功能,其他的是註冊功能


 controller層

package controller;

import model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import service.BookWormSvc; import until.JsonUtil; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 2016/9/22. */ @Controller @RequestMapping("/") public class bookwormController { @Autowired BookWormSvc bookWormSvc; public void initUserSvc(){ ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:conf/spring.xml" , "classpath:conf/spring_mybatis.xml"}); bookWormSvc = (BookWormSvc) context.getBean("bookWormSvcImpl"); } @RequestMapping("index") public String index(){return "login";} @ResponseBody @RequestMapping("login") public String login(HttpServletRequest request)throws Exception{ initUserSvc(); String username = request.getParameter("username"); String password = request.getParameter("password"); UserInfo user = bookWormSvc.login(username,password); //如果user不為空 則登陸成功。狀態碼:1表示登陸成功,0表示登入失敗 if(user!=null){ HttpSession session=request.getSession(); session.setAttribute("userinfo",user); return resultJson(1,null); }else { return resultJson(0,"名戶名或密碼不正確"); } } @ResponseBody @RequestMapping("register") public String register(HttpServletRequest request )throws Exception{ initUserSvc(); String username=request.getParameter("username"); String password=request.getParameter("password"); int registerResult=bookWormSvc.register(username,password); if(registerResult==1){ return resultJson(1,"註冊成功"); }else { return resultJson(0,"註冊失敗"); } } @ResponseBody @RequestMapping("selectUserInfoByusername") public String selectUserInfoByusername(HttpServletRequest request)throws Exception{ initUserSvc(); String username=request.getParameter("username"); UserInfo user=bookWormSvc.selectUserInfoByusername(username); if(user!=null){ return resultJson(1,user); }else { return resultJson(0,"改使用者不存在"); } } //返回的json 一個是狀態碼,另一個是返回資訊 public String resultJson(int resultCode,Object resultObject)throws Exception{ Map<String,Object> resultMap=new HashMap<String, Object>(); resultMap.put("resultCode",resultCode); resultMap.put("resultObject",resultObject); String result = JsonUtil.obj2json(resultMap); return result; } }
我的想法是controller接收到請求後進行處理,處理後將結果用json封裝返回給jsp

dao層程式碼

package dao;

import model.UserInfo;
import org.apache.ibatis.annotations.Param;

/**
 * Created by Administrator on 2016/9/22.
 */
public interface BookWormDao {
    UserInfo login(@Param("username") String username, @Param("password") String password);
    int register(@Param("username") String username,@Param("password") String password);
    UserInfo selectUserInfoByusername(String username);

}
model層程式碼

package model;

public class UserInfo {
    private Integer userid;

    private String username;

    private String password;

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }
}

service層裡面還包括一個實現,因為service採用的介面方法


package service;

import model.UserInfo;

/**
 * Created by Administrator on 2016/9/22.
 */
public interface BookWormSvc {

    UserInfo login(String username,String password);
    int register(String username,String password);
    UserInfo selectUserInfoByusername(String username);
}
package service.serviceImpl;

import dao.BookWormDao;
import model.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import service.BookWormSvc;

/**
 * Created by Administrator on 2016/9/22.
 */
@Service
public class BookWormSvcImpl implements BookWormSvc {
    @Autowired
    BookWormDao bookWormDao;
    @Override
    public UserInfo login(String username, String password) {
        return bookWormDao.login(username,password);
    }

    @Override
    public int register(String username, String password) {
        return bookWormDao.register(username,password);
    }

    @Override
    public UserInfo selectUserInfoByusername(String username) {
        return bookWormDao.selectUserInfoByusername(username);
    }
}
jsonutil工具

package until;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/9/19.
 */
public class JsonUtil {

    private final static ObjectMapper objectMapper = new ObjectMapper();

    private JsonUtil() {

    }

    public static ObjectMapper getInstance() {

        return objectMapper;
    }

    /**
     * javaBean,list,array convert to json string
     */
    public static String obj2json(Object obj) throws Exception {
        return objectMapper.writeValueAsString(obj);
    }

    /**
     * json string convert to javaBean
     */
    public static <T> T json2pojo(String jsonStr, Class<T> clazz)
            throws Exception {
        return objectMapper.readValue(jsonStr, clazz);
    }

    /**
     * json string convert to map
     */
    public static <T> Map<String, Object> json2map(String jsonStr)
            throws Exception {
        return objectMapper.readValue(jsonStr, Map.class);
    }

    /**
     * json string convert to map with javaBean
     */
    public static <T> Map<String, T> json2map(String jsonStr, Class<T> clazz)
            throws Exception {
        Map<String, Map<String, Object>> map = objectMapper.readValue(jsonStr,
                new TypeReference<Map<String, T>>() {
                });
        Map<String, T> result = new HashMap<String, T>();
        for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) {
            result.put(entry.getKey(), map2pojo(entry.getValue(), clazz));
        }
        return result;
    }

    /**
     * json array string convert to list with javaBean
     */
    public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz)
            throws Exception {
        List<Map<String, Object>> list = objectMapper.readValue(jsonArrayStr,
                new TypeReference<List<T>>() {
                });
        List<T> result = new ArrayList<T>();
        for (Map<String, Object> map : list) {
            result.add(map2pojo(map, clazz));
        }
        return result;
    }

    /**
     * map convert to javaBean
     */
    public static <T> T map2pojo(Map map, Class<T> clazz) {
        return objectMapper.convertValue(map, clazz);
    }
}
下面是配置檔案程式碼


jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/bookworm?useUnicode=true&amp;characterEncoding=utf-8
jdbc_username=root
jdbc_password=root
上面填好你自己的資料庫名稱和密碼

下面是log4j

### set log levels ###
#log4j.rootLogger = debug , stdout , D , E
log4j.rootLogger = e , stdout , d

###  output to the console ###
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
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

### Output to the log file ###
log4j.appender.d = org.apache.log4j.DailyRollingFileAppender
log4j.appender.d.File = ${springmvc.root}/WEB-INF/logs/log.log
log4j.appender.d.Append = true
log4j.appender.d.Threshold = DEBUG
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

### Save exception information to separate file ###
log4j.appender.e = org.apache.log4j.DailyRollingFileAppender
log4j.appender.e.File = ${springmvc.root}/WEB-INF/logs/error.log
log4j.appender.e.Append = true
log4j.appender.e.Threshold = ERROR
log4j.appender.e.layout = org.apache.log4j.PatternLayout
log4j.appender.e.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
mybatis-config

<?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>
    <!-- 名稱空間 -->
    <typeAliases>
        <typeAlias alias="UserInfo" type="model.UserInfo"/>
    </typeAliases>
    <!-- 對映map -->
    <mappers>
    </mappers>
</configuration>
spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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.xsd">

    <!-- 引入jdbc配置檔案 -->
    <context:property-placeholder location="classpath:conf/jdbc.properties"/>

    <!-- 掃描檔案(自動將servicec層注入) -->
    <context:component-scan base-package="service"/>

</beans>

spring-mvc.xml

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


    <mvc:annotation-driven />

    <!-- 掃描controller(controller層注入) -->
    <context:component-scan base-package="controller"/>

    <!-- 避免IE在ajax請求時,返回json出現下載 -->
    <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <!-- 對模型檢視新增前後綴 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/page/"
          p:suffix=".jsp"/>
</beans>

spring_mybatis

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.2.xsd">

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close" >
        <property name="driverClassName">
            <value>${jdbc_driverClassName}</value>
        </property>
        <property name="url">
            <value>${jdbc_url}</value>
        </property>
        <property name="username">
            <value>${jdbc_username}</value>
        </property>
        <property name="password">
            <value>${jdbc_password}</value>
        </property>
        <!-- 連線池最大使用連線數 -->
        <property name="maxActive">
            <value>20</value>
        </property>
        <!-- 初始化連線大小 -->
        <property name="initialSize">
            <value>1</value>
        </property>
        <!-- 獲取連線最大等待時間 -->
        <property name="maxWait">
            <value>60000</value>
        </property>
        <!-- 連線池最大空閒 -->
        <property name="maxIdle">
            <value>20</value>
        </property>
        <!-- 連線池最小空閒 -->
        <property name="minIdle">
            <value>3</value>
        </property>
        <!-- 自動清除無用連線 -->
        <property name="removeAbandoned">
            <value>true</value>
        </property>
        <!-- 清除無用連線的等待時間 -->
        <property name="removeAbandonedTimeout">
            <value>180</value>
        </property>
        <!-- 連線屬性 -->
        <property name="connectionProperties">
            <value>clientEncoding=UTF-8</value>
        </property>
    </bean>

    <!-- mybatis檔案配置,掃描所有mapper檔案 -->
    <bean id="sqlSessionFactory"
          class="org.mybatis.spring.SqlSessionFactoryBean"
          p:dataSource-ref="dataSource"
          p:configLocation="classpath:conf/mybatis-config.xml"
          p:mapperLocations="classpath:mapper/*.xml"/><!-- configLocation為mybatis屬性 mapperLocations為所有mapper-->

    <!-- spring與mybatis整合配置,掃描所有dao -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
          p:basePackage="dao"
          p:sqlSessionFactoryBeanName="sqlSessionFactory"/>

    <!-- 對資料來源進行事務管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
          p:dataSource-ref="dataSource"/>
</beans>
mapper
<?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="dao.BookWormDao">
    <select id="login" resultType="model.UserInfo">
        SELECT * from userinfo WHERE username=#{username, jdbcType=VARCHAR} AND password=#{password, jdbcType=VARCHAR}
    </select>

    <select id="selectUserInfoByusername" resultType="model.UserInfo" parameterType="String">
        SELECT * from userinfo where username=#{username}
    </select>

    <select id="selectUserInfoByuserid" resultType="model.UserInfo" parameterType="int">
        SELECT * from userinfo where userid=#{userid}
    </select>

    <insert id="register" >
        INSERT INTO userinfo (username,password) VALUES(#{username, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR})
    </insert>


</mapper>

 

 page裡存放的自己定義的jsp頁面


頁面使用的Bootstrap來建立的UI 其實它相當於一個css檔案,裡面幫你定義好了控制元件的樣式

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2016/9/22
  Time: 15:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<html>
<head>
    <title>書蟲登陸</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>

    <!-- 新 Bootstrap 核心 CSS 檔案 -->
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 檔案 -->
    <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
    <div class="row">
        <div class="page-header text-primary">
            <h1>歡迎登陸書蟲</h1>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6">
            <div class="row">
                <div class="page-header text-primary">
                    <h2>使用者登陸/註冊</h2>
                </div>
            </div>
            <br><br>
            <div class="row">
                <div class="input-group input-group-lg">
                    <span class="input-group-addon  glyphicon glyphicon-user " style="font-size: 20px">使用者名稱:</span>
                    <input type="text" class="form-control" placeholder="請輸入使用者名稱" id="username">
                </div>
            </div>
            <br><br>
            <div class="row">
                <div class="input-group input-group-lg">
                    <span class="input-group-addon  glyphicon glyphicon-asterisk " style="font-size: 20px">&nbsp;碼:</span>
                    <input type="password" class="form-control" placeholder="請輸入用密碼" id="password">
                </div>
                <br><br>
            </div>
            <div class="row">
                <button type="button" class="btn-lg btn-primary col-md-3 col-md-offset-1" id="login">登陸</button>
                <button type="button" class="btn-lg btn-primary col-md-3 col-md-offset-2" id="register">註冊</button>
            </div>
            <p class="text-danger" id="resultMessage"></p>
        </div>
    </div>
</div>

</body>
<script type="text/javascript" src="<%=path %>/page/js/login.js"></script>
</html>
login.js

/**
 * Created by Administrator on 2016/9/22.
 */
$(function () {

    $("#login").click(function () {

        var data = {
            username:$("#username").val(),
            password:$("#password").val()
        }
        if((data.username=="") || (data.password=="")){
            alert("使用者名稱或密碼不能為空");
            return ;
        }
        $.ajax({
            type:"post",
            url:getRootPath()+"/login.do",
            data:data,
            dataType:"json",
            success:function (resultJson) {
                if(resultJson.resultCode==1){
                    //登陸成功
                    window.location.href=getRootPath()+"/page/success.jsp";
                }else{//登入失敗
                    $("#resultMessage").html(resultJson.resultObject);
                }
            }
        });
    });
    $("#register").click(function () {
        window.location.href=getRootPath()+"/page/register.jsp";
    });
});


function getRootPath() {
//獲取當前網址,如: /meun.jsp
    var curWwwPath = window.document.location.href;
//獲取主機地址之後的目錄,如: proj/meun.jsp
    var pathName = window.document.location.pathname;
    var pos = curWwwPath.indexOf(pathName);
//獲取主機地址,如: http://localhost:8083
    var localhostPath = curWwwPath.substring(0, pos);
//獲取帶"/"的專案名,如:/proj
    var projectName = pathName.substring(0, pathName.substr(1).indexOf(
            '/') + 1);
    return (localhostPath + projectName);
}
success.jsp

<%@ page import="model.UserInfo" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2016/9/22
  Time: 17:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="model.UserInfo"%>
<%
    UserInfo user=(UserInfo) session.getAttribute("userinfo");
%>
<html>
<head>
    <title>success</title>
</head>
<body>
<h1>歡迎<%=user.getUsername() %>登陸</h1>
</body>
</html>

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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">
  <display-name>Archetype Created Web Application</display-name>

  <!-- 讀取spring配置檔案 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:conf/spring.xml;
      classpath:conf/spring_mybatis.xml
    </param-value>
  </context-param>
  <!-- 設計路徑變數值 -->
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>springmvc.root</param-value>
  </context-param>

  <!-- Spring字符集過濾器 -->
  <filter>
    <filter-name>SpringEncodingFilter</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SpringEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 日誌記錄 -->
  <context-param>
    <!-- 日誌配置檔案路徑 -->
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:conf/log4j.properties</param-value>
  </context-param>
  <context-param>
    <!-- 日誌頁面的重新整理間隔 -->
    <param-name>log4jRefreshInterval</param-name>
    <param-value>6000</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

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

  <!-- springMVC核心配置 -->
  <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:conf/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!--session超時定義  單位分鐘-->
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

  <welcome-file-list>
    <welcome-file>/page/login.jsp</welcome-file>
  </welcome-file-list>


</web-app>
程式碼我都貼出來了,大家最好看著自己敲一遍,並參考網上相關的資料,瞭解一下每塊的作用。我也只是個小白,大家商量著進步。