【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发2

简介: 【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发2

5、Entity层(User实体类)


package cn.kgc.entity;
/**
 * @author:BeiisBei
 * @date:2019/11/8
 * @aim:
 */
public class User {
    private String name;
    private String pwd;
    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }
    public User() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

6、改造Controller层


创建LoginServlet,实现以下业务功能:


跳转到系统登录页


实现登录/登出


改造View层


具体实现步骤如下:


1、跳转到系统登录页,login()方法实现跳转。

2、实现登录,doLogin()方法实现登录,登录成功则跳转到系统首页,否则跳转到登录页面。doLogin()方法主要进行用户信息匹配验证。


首先,通过方法入参(@RequestParam String name, @RequestParam String pwd) 来获取用户前台输入。


然后调用业务方法,将参数(name,pwd)传入后台,进行用户匹配,根据返回结果来判断是否登录成功。

package cn.kgc.servlet;
import cn.kgc.entity.User;
import cn.kgc.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
 * @author:BeiisBei
 * @date:2019/11/8
 * @aim:
 */
@Controller
@RequestMapping("/login")
public class LoginServlet {
    private Logger logger=Logger.getLogger(LoginServlet.class);
    @Resource
    private UserService userService;
    @RequestMapping("/login")
    public String login(String name,String pwd){
        logger.info("欢迎登录");
        return "login";
    }
    /**
     * 登录
     * @param name
     * @param pwd
     * @param request
     * @param session
     * @return
     */
    @RequestMapping("/doLogin")
    public ModelAndView doLogin(@RequestParam String name,
                                @RequestParam String pwd,
                                HttpServletRequest request,
                                HttpSession session){
        //调用service方法,进行用户匹配
        User user=userService.login(name,pwd);
        ModelAndView mav=new ModelAndView();
        logger.info(request.getParameter("name"));
        logger.info(user);
        if(null==user.getName()){     // 登录不成功
            logger.info("用户名或密码不正确");
            session.setAttribute("errMsg","用户名或密码不正确");
            mav.setViewName("login");
            throw new RuntimeException("用户名或密码不正确");
        }else {
            logger.info("登录成功");
            session.setAttribute("user",user);
            mav.addObject("user",user);
            mav.setViewName("redirect:../jsp/loginSuc.jsp");
        }
        return mav;
    }
    /**
     * 登出
     * @param name
     * @param session
     * @return
     */
    @RequestMapping("/logout")
    public String logout(@RequestParam String name,HttpSession session){
        session.invalidate();
        return "redirect:login";
    }
    /**
     * 局部异常
     * @param session
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(value = {RuntimeException.class})
    public String errHandler(HttpSession session,RuntimeException e,HttpServletRequest request){
        session.invalidate();
        logger.info(e.getMessage());
        request.setAttribute("e",e);
        return "loginErr";
    }
}


指示符 —“redirect:” 转发


指示符 —“forward:” 重定向


1.登录成功后的当前用户信息需保存在session中


2.若登录失败,除了页面跳转到登陆页,还需在页面上进行错误提示


3.Servlet API对象作为处理方法的入参


1.HttpSession


2.HttpServletRequest


4.页面上使用EL表达式显示相应信息


异常处理


HandlerExceptionResolver


resolveException()


局部异常处理


仅能处理指定Controller中的异常


@ExceptionHandler


全局异常处理


对所有异常进行统一处理


配置SimpleMappingExceptionResolver


发生异常时使用对应的视图报告异常


20191110174551939.png


7、改造View层


1、login.jsp

<%--
  Created by IntelliJ IDEA.
  User: mu_bai
  Date: 2019/11/8
  Time: 14:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
</head>
<body>
<form action="/login/doLogin" method="post">
    <p><input type="text" name="name"/></p>
    <p><input type="password" name="pwd"/></p>
    <p><input type="submit"/></p>
</form>
</body>
</html>


2、loginErr.jsp

<%--
  Created by IntelliJ IDEA.
  User: mu_bai
  Date: 2019/11/8
  Time: 14:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登入失败页面</title>
</head>
<body>
<h1>登入失败</h1>
<h1>${e.message}</h1>
<%--下面这个方法,errMsg在页面上获取不到,显示为NULL,标记下,解决了再更新代码--%>
<%--<%
    Object obj=request.getParameter("e");
    RuntimeException errMsg=null;
    if(obj!=null){
       errMsg=(RuntimeException) obj;
   }
%>
<h1><%=errMsg%></h1>--%>
</body>
</html>


3、loginSuc.jsp

<%@ page import="cn.kgc.entity.User" %><%--
  Created by IntelliJ IDEA.
  User: mu_bai
  Date: 2019/11/8
  Time: 14:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登入成功页面</title>
</head>
<%  Object obj=session.getAttribute("user");
    User user=null;
    String name=null;
    if(obj!=null){
        user=(User)obj;
        name=user.getName();
    }else {
        response.sendRedirect("/login/login");
    }
%>
<body>
<h1>登录成功了</h1>
<h3><%=name==null? "" : "欢迎你:"+name %></h3>
<form method="post" action="/login/logout">
    <input type="text" name="name" value="<%=name==null? "": name %>" readonly>
    <input type="submit" value="登出">
</form>
</body>
</html>


8、结果演示


1、登录界面


20191110174858106.png


2、登录成功界面(点击登出,会退回到登录界面)


20191110174949699.png


3、登录失败界面(会打印出我们设置的异常)


20191110175319469.png

目录
相关文章
|
1月前
|
XML 安全 Java
|
2月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
103 0
|
13天前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
1月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
1月前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
90 13
|
1月前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
58 5
|
1月前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
81 8
|
2月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
141 6
|
2月前
|
Java 数据库连接 数据库
不可不知道的Spring 框架七大模块
Spring框架是一个全面的Java企业级应用开发框架,其核心容器模块为其他模块提供基础支持,包括Beans、Core、Context和SpEL四大子模块;数据访问及集成模块支持数据库操作,涵盖JDBC、ORM、OXM、JMS和Transactions;Web模块则专注于Web应用,提供Servlet、WebSocket等功能;此外,还包括AOP、Aspects、Instrumentation、Messaging和Test等辅助模块,共同构建强大的企业级应用解决方案。
140 2
|
2月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
42 0