效果:
登陆页面:
登陆失败:
登陆成功(用户名:admin,密码:123):
环境搭建及准备
使用 Intellij Idea自带的maven工具进行创建,过程省略.
1.SpringMVC依赖
这里要做的事情很简单,因此只需要这几个依赖.依赖可以在maven中央仓库找到.
spring-web
spring-webmvc
javax.servlet-api
2.配置文件
springmvc.xml springmvc的配置文件,用于配置处理器映射器,处理器适配器,视图解析器,handler
web.xml web项目的配置文件,用于配置spring的DispatcherServlet
pom.xml 用于引入各种依赖,搭建框架
3.java实现类(controller)
LoginController.java handler,需要实现Controller接口,并重写handleRequest方法,返回ModelAndView对象
4.jsp文件(视图层)
login.jsp 登陆页面,内含表单
success.jsp 登陆成功页面
文件目录结构
整体过程
1.在login.jsp的form表单里填写信息,以特定的后缀作为提交请求
2.在web.xml里的DispatcherServlet拦截到这个请求,然后通过handlermapping找到对应的Handler
3.找到handler后执行
4.返回一个ModelAndView对象,这个对象里包含了我们在handler里操作的一些数据
5.ModelAndView对象被传到ViewResolver里进行解析成具体的视图
6.视图作为响应信息回传给用户
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spingmvc</groupId>
<artifactId>MVC</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--主页-->
<welcome-file-list>
<welcome-file>/pages/login.jsp</welcome-file>
</welcome-file-list>
<!--配置前端控制器DisptcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--如果不配置这个选项,默认加载classpath下面名为[servlet-name]-servlet.xml 的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--一般配置*.do,*.action 如果配置/ 需要过滤静态资源-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
springmvc.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!--配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<!--注册我们定义的controller并配置url与controller的对应关系
当拦截到login.do的请求时,处理器映射器就可以通过这个设置找到我们的LoginController并云心-->
<bean name="/login.do" class="com.zsb.controller.LoginController"></bean>
</beans>
LoginController.java
package com.zsb.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
/*通过request对象获得请求的数据*/
String username = httpServletRequest.getParameter("username");
String password = httpServletRequest.getParameter("password");
//创建MdoelAndView对象,用于返回
ModelAndView modelAndView = new ModelAndView();
//针对获得请求数据,进行相关操作,这里简化了从数据库取值的操作
if(username != null && password != null){
if(username.equals("admin") && password.equals("123")){
//向ModelAndView对象里添加loginFlag参数,用于jsp页面提取显示
modelAndView.addObject("loginFlag","登陆成功");
modelAndView.setViewName("/pages/success.jsp");
}else{
modelAndView.addObject("loginFlag","用户名或者密码错误");
modelAndView.setViewName("/pages/login.jsp");
}
}else{
modelAndView.addObject("loginFlag","用户名或者密码错误,登陆失败");
modelAndView.setViewName("/pages/login.jsp");
}
return modelAndView;
}
}
login.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<title>登陆页面</title>
</head>
<body>
<h1>登陆页面</h1>
<form action="<%=path%>/login.do" method = "post">
用户名: <input type = "text" name = "username"><br><br>
密码: <input type = "password" name = "password"><br><br>
<input type = "submit" value = "登陆"> ${loginFlag}
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆成功页面</title>
</head>
<body>
<h1>${loginFlag},进入主页</h1>
</body>
</html>