SpringBoot 创建SpringMVC项目

1.pom文件

<?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.example</groupId>
  <artifactId>myweb</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>myweb Maven Webapp</name>
  <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>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath />
  </parent>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--需要引入 jstl-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
    </dependency>
    <!--需要引入 tomcat-embed-jasper-->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

2.application.properties文件

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

3.创建jsp页面

在文件夹 src/main/webapp/WEB-INF/jsp/下创建index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    hello jsp
    <p>${userInfo.name}</p>
</body>
</html>

常用标签库

<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

4.创建controller

import com.example.myweb.domain.UserInfo;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Controller
public class HomeController {

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

    /**
     * 返回ModelAndView ,视图为modelAndView实例中的view值
     *
     * @return
     */
    @RequestMapping(value = "/mav", method = RequestMethod.GET)
    public ModelAndView getModelAndView() {

        ModelAndView mav = new ModelAndView("modelandview_demo");
        //mav.setViewName("admin"); //初始化时使用无参构造函数时,可使用此方法设置视图

        mav.addObject("data", new UserInfo());
        mav.addObject("time", new Date());

        return mav;
    }

    /**
     * 返回string,视图为返回值
     *
     * @param model
     * @return
     */
    @RequestMapping(value = "/model", method = RequestMethod.GET)
    public String getModel(Model model) {
        //方法中的Model是接口,也可换成 ModelMap

        model.addAttribute("data", new UserInfo());
        model.addAttribute("time", new Date());

        return "model_demo";
    }

    /**
     * 返回void时,视图为请求名
     *
     * @param model
     */
    @RequestMapping("/void_demo")
    public void getWelcome(Model model) {

        model.addAttribute("time", new Date());
    }

    /**
     * 返回map ,视图为请求名
     *
     * @return
     */
    @RequestMapping("/map_demo")
    public Map<String, Object> getMap() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("key1", "value-1");
        map.put("key2", "value-2");
        map.put("time", new Date());
        return map;
    }

    /**
     * 返回对像 ,视图为请求名
     * jsp访问数据是userInfo
     * 等价于 model.addAttribute("userInfo", 返回值);
     *
     * @return
     */
    //@ModelAttribute("data")
    @RequestMapping("/obj_demo")
    public UserInfo getObj() {
        return new UserInfo(1, "demo", new Date());
    }

    /**
     * 返回json
     *
     * @return
     */
    @RequestMapping("/json_demo")
    @ResponseBody
    public UserInfo getJson() {
        return new UserInfo(1, "demo", new Date());
    }

    /**
     * 返回json
     *
     * @return
     */
    @RequestMapping("/mydemo")
    public ResponseEntity<Map<String, Object>> responseEntity() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("message", "Hello Wrold");
        return new ResponseEntity(map, HttpStatus.OK);
    }

    /**
     * post json
     *
     * @param user
     * @return
     */
    @PostMapping("/useradd")
    public String postJson(@RequestBody UserInfo user) {
        return "newuser";
    }


    /**
     * post form
     *
     * @param name
     * @param date
     * @return
     */
    @RequestMapping(value = "/user/save", method = RequestMethod.POST)
    private String doSave(@RequestParam("name") String name, @RequestParam("date") Date date) {
        return "success";
    }

    /**
     * post form
     *
     * @param user
     * @return
     */
    @RequestMapping(value = "/user/save", method = RequestMethod.POST)
    private String doSave(@ModelAttribute UserInfo user) {
        //可以不添加@ModelAttribute注解
        return "success";
    }

    /**
     * 上传文件
     *
     * @param file
     * @param req
     * @return
     */
    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest req) throws IOException {
        //也可以把MultipartFile 定义为一个对像的属性进行获取
        //file.transferTo(new File("save.data"));

        // 判断文件是否为空,空则返回失败页面
        if (file.isEmpty()) {
            return "failed";
        }
        // 获取文件存储路径(绝对路径)
        String path = req.getServletContext().getRealPath("/upload");
        // 获取原文件名
        String fileName = file.getOriginalFilename();
        // 创建文件实例
        File filePath = new File(path, fileName);
        // 如果文件目录不存在,创建目录
        if (!filePath.getParentFile().exists()) {
            filePath.getParentFile().mkdirs();
            System.out.println("创建目录" + filePath);
        }
        // 写入文件
        file.transferTo(filePath);
        return "success";
    }

    /**
     * 下载文件
     *
     * @param request
     * @param filename
     * @param model
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "/download", method = RequestMethod.GET) //匹配的是href中的download请求
    public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename,
                                           Model model) throws IOException {

        String downloadFilePath = "D:\\userUploadFile\\Files";//从我们的上传文件夹中去取

        File file = new File(downloadFilePath + File.separator + filename);//新建一个文件

        HttpHeaders headers = new HttpHeaders();//http头信息

        String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置编码

        headers.setContentDispositionFormData("attachment", downloadFileName);

        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息

        return new ResponseEntity<byte[]>(Files.readAllBytes(file.toPath()), headers, HttpStatus.CREATED);

    }


    /**
     * 页面调转
     * @return
     */
    @RequestMapping("/jump")
    public String jump1(){

        //转发方式1
        return "index";

        //转发方式2
        return "forward:index";

        //重定向方式  hello指的是requsrmapping
        return "redirect:index";

    }

    /**
     * 页面跳转2
     * @param req
     * @param resp
     * @throws Exception
     */
    @RequestMapping("/resp")
    public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {

        //转发方式1
        req.getRequestDispatcher("index.jsp").forward(req,resp);

        //转发方式2
        resp.sendRedirect("index.jsp");
    }


}

 

5.启动类

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

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

6.生成war包发布到容器中

6.1修改pom 打包成war,并修改引用

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <!-- 排除内置容器,排除内置容器导出成 war 包可以让外部容器运行spring-boot项目 -->
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>

6.2 在启动类同级目录创建文件ServletInitializer.java

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

 

上一篇:SpringMVC拦截器实例


下一篇:springMVC解决跨域