JavaEE笔记(一):Spring MVC登陆页面

JavaEE笔记(一):Spring MVC登陆页面

在这里插入图片描述

  • New Project →
  • Spring Initializr(生成空spring项目的web应用程序) →
  • Dependencies选择Web的Spring Web和Template Engines的Apache Freemarker

1. 修改配置文件

src/main/resources/application.properties

sever.port = 8888 //修改端口,默认是8080

spring.freemarker.suffix=.html //设置返回视图名后缀

spring.freemarker.settings.classic_compatible=true //解决前台使用${}赋值为空的情况

2. 写HTML文件

src/main/resources/static (静态,可以直接在网站显示)

src/main/resources/templates (动态,Spring Boot默认存放模板页面的路径)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1 align="center">welcome</h1>
<br>

<div align="center">
    <form action="/login_submit" method="post">
        name: <input type="text" name="name" value="sa"> <br>
        pass: <input type="text" name="pass" value="sa"> <br>
        <input type="submit" value="tijiao">

    </form>
    <font color="red"> ${msg}</font>
</div>

</body>
</html>

<!-- align="center" 居中
# action="/login_submit" 表单的信息会传到"/login_submit"的页面
-->

在这里插入图片描述

3. 建Handler

src/main/java/com

  • new package controller →
  • new class LoginHandler
package com.controller;

import com.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.Map;

@Controller

public class LoginHandler {

    @RequestMapping({"/login","/"})
    public String login(){

        return "/login";//对应login.html视图
    }

    @RequestMapping("/login_submit")
    public String login_submit(String name, @RequestParam("pass") String password, HttpSession session , Map map){

        if("sa".equals(name) && "sa".equals(password)) {
            session.setAttribute("name",name);
            return "redirect:/user/main.html";
        }
        else {
            map.put("msg","wrong password!");
            return "/login";
        }
    }

    @RequestMapping("/login_submit2")
    public String login_submit2(@Valid User user, BindingResult result,HttpSession session , Map map){

        System.out.println(user);
        if(result.hasErrors()){
//            for(rr:result.getAllErrors()){
//
//            }
        }
        if("sa".equals(user.getName()) && "sa".equals(user.getPass())) {
            session.setAttribute("name",user.getName());
            return "redirect:/user/main.html";
        }
        else {
            map.put("msg","wrong password!");
            return "/login";
        }
    }

    @RequestMapping("/user/main.html")
    public String main(){
        return "/user/main";
    }


    @RequestMapping("/user/logout")
    public String logout(HttpSession session){
        session.removeAttribute("name");

        return "forward:/login";
    }

}
//@RequestMapping默认属性是value,标注在一个方法或类上


//HttpSession:通过session对象得到session中存储的对象
//session.setAttribute("name",name);在服务器中开辟一个空间保存
//session.getAttribute("name");取得
//session.removeAttribute("name");删除指定名称的绑定对象


//public String login_submit(String name, @RequestParam("pass") String password, HttpSession session , Map map)
//数据绑定:将请求消息数据与后台方法参数建立连接的过程
//用注解@RequestParam绑定请求参数到方法入参,即将请求中pass参数的值赋给方法中的形参password
//当请求参数"pass"不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="pass", required=false)

//Map:可以将该值存储在一个Map对象.,通过键来访问对应的值
//put(Object k, Object v)将指定的值v与此映射中的指定键k关联


//public String login_submit2(@Valid User user, BindingResult result,HttpSession session , Map map)
//参数校验
//@Valid 用于验证注解是否符合要求,直接加在变量user之前,在User类中添加验证信息的要求,当不符合要求时就会在方法中返回msg的错误提示信息。
//@Valid和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后),每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果。

实体类

src/main/java/com

  • new package entity→
  • new class User
package com.entity;

import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;


public class User {

    @NotBlank
    private  String name;
    private String pass;
    @Valid
    private User father;
    @Min(0) @Max(100)
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User getFather() {
        return father;
    }

    public void setFather(User father) {
        this.father = father;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", pass='" + pass + '\'' +
                ", father=" + father +
                '}';
    }
}

//@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
//使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用

//@Override 的作用是:如果想重写父类的方法,在方法前面加上@Override 系统可以帮你检查方法的正确性

//类必须有get和set方法

拦截器

配置拦截器

如何将IntercepterConfig拦截器添加到SpringBoot的配置中,让SpringBoot项目有这么一个拦截器存在。

  • 新创建一个IntercepterConfig类
  • 将拦截器的配置以及拦截的路径配置好
    (registry.addInterceptor此方法添加拦截器)

src/main/java/com

  • new package config→
  • new class IntercepterConfig
package com.config;

import com.filter.LoginIntercepter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class IntercepterConfig  implements WebMvcConfigurer {
    //配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginIntercepter())
                .addPathPatterns("/user/**");
    }
}
//registry.addInterceptor(new LoginIntercepter())添加拦截器
拦截器
  • 创建LoginIntercepter类,实现HandlerInterceptor接口
  • 重写其父类方法
  • 添加如果没有session状态重定向至"/login?msg=xxx"

src/main/java/com

  • new package filter→
  • new class LoginIntercepter
package com.filter;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginIntercepter implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession sess = request.getSession();
        if( sess.getAttribute("name")!=null){
            return true;
        }else
        {
            response.sendRedirect("/login?msg=xxx");
        }
        return false;
    }
}
//HttpServletRequest接口:最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据。
//HttpServletResponse接口:在Servlet中,当服务器响应客户端的一个请求时,就要用到

//HttpSession getSession():无请求参数。获取当前request关联的session,如果当前request没有session,创建一个session.

//response.sendRedirect("/login?msg=xxx");重定向.发送一个临时的响应到客户端

可参考:SPRINGBOOT加入拦截器INTERCEPTOR

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值