一、搭建SpringMVC+Spring+JDBC框架

1、加入Spring、SpringMVC、数据库驱动等相关jar文件

首先将database.properties文件复制到源文件夹下;

2、Spring配置文件

其次创建applicationContext-jdbc.xml文件,整合jdbc的配置文件;导入头,

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:context="http://www.springframework.org/schema/context"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.2.xsd
  12. http://www.springframework.org/schema/tx
  13. http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  14. http://www.springframework.org/schema/aop
  15. http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
  16. <!-- 扫描包内的注解 让注解生效 扫描dao层和service层-->
  17. <context:component-scan base-package="cn.smbms"></context:component-scan>
  18. </beans>

3、配置web.xml

配置web.xml文件;引入相关Spring的配置文件并使用监听器启动Spring

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringMVC42</display-name>

  <!--  -->
  <welcome-file-list>
    <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
  </welcome-file-list>

  <!-- 引入相关spring的配置文件 -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
  <!-- 使用监听器启动Spring -->
  <listener>
      <listener-class>
          org.springframework.web.context.ContextLoaderListener
      </listener-class>
  </listener>

  <!-- 1.配置Servlet -->
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <!-- 2.加载配置文件 -->
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc-servlet.xml</param-value>
      </init-param>
      <!--3. 加载次序(优先级) -->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 4. -->
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

二、实现登录、注销功能

(一)、登录功能的实现:

1、改造dao层

需要dao层中的内容,在cn.smbms下创建dao包,把BaseDao类粘过来,再次包内建user包,包中建userDao和userDaoImpl;再讲user实体拷贝到pojo包下;

2、改造service层

再在cn.smbms包下新建service包,再建user包,再将关于user的UserService和UserServiceImpl拷贝过来;将其中的myBatis方法注释掉。在UserDaoImpl上加入注解@Repository
;在UserServiceImpl上加入注解@Service;然后UserDao属性上加入注解@Autowired,再补全get/set方法
image.png

3、复制login.jsp文件到jsp文件夹下,然后在web.xml文件中放开

  <welcome-file-list>
    <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
  </welcome-file-list>

首先看一下能否访问到login界面;直接在网页输入127.0.0.1:8080/SpringMVC42/
image.png

4、改造controller层

补全controller层中的代码,新建一个commonController类,公共的controller模块

package cn.smbms.controller;

import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.smbms.pojo.User;
import cn.smbms.service.user.UserService;
import cn.smbms.tools.Constants;

//公共的controller模块
@Controller
@RequestMapping("/common")
public class CommonController {


    //默认访问Controller中的login.html也能跳转到登录界面
    @RequestMapping("/login.html")
    public String login(){
        return "login";
    }
}

要将springmvc-servlet中的多个控制器映射修改

在网页输入127.0.0.1:8080/SpringMVC42/common/login.html
image.png

5、将login.jsp页面中的form提交地址改为/common/login.do

6、在CommonController类中写入方法,

在该类中创建userService属性,上面加上注解@Autowired
写完登录成功,看其跳转位置,然后将头脚文件的frame.jsp文件,三个文件拷贝过来,将/jsp/去掉;

    @Autowired
    UserService userService;

    @RequestMapping("/login.do")
    public String doLogin(String userCode,String userPassword){
        //登录验证,查库,
        User user = userService.login(userCode, userPassword);
        if(user == null){
            //登录失败
            map.put("error", "用户名或密码错误");
            return "login";//登录失败跳转回登录界面
        }else{
            //登录成功

            return "frame";
        }
        public UserService getUserService() {
        return userService;
    }
        public void setUserService(UserService userService) {
        this.userService = userService;
    }

    }

如果登录界面用户名和密码输入正确
image.png
如果用户名或密码输入错误
image.png

7、ServletAPI作为参数的使用

新建tools包,将Constants文件拷贝进来,实现登录界面显示欢迎**

8、在common中写入session;后面添加参数

@RequestMapping("/login.do")
    public String doLogin(String userCode,String userPassword,Map<String, Object> map,HttpSession session){
        //登录验证,查库,
        User user = userService.login(userCode, userPassword);
        if(user == null){
            //登录失败
            map.put("error", "用户名或密码错误");
            return "login";
        }else{
            //登录成功
            //获得session中的当前用户信息,在网页显示,欢迎***
            session.setAttribute(Constants.USER_SESSION, user);
            return "frame";
        }

    }

image.png

9、除了跳转到界面,还可以跳转到处理类中;

新建一个UserController;回到CommonController中,修改登录成功后的跳转地址。

//重定向使用
@Controller
@RequestMapping("/user")
public class UserController {
    //frame主页面方法
    @RequestMapping("/main.html")
    public String main(HttpSession session){
        //只要进入到/user内,都要进行权限校验
        if(session.getAttribute(Constants.USER_SESSION) == null){
            //未登录状态,跳转到login界面
            return "login";
        }else{
            return "frame";
        }
    }
}
@RequestMapping("/login.do")
    public String doLogin(String userCode,String userPassword,Map<String, Object> map,HttpSession session){
        //System.out.println("模拟异常无论是否输入正确,只要点登陆就报error.jsp"+1/0);
        //登录验证,查库,
        User user = userService.login(userCode, userPassword);
        if(user == null){
            //登录失败
            map.put("error", "用户名或密码错误");
            return "login";
        }else{
            //登录成功
            //获得session中的当前用户信息,在网页显示,欢迎***
            session.setAttribute(Constants.USER_SESSION, user);
            //不直接写了,采用重定向,地址栏发生变化
            return "redirect:/user/main.html";
        }

    }

登录后地址发生改变
image.png

10、引入静态资源文件

创建包和拷贝文件
image.png
然后login.jsp文件中引入了哪些样式,Link引入了css,需要修改其路径
image.png
配置静态资源管理器—引入静态资源文件
springmvc-servlet中加入

     <!-- 配置静态资源管理器;引入静态资源文件  mapping请求的url地址 ;location本地工程路径-->
     <mvc:resources location="/statics/" mapping="/statics/**"></mvc:resources>

登录界面显示样式
image.png

11、引入全局异常

在springmvc-servlet中引入异常处理机制

<!-- 配置全局异常,引入异常处理机制 -->
     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
         <property name="exceptionMappings">
             <props>
                 <prop key="java.lang.Exception">error</prop>
             </props>
         </property>

     </bean>

测试一下如何生效,新建一个error.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    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>Insert title here</title>
</head>
<body>
<h1>系统维护中,请稍后再试</h1>
</body>
</html>

在CommonController中,doLogin方法内,只要一点击登录,直接输出个错误
System.out.println(“模拟异常无论是否输入正确,只要点登陆就报error.jsp”+1/0);
image.png

12、登录之后的样式修改

首先是frame.jsp页面,images路径前要加上statics
image.png
其次是head.jsp页面
image.png
然后是foot,jsp界面
image.png
重新登录之后,页面有样式
image.png

(二)、退出功能

1、找到退出按钮有哪几个?head中有一个退出,路径改一下,
image.png
2、再从headl里找到退出系统字样,修改其路径
image.png
3、到CommonController中加入退出方法

@RequestMapping("/logout")
    public String logout(HttpSession session){
        //退出前要清空session
        session.removeAttribute(Constants.USER_SESSION);
        return "login";
    }

测试退出即可

三、查询用户列表

(一)、实现点击用户管理,显示界面,内容可以暂时没有

1、首先在head里找到用户管理,修改路径

image.png
写controller匹配userList

2、在UserController 中,写入方法

package cn.smbms.controller;

import javax.servlet.http.HttpSession;

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

import cn.smbms.tools.Constants;

//重定向使用
@Controller
@RequestMapping("/user")
public class UserController {
    //frame主页面方法
    @RequestMapping("/main.html")
    public String main(HttpSession session){
        //只要进入到/user内,都要进行权限校验
        if(session.getAttribute(Constants.USER_SESSION) == null){
            //未登录状态,跳转到login界面
            return "login";
        }else{
            return "frame";
        }
    }
    //登录后点击用户管理能进去,但没数据
    @RequestMapping("/userList")
    public String userList(){
        return "userlist";
    }
}

3、将userlist.jsp文件拷到本工程jsp文件夹下;去掉/jsp/;最下面引入js前要加上statics/;

4、再讲rollpage.jsp拷贝过来,最后面有一个引入js,前面加上statics/

登录后点击用户管理
image.png
provider和bill操作步骤和user相同,只是相应的**Controller类中,不需要main主方法;注意将其中的引入的js/images/css/calendar修改,只需在前面加上statics/