一、说明
之前写过一个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,如图所示:
然后填写group id和artifact id,如图所示:
一路next,然后填写project name,如图所示:
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、登录界面:
2、输错密码:
3、登录成功: