• 基于Spring的用户的登录模块


    通过Spring实现用户的登录模块

    1.创建一个Maven项目

    然后填项目名,一直下一步即可。

    2.修改pom.xml文件

    主要是添加Spring的依赖包,以及数库的jdbc等依赖。

    为了方便修改,提前设置好Spring版本。

    添加依赖

    <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
    
        <!-- Spring依赖 -->
        <!-- 1.Spring核心依赖 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 2.Spring dao依赖 -->
        <!-- spring-jdbc包括了一些如jdbcTemplate的工具类 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-orm</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- 3.Spring web依赖 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aspects</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>aopalliance</groupId>
          <artifactId>aopalliance</artifactId>
          <version>1.0</version>
        </dependency>
    
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.8.13</version>
        </dependency>
        <!-- 4.Spring test依赖:方便做单元测试和集成测试 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.10</version>
        </dependency>
    
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.10</version>
          <scope>runtime</scope>
        </dependency>
    
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
        </dependency>
    
    
      </dependencies>

     3.创建项目目录

    创建以下3个文件夹,分别存放Java代码,xml配置文件,测试用代码

     分别在每个文件夹上右键,选择对应的选项。

     设置完成之后,的main目录如下

    在java文件创建,包,存放相应功能文件。

    4.开始写后台程序

    1)首先需要一个用户类:对应数据库的表格,userid设置为主键。

    public class User {
        private int userid;
        private String username;
        private String password;
        public void myname(){
            System.out.println("wys");
        }
    
        public int getUserid() {
            return userid;
        }
    
        public void setUserid(int userid) {
            this.userid = userid;
        }
    
        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;
        }
    }

    2)在applicationContext.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
    <!--    添加扫描包-->
        <context:component-scan base-package="com.spring.*"/>   扫描包的目录,需要修改为包的目录,为了方便可以用 * 代替,*为通配符
    
        <context:annotation-config />
    
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <!--    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">-->
            <!--数据库驱动 -->
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <!--连接数据库的url -->
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/job" />   此处需要修改对应的数据库名
            <!--连接数据库的用户名 -->
            <property name="username" value="root" />
            <!--连接数据库的密码 -->
            <property name="password" value="root" />
        </bean>
    
        <!-- 2配置JDBC模板 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 默认必须使用数据源 -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <!--    配置事务管理器-->
        <bean id="transactionManager" class=
                "org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
    
    
    </beans>

    3)实现dao层

    @Repository
    public class UserDao {
    
        @Autowired    //自动注入的注解
        private JdbcTemplate jdbcTemplate;
    
        public User findByUserName(String username){
            String sql = "select * from j1_user where username = ?";  //sql语句
            // 创建一个新的BeanPropertyRowMapper对象
            RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);   
            try {
                return jdbcTemplate.queryForObject(sql,new Object[]{username},rowMapper);  //当返回数据为0或者大于1时会报错,所以添加try catch捕获异常。
            }catch (EmptyResultDataAccessException e){
                return null;
            }
    
        }
    
    }

    4)service

    @Service
    public class UserService {
        @Autowired
        private UserDao userDao;
    public User findByUserName(String username){ return userDao.findByUserName(username); } }

    5)现在基本已完成数据持久层操作,然后编写测试类测试一下。

    在对应的测试类上alt+回车

     

     会生成对应的测试类和测试方法,在目录test下。

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = { "classpath:/applicationContext.xml" })
    public class UserServiceTest {
        @Autowired
        private UserService userService;
        @Test
        public void findByUserName() {
            User user = userService.findByUserName("123");
            assertEquals(user.getUsername(),"123");
        }
    }

    执行这个类,可以查看对应的测试方法。

    6)Controller和前端

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @RequestMapping(value = {"index"})
        public String index(HttpServletRequest request, String username, String password) {
            return "index";
        }
    @RequestMapping(value = {"login"})
    public ModelAndView login(HttpServletRequest request, String username, String password) {
    ModelAndView ma=new ModelAndView();
    User user=userService.findByUserName(username);
    if(null!=user) {
    if(user.getPassword().equals(password)) {
    ma.addObject("user", user);
    ma.setViewName("main");
    }else {
    ma.setViewName("login");
    }
    }else {
    ma.setViewName("login");
    }
    return ma;
    }
     }

    7)配置web.xml

    为了让控制器可以拦截请求,需要配置web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    <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" version="3.1">
    <!--<web-app>-->
      <display-name>Archetype Created Web Application</display-name>
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
      <servlet>
        <servlet-name>DispatcherServlet</servlet-name><!--在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。-->
        <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>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。-->
      </servlet-mapping>
    
    
    </web-app>

    8)在resources下增加配置文件 spring-mvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    
        <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
        <context:component-scan base-package="com.spring.controller" />
    
        <mvc:default-servlet-handler/>
    
        <mvc:annotation-driven/><!-- 开启注释 -->
    
    <!--     对模型视图名称的解析,即在模型视图名称添加前后缀 -->
        <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            p:prefix="/" p:suffix=".jsp" />
    <!--    prefix是在返回值加入前缀,suffix加入后缀 -->
    </beans>

    9)index界面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head> <meta charset="utf-8"> <title>登录</title> </head> <body > <form action="/user/login" method="post"> <table> <tr> <td>用户名</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="password" /></td> </tr> <tr> <td><input type="submit" value="登录" /></td> </tr> </table> </form> </body> </html>

    main界面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <span style="font-size: 30px"> &nbsp;欢迎您的登录 </span>
    
    <table border="1px">
        <tr>
            <td>当前在线用户</td>
        </tr>
    </table>
    </body>
    </html>

    10)配置tomact,与普通maven项目配置基本相同。

     启动项目

    登录完成。

    整个项目目录如下:

  • 相关阅读:
    为什么要用设计模式?先看看6大原则(一)
    git版本库的创建和yaf框架环境的部署
    laravel日常小问题
    Session store not set on request.
    phpstudy集成环境安装lavarel
    html中提交表单并实现不跳转页面处理返回值
    document load 与document ready的区别
    定时器优化
    放大镜
    子组件调用父组件的方法并传递数据
  • 原文地址:https://www.cnblogs.com/wys-373/p/14587256.html
Copyright © 2020-2023  润新知