SpringMVC学习(二)--实现简单用户登录
2018-02-04 23:46
281 查看
1.搭建框架
创建Maven项目并配置pom.xml:
2.配置web.xml前端控制器[有两种常见配置,*.do或者/
3.SpringMVC应用中的父子容器的概念
在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。
子容器中一般配置和web应用相关的组件,例如ViewResolver视图解析器、控制器等。父容器中配置和web应用不直接相关的组件,例如连接池、SessionFactory、业务Bean等.
4.添加Servlet相关的核心配置
5.定义控制器
旗标接口实现类和接口:
实体类:
前台页面:
index.jsp:
login.jsp:
show.jsp:
效果图:
![](https://img-blog.csdn.net/20180204234100715?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVXBvbno=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180204234159136?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVXBvbno=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180204234335524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVXBvbno=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180204234407667?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVXBvbno=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180204234513824?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVXBvbno=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
创建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>com.lq</groupId> <artifactId>Springmvc01</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <!-- 设置UTF-8编码格式 --> <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 编译时的编码 --> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <!-- 自定义常量,在依赖中可以通过${名字}的方式进行引用 --> <spring.version>4.3.14.RELEASE</spring.version> </properties> <dependencies> <!-- springmvc配置 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- servlet配置 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- 流程处理标签配置 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- spring相关配置 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- hibernate配置 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.1.12.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.2.Final</version> </dependency> <!-- 连接池配置 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- 单元测试配置 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <!-- jdk版本配置 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
2.配置web.xml前端控制器[有两种常见配置,*.do或者/
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Springmvc01</display-name> <context-param> <param-name>appName</param-name> <param-value>Springmvc01-Hibernate-用户登录</param-value> </context-param> <!-- 整合Spring和 web应用,这里负责加载父容器,父容器对应的配置文件是classpath:applicationContext.xml --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:app*.xml</param-value> </context-param> <!-- 过滤器处理中文乱码 --> <!--提交数据时如果需要传送中文,请使用post提交--> <filter> <filter-name>encoder</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>encoder</filter-name> <servlet-name>lq</servlet-name> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置前端控制器,它负责加载子容器,子容器配置文件是/WEB-INF/lq-servlet.xml --> <servlet> <servlet-name>lq</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 随系统启动 --> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>lq</servlet-name> <url-pattern&g 11469 t;*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
3.SpringMVC应用中的父子容器的概念
在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。
子容器中一般配置和web应用相关的组件,例如ViewResolver视图解析器、控制器等。父容器中配置和web应用不直接相关的组件,例如连接池、SessionFactory、业务Bean等.
4.添加Servlet相关的核心配置
惯例:位于WEB-INF目录下,名称为<servlet的名称>-servlet.xml 例如/WEB-INF/lq-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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 打开mvc应用中的注解支持 --> <mvc:annotation-driven validator="valid1"/> <!-- 配置视图解析器,将逻辑地址名转换为物理地址,其中prefix用于设置前缀,suffix用于设置后缀,viewClass用于设置视图类型。例如 返回视图名称为abc,则对应的物理地址为“前缀”+逻辑地址名+"后缀"构成.ViewClass允许用户定义各种视图类型,例如返回pdf、Excel等 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/content/" p:suffix=".jsp" p:viewClass="org.springframework.web.servlet.view.JstlView"/> <!-- 启用Hinbernate提供的校验器 --> <bean id="valid1" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property> </bean> <!-- 定义控制器 --> <context:component-scan base-package="com.lq.action"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>
5.定义控制器
package com.lq.action; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.lq.action.group.UserGroup; import com.lq.entity.UserBean; @Controller//用于标识是处理器类 @RequestMapping("/")// 定义在类上则类似于Struts2中的名空间,给类中的所有方法添加了一个名空间 public class UserController { /* @RequestMapping(value = "login", method = RequestMethod.GET) public ModelAndView login()throws Exception{ ModelAndView mv = new ModelAndView(); UserBean user = new UserBean(); mv.addObject("user", user); mv.setViewName("user/login"); return mv; ModelAndView: 简单理解它是将后台返回的数据传递给View层,同时包含一个要访问的View层的URL地址,当控制器处理完请求后,通常控制器会将包含视图名称以及一些模型属性的ModelAndView对象返回给DispatcherServlet。因此,在控制器中会构造一个ModelAndView对象 ModelAndView作用 1)设置转向地址 2)将底层获取的数据进行存储(或者封装) 3)最后将数据传递给View ModelAndView的用法: 先创建ModelAndView对象,再通过它的方法去设置数据与转发的视图名 ModelAndView modelAndView = new ModelAndView();构建对象 modelAndView.setViewName("m06"); 设置逻辑视图名 modelAndView.addObject("message", "Hello World, Hello Kitty");添加需要显示的数据 */ //映射login()方法到get请求的login.do上 @RequestMapping(value = "login", method = RequestMethod.GET) public String login(Model model) throws Exception { UserBean user = new UserBean(); model.addAttribute("user", user); return "user/login"; } /* * 在Controller方法上添加注解@Validated,启动服务器端数据校验 * 通过分组区分不同方法的数据校验和定义校验执行顺序(前面的校验没有通过则后续校验不执行) * 实现方法:采用旗标接口实现,定义如下接口和类 @GroupSequence({UserFirstGroup.class,UserSecondGroup.class})设置顺序 public interface UserGroup { } public Class UserFirstGroup { } public Class UserSecondGroup{ } @NotEmpty(message="用户名称不能为空!",groups=UserFirstGroup.class) @Length(min=6,max=20,message="用户名称只能在6到20个字符之间!",groups=UserSecondGroup.class) private String username; */ @RequestMapping(value="login" ,method=RequestMethod.POST) public String login(@Validated(UserGroup.class)@ModelAttribute("user") UserBean user, Errors errors) { System.out.println(user); if (errors.hasErrors()) return "user/login"; return "show"; } }
旗标接口实现类和接口:
package com.lq.action.group; import javax.validation.GroupSequence; @GroupSequence({UserFirstGroup.class,UserSecondGroup.class})//设置顺序 public interface UserGroup {} package com.lq.action.group; public class UserFirstGroup {} package com.lq.action.group; public class UserSecondGroup {}
实体类:
package com.lq.entity; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Transient; import javax.validation.constraints.NotEmpty; import org.hibernate.validator.constraints.Length; import com.lq.action.group.UserFirstGroup; import com.lq.action.group.UserSecondGroup; @Entity(name = "t_users") public class UserBean implements java.io.Serializable { private static final long serialVersionUID = 5385542861402736914L; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "role_id", nullable = false) private RoleBean role=new RoleBean(); @NotEmpty(message="用户名称不能为空!",groups=UserFirstGroup.class) @Length(min=6,max=10,message="用户名称只能在6到10个字符之间",groups=UserSecondGroup.class) @Column(name = "username", unique = true, nullable = false) private String username; @NotEmpty(message="用户口令不能为空!",groups=UserFirstGroup.class) @Column(name = "password", nullable = false, length = 20) private String password; @Transient private String repassword; @Column(columnDefinition="timestamp default current_timestamp") private Date birth; @Column(columnDefinition="boolean default 1") private Boolean sex; public UserBean() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public RoleBean getRoleBean() { return this.role; } public void setRoleBean(RoleBean role) { this.role = role; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Boolean getSex() { return this.sex; } public void setSex(Boolean sex) { this.sex = sex; } public String getRepassword() { return repassword; } public void setRepassword(String repassword) { this.repassword = repassword; } @Override public String toString() { return "UserBean [username=" + username + ", password=" + password + "]"; } }
前台页面:
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>${initParam.appName }</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <a href="login.do">登录系统</a> </body> </html>
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>${initParam.appName }</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <form:form modelAttribute="user" > <table> <tr> <td><form:label path="username">用户名称:</form:label></td> <td><form:input path="username" cssStyle="width=200px"/><form:errors path="username"/></td> </tr> <tr> <td><form:label path="password">用户口令:</form:label></td> <td><form:password path="password" cssStyle="width=200px"/><form:errors path="password"/></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登录系统"> <input type="reset" value="重置数据"> </td> </tr> </table> </form:form> </body> </html>
show.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>${initParam.appName }</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> 登陆成功... </body> </html>
效果图:
相关文章推荐
- Django框架学习笔记(10.基于ORM实现简单的用户登录)
- JFinal学习笔记(二) 实现简单的用户登录
- Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
- Silverlight学习笔记一(理解一下机制,使用一下布局,实现一个简单的用户登录)
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- 学习python——python实现简单的用户登录
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- 用dialog工具实现简单的登录用户验证
- JSP+JDBC实现简单用户登录模块【Deprecated】
- struts2实现登录用户的简单的权限设置
- python实现的简单用户注册登录系统
- struts1学习之--3、实现简单的登录功能
- struts2 简单实现用户登录