STS用Maven写一个登录页面 - 实现接收login表单post数据&可以在控制台打印log信息

上一章写的是实现login跳转功能,用的get方法,只要点击login就跳转,并没有接收其数据,这一章讲接收表单数据并做相应处理。另外,为了便于Debug,也讲一下如何能在STS控制台打印Log信息。

打印Log信息

首先要在pom.xml配置Log。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<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.test.demo</groupId>
  <artifactId>Demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>Demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <org.springframework-version>4.2.6.RELEASE</org.springframework-version>
    <org.slf4j-version>1.7.5</org.slf4j-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>
    
    <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>
  </dependencies>

  <build>
    <finalName>Demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
View Code

 

接着在Demo.java里面导入库

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

去使用试试看

Demo.java

package com.test.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

@Controller
public class Demo {
    
    private static final Logger logger = LoggerFactory.getLogger(Demo.class);
    
    @RequestMapping(value = "/")
    public String ShowLogin() {
        return "login";
    }
    
    @RequestMapping(value="/loginOn") 
    public ModelAndView ShowLoginOn(ModelAndView view) 
    { 
        logger.info("====================Move to login on==================");
        view.setViewName("loginOn"); 
        return view; 
    }
     

}
View Code

 

Update Project, Maven install, Run as server。发现并没有输出Move to login on那句话。但是会在控制台打印窗口看到一个warning:log4j:WARN No appenders could be found for logger。这是因为还有一个文件没有配置,并且位置放置一定要准确。

 

 如果在src\main目录下没有resources文件夹的话,那么自己就需要New一个folder,创建一个resources文件夹,上面那个截图是我已经创建好后的。创建了文件夹后,在resources文件下新建一个文件名称为log4j.properties,文件内容如下:

log4j.rootCategory=INFO,CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%t %d{yyyy-MM-dd HH:mm:ss} %p [%c:%L] %m%n 
log4j.appender.CONSOLE.Encoding=UTF-8
View Code

 

然后再进行三步走,可以发现成功打印消息了。

 

 其实除了用logger可以打印消息外,还有System.out.print("123")也可以打印消息,只不过它没有logger那么多级别可以用来筛选信息:Debug,info,warning,error。

 

接收表单数据

传递表单数据就需要用到post,所以之前写的login.jsp就需要将get修改为post了。

login.jsp

 

 然后在Demo.java里面要写个函数接收表单数据。

Demo.java

package com.test.demo;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class Demo {
    
    private static final Logger logger = LoggerFactory.getLogger(Demo.class);
    
    @RequestMapping(value = "/")
    public String ShowLogin() {
        return "login";
    }
    
    // 点击login时触发
    @RequestMapping(value="/loginOn", method=RequestMethod.POST)
    public ModelAndView Login(HttpServletRequest request, ModelAndView view)
    {
        logger.info("======================================");
        System.out.print("Start");
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        // 不要用 name == "lucy",结果会是不相等
        if (name.equals("lucy")) {
            logger.info("username is lucy");
            view.setViewName("redirect:/loginOn");
        }
        else {
            logger.info("username is not lucy");
            view.setViewName("redirect:/");
        }
        
        return view;
    }

    
    @RequestMapping(value="/loginOn") 
    public ModelAndView ShowLoginOn(ModelAndView view) 
    { 
        logger.info("====================Move to login on==================");
        System.out.print("123");
        view.setViewName("loginOn"); 
        return view; 
    }
     

}
View Code

 

    // 点击login时触发
    @RequestMapping(value="/loginOn", method=RequestMethod.POST)
    public ModelAndView Login(HttpServletRequest request, ModelAndView view)
    {
        logger.info("======================================");
        System.out.print("Start");
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        // 不要用 name == "lucy",结果会是不相等
        if (name.equals("lucy")) {
            logger.info("username is lucy");
            view.setViewName("redirect:/loginOn");
        }
        else {
            logger.info("username is not lucy");
            view.setViewName("redirect:/");
        }
        
        return view;
    }

 

这一块代码的逻辑也很简单,获取输入的用户名和密码,如果用户名是lucy,则跳转到loginOn页面,如果用户名不是lucy,则跳转到入口页面,验证一下。

 

可以看到只要是lucy就可以跳转成功,不是lucy就在根目录,成功了。所以之后对表单的处理都可以在Login这个函数里面写了。

posted @ 2022-09-21 09:26  o云淡风轻o  阅读(101)  评论(0)    收藏  举报