SpringBoot整合JSP

SpringBoot整合JSP

前言

在上一步中,我们已经使用 IDEA 搭建了一个 SpringBoot 项目,编写一个简单的 HelloController 就能进行访问。

不熟悉的可以查看这篇博客 第一个SpringBoot程序

配置JSP环境

首先,我们先在 SpringBoot 项目的 pom.xml 文件中导入 jsp 的依赖,添加到 里面。

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

s1

接着我们在 main 目录下建立 webapp 文件夹,在 webapp 里面之后建立 WEB-INF,jsp 文件夹。注意,webapp 和 resource 在同级目录下
s2

点击 “FIle”-> “Project Structure”,选择 “Model”-> “Web”,将“Web Resource Directory”的路径修改为 刚建立的 webapp 的路径。如果 Web Resource Directory 下没有路径就新建一个。
s3
s4

然后我们去 application.properties 文件里面配置 SpringMVC 解析文件的前后缀

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

现在我们可以开始新建 jsp 文件了。

编写DemoJSP

鼠标选中 jsp 文件夹,右键,选择 “New”-> “JSP/JSPX”,新建一个 demo.jsp 文件。
s5

在里面随便输入一些内容

<%@ page contentType="text/html;charset=UTF-8" 
language="java" %>
<html>
<head>
    <title>Demo</title>
</head>
<body>
This is a jsp file!
</body>
</html>

在 Controller 包中新建 JSPController 类,在里面设置接口访问 demo.jsp文件。注意这里使用的是 @Controller 注解。

@Controller
public class JSPController {    
    @GetMapping("/demo")    
    public String demo(){        
        return "demo";    
    }
}

运行项目,输入地址 “localhost:8080/demo”就能访问到 demo.jsp 页面啦。
s6

JSP实现简单的登录判断

我们先在 jsp 文件夹中建立 login.jsp 文件,简单输入用户名和密码。使用 ajax 方法向后端传值,由后端进行判断并返回结果,前端接受返回值在进行提示。

这里我们使用的是在线的 jquery,就不需要再去下载 jquery 和配置了,非常方便。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script>
        function check() {
            //ajax传数据
            var name = document.getElementById("user").value;
            var psw = document.getElementById("psw").value;
            var params = {
                "username":name,
                "password":psw
            };
            //console.log(params);
            $.ajax({
                type: "post",
                ansyv: false,
                data: params,
                url: "/check",
                success:function (data) {
                    //console.log(data);
                    if(data=="success"){
                        alert("登录成功");
                    }else {
                        alert("用户名或密码错误");
                    }
                },
                error:function (data2) {
                    alert("ajax failed");
                }
            })
        }
    </script>
</head>
<body>
    <input type="text" id="user" maxlength="10" placeholder="username">
    <br>
    <input type="password" id="psw" placeholder="password">
    <br>
    <button onclick="check()">sign</button>
</body>
</html>

然后去 JSPController 里设置访问地址,并设置后端处理数据的 url。

@GetMapping("/login")
public String login(){
    return "login";
}
@ResponseBody
@PostMapping("/check")
public String check(@RequestParam Map<String, Object> param){
    String username = (String)param.get("username");
    String password = (String)param.get("password");
    if(username.equals("kk") && password.equals("123")){
        return "success";
    }
    else {
        return "failed";
    }
}

s7

这里因为我们没有连接数据库,所以就直接固定了后台验证的用户名和密码。当用户名为“kk”,密码为“123”时,向前端返回“success”,否则返回“failed”。

login.jsp页面如图所示。(没有写 css,看起来比较难看 hhh)
s8

当我们输入不符合的用户名和密码时,页面弹窗警告“用户名和密码错误”。
s9

当我们输入正确的用户名和密码时,页面会弹窗“登录成功”。
s10

这里要强调一点,我们写了一个 error 函数,当 ajax 传值失败时会提示“ajax failed”。

那么什么时候 ajax 传值会失败呢,如果我们在 ajax 中加上 dataType:"json"的话 ajax 就会传值失败了,因为后端的 @RequestParam 不接受 json 数据的传输。

$.ajax({    
    type: "post",    
    ansyv: false,  
    data: params,     
    dataType:"json",     
    url: "/check",
    success:function (data) {
    ······

s11

这里如果判断成功我们想要跳转页面,比如从 login.jsp 跳转到 demo.jsp,从后端是不能直接跳转的,因为 ajax 会接受返回数据,所以只能从前端跳转。

success:function (data) {    
    console.log(data);    
    if(data=="success"){        
        alert("登录成功");
        window.location.href="demo";
    }else {        
        alert("用户名或密码错误");    
    }
},
error:function (data2) {    
    alert("ajax failed");
}

这样就实现了一个简单的 JSP 登录页面判断和跳转。

还有就是 jsp 不要使用表单来传值,表单在 jsp 里面是不能传值的。用表单的话都是“ajax failed”了。

参考文章

jQuery在线引用地址(全)

SpringBoot中使用JSP

springboot中配置访问页面的前后缀

使用Ajax时Controller可以代码执行但无法跳转页面

Spring Boot -03- Spring Boot 整合 JSP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值