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>
接着在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; } }
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
然后再进行三步走,可以发现成功打印消息了。

其实除了用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; } }
// 点击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这个函数里面写了。

浙公网安备 33010602011771号