springboot教程-web(二)

第一节

如今开始springboot-web开发教程。html

引入依赖,pom.xmljava

<?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>cn.ac.iie</groupId>
    <artifactId>spring-course</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <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>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

spring-boot-starter-web已经包含了spring-boot-starter依赖,所以只需引入这个依赖就能够了。web

新建UserController.javaspring

package com.edu.spring.springboot;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

    @RequestMapping(value = "/user/home")
    @ResponseBody
    public String home() {
        return "user home";
    }

}

新建App.javaapache

package com.edu.spring.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

运行App.java,则服务器正常运行,默认端口号是8080,经过浏览器访问http://localhost:8080/user/home正常。api

这样最简单的web开发就完成了。浏览器

若是要修改端口,能够再application.properties中修改:tomcat

server.port=8081

这样端口号就修改为功了。springboot

默认的请求方式是:GET,POST,PUT方式都支持。咱们能够限制他的请求方式:服务器

方法一:

@RequestMapping(value = "/user/home", method = RequestMethod.GET)
    @ResponseBody
    public String home() {
        return "user home";
    }

方法二:

使用GetMapping

@GetMapping("/user/show")
    @ResponseBody
    public String show() {
        return "user home";
    }

    @PostMapping("/user/create")
    @ResponseBody
    public String create() {
        return "user home";
    }

GetMapping PostMapping等是spring4.3的新特性

如何传递参数

方法一:

修改UserController.java

@PostMapping("/user/create")
    @ResponseBody
    public String create(@RequestParam("username") String username, @RequestParam("password") String password) {
        return "user create, username: " + username + ", password: " + password;
    }

@RequestParam注解默认是参数必须提供,若是能够不提供能够使用required=false

能够提供一个默认值defaultValue=""

方法二:

@GetMapping("/user/{id}")
    @ResponseBody
    public String show(@PathVariable("id") String id) {
        return "user home id: " + id;
    }

方法三:

注入Servlet的api

@GetMapping("/user/edit")
    @ResponseBody
    public String edit(HttpServletRequest httpServletRequest){
        return "user edit: " + httpServletRequest.getRemoteHost();
    }

咱们发现每一个方法都必须使用@RequestBody来注释。所以能够使用RestController来简化

新建RoleController.java

package com.edu.spring.springboot;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RoleController {

    @GetMapping("/role/show")
    public String show(){
        return "role show ";
    }
}

@RestController 代表了当前controller的方法的返回值能够直接用body输出。

如何在springboot中使用jsp

新建LoginController.java

package com.edu.spring.springboot;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class LoginController {
    @PostMapping("/login")
    public String login(@RequestParam("username") String username, @RequestParam(value = "password") String password) {
        if (username.equals(password)) {
            return "ok";
        }
        return "fail";
    }

}

在main文件夹下面新建webapp,与java和resources文件夹并列。

修改application.properties
 

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

在webapp目录下新建文件夹/WEB-INF/jsp,而后新建ok.jsp和fail.jsp

springboot默认是不支持使用jsp的

 在springboot中使用jsp,须要引入依赖:

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

这样就能够成功访问jsp了。

如何向jsp传参数?

@GetMapping("/loginIndex")
    public String loginIndex(Model model) {
        model.addAttribute("username", "root");
        model.addAttribute("password", "123456");
        return "login";
    }

新建login.jsp

<html>
<h1>username; ${username}</h1>
<h2>password: ${password}</h2>
</html>

在springboot中使用jsp时,不能使用@RestController, 而要使用@Controller

如何在Jsp中使用模板?

添加pom.xml依赖:而且删除jsp的依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

在application.properties中删除jsp的配置。

在springboot中使用freemarker的步骤:

1. 在pom中加入依赖,       

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

2. 默认的freemaker的模板文件在classpath:/template/, 默认的文件扩展名为:ftl

新建AccountController.java

package com.edu.spring.springboot;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class AccountController {

    @GetMapping("/reg")
    public String reg(){
        return "reg";
    }

}

在resources/template下新建reg.ftl

<h1>
    ftl reg
</h1>

能够经过访问 http://192.168.170.132:8081/reg来获取这个模板页面了

如何修改模板文件的文件路径

在application.properties中修改:

spring.freemarker.template-loader-path=classpath:/ftl/  多个用逗号隔开

在resources下新建ftl文件夹,而后将reg.ftl文件移动到这个路径下,就能够访问了。

如何在模板文件中传参数

在AccountController.java

@GetMapping("/logout")
    public String logout(Model model){
        model.addAttribute("username", "admin");
        model.addAttribute("logout", "true");
        return "logout";
    }

在ftl目录下新建logout.ftl文件:

<h1>logout</h1>
<h2>username: ${username}</h2>
<h2>logout is ${logout}</h2>

这样就传递参数到模板中了。

最好在项目中要么选择模板,要么选择jsp,不要两者都选。

Springboot默认容器是Tomcat,若是想换成Jetty,如何作

首先须要把tomcat排除掉。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

导入jetty依赖。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

其他都不须要改变,直接运行,输出:

2019-05-15 21:00:56.619  INFO 14692 --- [           main] o.e.jetty.server.handler.ContextHandler  : Started o.s.b.w.e.j.JettyEmbeddedWebAppContext@37d3d232{application,/,[org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory$LoaderHidingResource@30c0ccff],AVAILABLE}
2019-05-15 21:00:56.619  INFO 14692 --- [           main] org.eclipse.jetty.server.Server          : Started @2652ms
2019-05-15 21:00:56.776  INFO 14692 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-05-15 21:00:57.069  INFO 14692 --- [           main] o.e.j.s.h.ContextHandler.application     : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-05-15 21:00:57.070  INFO 14692 --- [           main] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-05-15 21:00:57.075  INFO 14692 --- [           main] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
2019-05-15 21:00:57.194  INFO 14692 --- [           main] o.e.jetty.server.AbstractConnector       : Started ServerConnector@614aeccc{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
2019-05-15 21:00:57.196  INFO 14692 --- [           main] o.s.b.web.embedded.jetty.JettyWebServer  : Jetty started on port(s) 8081 (http/1.1) with context path '/'
2019-05-15 21:00:57.198  INFO 14692 --- [           main] com.edu.spring.springboot.App            : Started App in 2.8 seconds (JVM running for 3.23)

说明容器已经变成jetty了。

添加项目名称

默认是不须要有项目名称的,在application.properties文件中修改:

server.servlet.context-path=/mall

在地址栏中,须要指定/mall才能访问。例如:http://192.168.170.132:8081/mall/logout

相关文章
相关标签/搜索