一、说明

之前写过一个spring mvc的登录例子,不过是基于sts的,而且不是maven工程,有点落后了(原文地址:Spring MVC Web简单入门实例)。这里放上来一个基于IDEA+maven的例子,更新一下。工作上的工程基本上都可以在这个模板基础上扩展(后面会陆续加入日志、权限管理、数据库访问、前后端分离及基于dubbo的分布式的解决方案)。

二、准备工作

        首先还是开发环境的搭建,包括:jdk1.7、tomcat7、maven3、IDEA,这里就不再赘述了,网上有很多教程的。

三、步骤

1、新建maven工程

选择File->new->project,在弹出的界面选择maven工程,勾选"create from archtype",点击next,如图所示:

spring mvc实现用户登录动态验证码 springmvc登录实例_入门


然后填写group id和artifact id,如图所示:

spring mvc实现用户登录动态验证码 springmvc登录实例_入门_02


一路next,然后填写project name,如图所示:

spring mvc实现用户登录动态验证码 springmvc登录实例_spring_03


2、添加pom依赖

        添加servlet、spring相关的pom依赖,具体见工程源码。添加完依赖后,maven会从仓库里面添加依赖的jar,不用再手动添加jar包了,十分方便。

3、web.xml配置

web.xml配置里面最重要的部分就是spring相关的配置,比如启动参数以及spring mvc的注入。

<!--启动参数-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

<!--servlet配置,加载spring mvc配置-->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

其中,applicationContext.xml和applicationContext-springmvc.xml均放在resource目录下。

4、applicationContext.xml配置

applicationContext.xml可以作为总的配置,如果有多个别的xml配置文件,都可以在applicationContext.xml中进行引入,例如:

<import resource="applicationContext-profile.xml" />
	<import resource="applicationContext-security.xml"/>
	<import resource="applicationContext-service.xml"/>
	<import resource="applicationContext-rocketmq.xml"/>
	<import resource="dataaccess.xml"/>

因为我们的例子很简单,所以里面几乎没什么内容。

5、applicationContext-springmvc.xml

applicationContext-springmvc.xml才是spring mvc相关的配置,主要包括controller的自动发现,消息转换,以及view解析器等等。

<!--配置自动扫描bean-->
    <context:component-scan base-package="com.xxx.demo" />

    <mvc:annotation-driven>
        <mvc:message-converters>
            <!--返回字符串时转换,防止中文乱码-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <!--返回JSON时转换-->
            <bean id="mappingJacksonHttpMessageConverter"
                  class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>applicaton/json;charset=UTF-8</value>
                        <value>application/x-www-form-urlencoded;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--激活自动代理-->
    <aop:aspectj-autoproxy/>

    <!--静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理-->
    <mvc:default-servlet-handler/>

    <!--view解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

6、jsp页面及controller

       jsp页面很简单,就一个登录界面,登录失败则显示失败信息,成功则跳转到欢迎页面,大家可以看源码,这里就不放上来了;然后在controller里面处理请求,逻辑很简单,直接上代码:

package com.xxx.demo.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletResponse;

/**
 * Created by gameloft9 on 2017/11/27.
 */
@Controller
public class LoginController {

    public static final String USER_NAME="gameloft9";

    public static final String PWD = "123456";

    /**
     * 登录页面入口
     * */
    @RequestMapping(value = "/index.do", method = RequestMethod.GET)
    public String index(Model model, HttpServletResponse response){
       return "login";
    }

    /**
     * 登录请求
     * */
    @RequestMapping(value = "/login.do", method = RequestMethod.POST)
    public String login(Model model,String name,String pwd){
        if(USER_NAME.equalsIgnoreCase(name)&&PWD.equals(pwd)){
            model.addAttribute("name",name);
            return "home";
        }

        model.addAttribute("errInfo","用户名或密码错误!");
        return "login";
    }
}

四、运行结果

1、登录界面:

spring mvc实现用户登录动态验证码 springmvc登录实例_spring mvc_04


2、输错密码:

spring mvc实现用户登录动态验证码 springmvc登录实例_spring_05


3、登录成功:


spring mvc实现用户登录动态验证码 springmvc登录实例_spring mvc_06