SpringMvc最复杂的登录

SpringMvc最复杂的登录

效果比较单调,没有加样式,图片在下面:

在这里插入图片描述
输入数据库存的数据,点击登录,效果如下:

在这里插入图片描述

当账号,或密码输入的不是数据库的信息,则会有一个失败页面

在这里插入图片描述

项目实现过程如下:

1.新建一个maven工程,在pom配置里面加入一些依赖,代码如下:

<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>com.ssti</groupId>
  <artifactId>springmvc-login</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>3.2.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.36</version>
		</dependency>
  </dependencies>
</project>

等依赖下载完之后,创建一个spring配置文件

2.名字为spring-mvc.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:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	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/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">


</beans>

3.然后我们在webapp的WEB-INF目录下找到web.xml的文件,添加一段代码,代码如下:

 </welcome-file-list>
    <!-- spring的前段控制器  -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 初始化参数 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!-- 启动时第一个加载 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

这段代码的意思是启动工程的时候第一个加载spring-mvc.xml这个配置文件,请求映射的地址都是带.do的

4.接着编写前端页面在src-main-webapp的目录下建立三个前端页面

分别是login.html,success.html,failed.html

页面的话就简单一点,不加太多的样式了

login.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="userCheck.do" method="post">
用户:<input type="text" name="username"><br>
<p></p>
密码:<input type="password" name="password"><br>
<p></p>
<input type="submit" value="登录">
</form>
</\body>
</html>

success.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>成功了!!!</h1>
</body>
</html>

failed.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>失败了!!!</h1>
</body
</html>

编写完前端代码之后,我们来写后端代码,先建立如下的包:com.ssti下的controller,dao,entity,serivice,截图如下:

在这里插入图片描述

controller是负责和前端交互的

dao负责处理数据的(这里是连接数据库)

entity负责管理实体类的(这里是创建用户类)

service负责业务逻辑的类

5.要做一个用户登录的功能,我们先建立一个数据库,往里面放几条数据

这里用的是navicat for mysql

在这里插入图片描述

6.建立了数据之后,需要有一个对应的实体类,entity包下建立一个user的java类,里面的成员变量和数据库的字段要相对应,代码如下:

package com.ssti.entity;

public class User {
	//实体类
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

7.我们还需要有一个类来处理连接数据库的功能;

我们在dao里建立一个LoginDao的接口,他需要实现一个UserCheck的方法,代码如下:

package com.ssti.dao;

import java.sql.SQLException;

import com.ssti.entity.User;

public interface LoginDao {
	public boolean userCheck(User user) throws SQLException;
}

在dao里建立一个接口实现类的包,名字为impl,在impl下,建立一个LoginDaoImpl的实现类实现我们定义的LoginDao接口

截图如下:
在这里插入图片描述

我们通过在sprng-mvc.xml加上一个配置连接池的一个bean,使用一个配置文件来写数据库连接信息,用spring 的读取配置文件内容,实现依赖注入,代码如下:

<?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:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	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/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

<!-- 用sping读取properties文件的内容 -->
	<util:properties id="ldy_db" location="classpath:db/db.properties" />
	<!-- 配置连接池 -->
	<bean id="ldy_ds" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="#{ldy_db.driverClassName}" />
		<property name="url" value="#{ldy_db.url}" />
		<property name="username" value="#{ldy_db.username}" />
		<property name="password" value="#{ldy_db.password}" />
	</bean>
</beans>

上面的代码中的bean中,使用了依赖注入,将读取配置文件的信息注入到这个bean里面

我们在resources的目录下,新建一个名字叫db的文件夹,里面有一个db.properties的配置文件,内容如下:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssti
username=root
password=

这四行代码是根据你自己的数据库来的,第一行不用改,第二行只需要改3306/后面的ssti,这个是你连接的是哪一个数据库,下面两个是mysql的用户名和密码。

完成注入之后

我们在LoginDaoImpl这个类里面加上一个构造函数,主要是看一下有没有被容器加载到,

再加上一个userCheck的方法,实现数据库的连接,代码如下:

package com.ssti.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.stereotype.Repository;

import com.ssti.dao.LoginDao;
import com.ssti.entity.User;

@Repository
//和Component,Controller,Service的作用差不多,标注是容器的组件,就能用容器的方法
public class LoginDaoImpl implements LoginDao {
	@Resource(name = "ldy_ds")
    //使用依赖注入,将我们在spring配置文件中配置的bean,注入到这个私有变量ds中。
	private DataSource ds;
	
    //
	public LoginDaoImpl() {
		System.out.println("LoginDaoImpl....");
	}

	public boolean userCheck(User user) throws SQLException {
		String sql = "select * from user where username='" + user.getUsername() + "'" + "and password='"
				+ user.getPassword() + "'";
        //定义一个sql查询语句
		System.out.println(sql);
        //打印sql语句,以便于项目出错时来看看错误是不是语句错误
		Connection conn = ds.getConnection();
        //在连接池在得到连接返回给conn
		PreparedStatement pstmt = conn.prepareStatement(sql);
        //conn预编译执行sql语句将结果给PreparedStatement,
		ResultSet rs = pstmt.executeQuery();
        //pstmt执行数据库查询,将查询到的结果返回一个结果集
		if (rs.next()) {
            //结果集中有下一条,也就是说账号密码正确,那么返回true
			return true;
		} else {//否则返回false
			return false;
		}
	}

}

8.写完之后还需要Service和后端进行交互

需要在service包下建立一个接口,接口名字为LoginService,创建一个包名为impl,接口实现类

代码如下:

package com.ssti.service;

import java.sql.SQLException;

import com.ssti.entity.User;

public interface LoginService {
	public boolean loginCheck(User user) throws SQLException;
}

在impl下建立一个LoginServiceImpl的实现类

package com.ssti.service.impl;

import java.sql.SQLException;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.ssti.dao.LoginDao;
import com.ssti.entity.User;
import com.ssti.service.LoginService;
@Service
public class LoginServiceImpl implements LoginService{
	@Resource(name="loginDaoImpl")
	private LoginDao logindao;
	
	public LoginServiceImpl(){
		System.out.println("LoginServiceImpl....");
	}
	public boolean loginCheck(User user) throws SQLException {
		if(logindao.userCheck(user)){
			return true;
		}else{
			return false;
		}
	}

}

关于LoginServiceImpl实现类的解析,将loginDao的实现类注入给LoginDao这个接口,有一个LoginCheck的方法,如果logindao的userCheck方法为真的话返回true,否则返回false;

9.接着在我们的controller类下面创建一个LoginController的类代码如下:

package com.ssti.controller;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

//import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//import com.ssti.dao.DB;
import com.ssti.entity.User;
import com.ssti.service.LoginService;


@Controller
public class LoginController {
	@Resource(name="loginServiceImpl")
	private LoginService loginservice;

	
	public LoginController() throws SQLException {
//		System.out.println(ds.getConnection());
		System.out.println("LoginController......");
	}
	

	@RequestMapping("/tologin.do")
	public String toLogin(){
		return "login";
	}

	
	
	@RequestMapping("/userCheck.do")
	public String userCheck(User user) throws SQLException{
		if(loginservice.loginCheck(user)==true){
			return "success";
		}else{
			return "failed";
		}
		
	
	}
	
}

类里面需要有一个方法tologin,usercheck,当前端提交的时候,RequestMapping检测请求的地址,执行相应的方法,这里需要在Spring-mvc.xml上面加一个视图解析器,代码如下:

<bean id="viewResoler"
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/"></property>
	<property name="suffix" value=".html"></property>
</bean>

InternalResourceViewResolver的作用是将逻辑视图名解析为一个路径,它有几个属性,上面代码用了两个,一个是predix,一个是suffix,分别是前缀和后缀的意思,返回的结果加上,前缀有带斜杠,或者后缀是html,比如上面controller返回的是success,将视图解析程一个路径,加上后缀html,就能返回success.html,也就是我们前面做的登录成功之后的界面。

在容器中加载所有的组件需要一个组件扫描仪,在Spring-mvc.xml下添加代码:

<context:component-scan base-package="com.ssti"></context:component-scan>

要让项目运行之后就是登录界面,那么需要在web.xml改一个东西,代码如下:

 <welcome-file-list>
    <welcome-file>tologin.do</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

工程的截图如下:

在这里插入图片描述
hello和index的页面不用管的

spring-mvc.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:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	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/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

<!-- 用sping读取properties文件的内容 -->
	<util:properties id="ldy_db" location="classpath:db/db.properties" />
	<!-- 配置连接池 -->
	<bean id="ldy_ds" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="#{ldy_db.driverClassName}" />
		<property name="url" value="#{ldy_db.url}" />
		<property name="username" value="#{ldy_db.username}" />
		<property name="password" value="#{ldy_db.password}" />
	</bean>
<context:component-scan base-package="com.ssti"></context:component-scan>
<!-- 视图解析器 -->
	<bean id="viewResoler"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/"></property>
		<property name="suffix" value=".html"></property>
	</bean>
</beans>

LoginController代码如下:

package com.ssti.controller;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

//import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//import com.ssti.dao.DB;
import com.ssti.entity.User;
import com.ssti.service.LoginService;


@Controller
public class LoginController {
	@Resource(name="loginServiceImpl")
	private LoginService loginservice;

	
	public LoginController() throws SQLException {
//		System.out.println(ds.getConnection());
		System.out.println("LoginController......");
	}
	

	@RequestMapping("/tologin.do")
	public String toLogin(){
		return "login";
	}

	
	
	@RequestMapping("/userCheck.do")
	public String userCheck(User user) throws SQLException{
		if(loginservice.loginCheck(user)==true){
			return "success";
		}else{
			return "failed";
		}
		
	
	}
	
}

项目启动到结束的解析

首先运行工程springmvc-login

在这里插入图片描述

项目启动首先加载web.xml,在web.xml里面加载了Spring-mvc.xml,Spring-mvc通过扫描仪将所有在com.ssti包下的类全扫描了,添加到容器里面,所以在console能看到的结果是

在这里插入图片描述

不过要在类里面添加注解,才能加载到。

跳转到tologin.do,也就是loginController类下边的tologin方法,返回到login.html页面.

login.html页面提交到userCheck.do里,也就是loginController类下边的userCheck的方法,将实体类传递给这个方法,如果LoginService中的LoginCheck(User)是真的,也就是LoginCheck方法里的loginservice.loginCheck,也就是loginCheck的logindao的userCheck(),也就是这个类里面的集合有数据的话,就返回成功页面。否则就返回失败页面.

完成这个功能很容易出现的问题,总结有以下几点

1.spring-mvc.xml里面的问题,建立的包一定要在一个父包里面,比如我建立的com.ssti,不然扫描不到这个组件,初始化不到。

2.连接数据库的问题,pom文件需要导入相关依赖,需要在Spring-mvc.xml配置连接池的属性,数据库一定要和自己定义的数据库对应。

3.依赖注入的时候,名字要对应,最好的话复制,避免出错

今天关于SpringMvc的登陆分享就到这了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值