新手初学SSM框架 (Maven 整合)

初学SSM框架,用Maven整合,在网上找到一个博文,按照文章搭建了一个项目,然后自己理解并修改。文章链接如下

https://blog.csdn.net/bigname22/article/details/79380238

由于上述博文的项目较简单,自己完善了部分功能,同时对页面的跳转和数据库的查询做了笔记。在完善和修改中加深理解。对简单项目有了一定了解后,再看实际开发的项目,有很大的帮助,先简后难,适合初次学习。以下为自己的理解和笔记,在原博文的项目基础下修改。建议先下载上述博文的代码。

简述:在框架搭好的基础上,实现一个用户登录功能,查询数据库并比对数据,输出相应的提示。

1、新增功能:页面登录 >> 表单数据提交 >> 对比数据库 >> 判断登录是否成功

1.1登录页面

1.2 数据库用户信息表

1.3 账号密码匹配成功,登陆成功

1.4 账号密码匹配错误,登录失败

2、功能实现

我的项目目录(与参考博文的项目一样)

在参考博文的项目代码下做以下更改:

2.1、index.jsp 改为以下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<body>

<h2>Hello World!</h2>

<form action = "${pageContext.request.contextPath}/user/addUser1" method="post" accept-charset="utf-8">

<p class="userName">

<input type="text" name="name" value="" placeholder="Name">

</p>

<p class="userPwd">

<input type="password" name="password" value="" placeholder="Password">

</p>

<input type="submit" value="sunmit">

</form>

</body>

</html>

2.2、新增 log_success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Login Success</title>

</head>

<body>

Login Success,Welcome!

</body>

</html>

2.3、新增log_fail.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Login Failure</title>

</head>

<body>

Login Failure: The target account name is incorrect.

</body>

</html>

2.4、MemberFunctionImp.java 改动如下

package com.bigname.demo03.function;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.bigname.common.StringUtil;

import com.bigname.demo03.core.Member;

import com.bigname.demo03.dao.MemberDao;

@Service

public class MemberFunctionImpl implements IMemberFunction {

@Autowired

MemberDao mDao;

public Member login(String name, String password) throws Exception {

// System.out.println(name + password);

if (StringUtil.isNullOrZero(name)) {

System.out.println("登录名不能为空");

return null;

}

if (StringUtil.isNullOrZero(password)) {

System.out.println("密码不能为空");

return null;

}

Member member = mDao.selectMemberByName(name);

if (member == null)

System.out.println("登录名错误");

if (member != null&&member.getName().equals(name)&&!password.equals(member.getPassword())) {

System.out.println("密码错误");

return null;

}

return member;

}

}

2.5、LoginController.java 改动如下

package com.bigname.demo03.controller;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.http.HttpRequest;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import com.bigname.demo03.core.Member;

import com.bigname.demo03.function.IMemberFunction;

import com.bigname.demo03.function.MemberFunctionImpl;

@Controller

public class LoginController{

@Autowired

//@Qualifier("MemberFunctionImpl")

IMemberFunction iMemberFunc;

//此处代码可理解为但不等同于:IMemberFunction iMemberFunc=new MemberFunctionImpl();

@RequestMapping(value = "/user/addUser1", method = RequestMethod.POST)

public String addUser1(String name,String password) {

System.out.println("loginName is:"+name);

System.out.println("loginPassword is:"+password);

try {

Member member = iMemberFunc.login(name, password);

if(member == null){

System.out.println("登录失败");

return "log_fail";

}else {

System.out.println("登录成功");

return "log_success";

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println(e.getMessage());

System.out.println("登录异常");

}

return null;

}

}

2.6、web.xml 文件最后的url-pattern 由 *.do 改为 /

<servlet-mapping>

<servlet-name>spring-mvc</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

上述不改动也可以,但是index也相应变动,如下

2.7、修改数据库连接设置(设置正确mysql登录信息,否则无法连接数据库)

<!-- 配置c3p0 -->

<!-- 连接池 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="com.mysql.jdbc.Driver"></property>

<property name="jdbcUrl" value="jdbc:mysql://localhost/test?characterEncoding=utf8&amp;serverTimezone=UTC"></property>

<property name="user" value="root"></property>

<property name="password" value="root"></property>

<property name="minPoolSize" value="1"></property>

<property name="maxPoolSize" value="5"></property>

<property name="initialPoolSize" value="1"></property>

<property name="acquireIncrement" value="1"></property>

</bean>

3 流程理解 :

用户数据库中包含多个用户信息,而每个用户包含多个信息项。通过用户名和密码这两个信息项,检索相关的用户,并返回该用户的所有信息(返回一个用户对象,即登录成功后可查询该用户对象所有信息)。根据返回的结果做出反应(登录成功或失败,并给出提示)

依据上述理解,理解程序执行步骤。

1、登录页面上传表单数据。

2、控制层获取上传的表单数据,查询数据库,比对数据,输出相应的提示。下面分步骤说明:

2.1 先获取表单的数据,后台打印输出,方便观察。

2.2、根据表单提交的用户名和密码,查询数据库。如下图,该语句可以得到一个用户实例(member),如果用户名和密码不正确,则为null

接下来解析该语句

该语句调用了业务实现类iMemberFunc 的 login() 方法,跳到该方法

这一层属于业务层,即业务接口及其实现类。可以看到该方法首先确认了用户名和密码是否为空。然后调用了Member的 selectMemberByName() 方法,跳到该方法

这一层属于数据层,这个方法的作用是以用户名为查询条件,查询数据库。

在 MemberDaoMapper.xml 中设置查询语句,可以看到 id 与 上述方法一致,返回类型为Member,

要查询数据库,还要如下的设置。在spring-content中设置数据库的路径,登录名和密码。这样就可以登录你自己的数据库了

确保以上数据库设置正确且数据库开启,就可以返回查询结果,如果有匹配的信息就返回一个用户对象(Member),可通过该对象的getter()方法获取用户的所有信息,可以理解为通过账号密码登录商城,登录成功后,可以从数据库获取你的订单,地址,账户余额等信息。

用户类(Member)的各种私有变量

查询结束后,就按原路返回结果。 数据层 --> 业务层 --> 控制层 。

首先数据层得到查询结果,即一个Member 对象。接下来是业务层。

然后业务层获取 数据层的查询结果。接下来是控制层。

最后,就可以根据查询结果在控制层进行控制,做出相应的提示。

项目源码后续补上,供参考。

以上为自己理解和笔记,初次学习,如有纰漏,请指出!

猜你喜欢

转载自blog.csdn.net/Henry_Lin_Wind/article/details/81083653