一.静态资源映射规则

帮助文档

总结

只要静态资源放在类路径下:called/static(or/public or/resource or META-INT/resources)

访问:当前项目的根路径/+静态资源名

二.enjoy模板引擎

1.将页面保存在templates目录下

2.添加坐标

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>enjoy</artifactId>
    <version>5.0.3</version>
</dependency>

3.开启配置

@Configuration
public class SpringBootConfig {

    @Bean(name = "jfinalViewResolver")
    public JFinalViewResolver getJFinalViewResolver() {

        // 创建用于整合 spring boot 的 ViewResolver 扩展对象
        JFinalViewResolver jfr = new JFinalViewResolver();

        // 对 spring boot 进行配置
        jfr.setSuffix(".html");
        jfr.setContentType("text/html;charset=UTF-8");
        jfr.setOrder(0);

        // 设置在模板中可通过 #(session.value) 访问 session 中的数据
        jfr.setSessionInView(true);

        // 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样
        Engine engine  = JFinalViewResolver.engine;

        // 热加载配置能对后续配置产生影响,需要放在最前面
        engine.setDevMode(true);

        // 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件
        engine.setToClassPathSourceFactory();

        // 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath
        // 代替 jfr.setPrefix("/view/")
        engine.setBaseTemplatePath("/templates/");


        // 更多配置与前面章节完全一样
        // engine.addDirective(...)
        // engine.addSharedMethod(...);

        return jfr;
    }
}

4.编写代码

@RequestMapping(path="/init")//二级目录
public String userInit(){
    System.out.println("==========进入了springMVC的控制器=========");
    System.out.println("调用业务层,调用持久层");
    return "success";//返回方法执行完要跳转的页面名称
}

@RequestMapping(value="/show1",method ={RequestMethod.POST})
public String show1(){
    System.out.println("==========进入了springMVC的控制器=========");
    System.out.println("使用post方式发送请求进入");
   return "success";//返回方法执行完要跳转的页 面名称
}

三.springMVC

  • 1.请求处理
  • 2.参数绑定
  • 3.常用注解
  • 4.数据传递
  • 5.文件上传

1.请求处理

 @RequestMapping

       

/**
 *
 *@RequestMapping
 * 意义:处理用户的请求,相似于doget与dopost
 * 位置:
 *      类上:一级目录
 *      方法:二级目录
 *      例如:user/save
 *          user/delete
 *          student/save
 *          student/delete
 *  属性:
 *      value = "",path = ""
 *      表示请求路径
 *      =========================
 *      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
 *      =========================
 *      params = ""
 *      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
 *
 *      注意:1.超链接默认发送的是get请求
 *          2.所有请求所携带的参数格式均为:key = value
 *
 *     @DeleteMapping删除
 *     @PutMapping   修改
 *     @GetMapping   查询
 *     @PostMapping  新增
 *
 *     @RequestMapping可以点击查看源码
 *     @Target({ElementType.METHOD, ElementType.TYPE})
 *          METHOD==代表修饰方法,TYPE==代表修饰类

2.参数绑定

/**
 * springMVC请求参数的绑定
 * 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
 *
 * 一.支持数据类型:
 *      1.基本类型参数:
 *                  包括基本类型和 String 类型
 *      2.POJO类型参数:
 *                  包括实体类,以及关联的实体类
 *      3.数组和集合类型参数:
 *                  包括 List 结构和 Map 结构的集合(包括数组)
 *      4.使用 ServletAPI 对象作为方法参数
 *          HttpServletRequest
 *          HttpServletResponse
 *          HttpSession
 *          java.security.Principal
 *          Locale
 *          InputStream
 *          OutputStream
 *          Reader
 *          Writer
 *
 *  二.使用要求
 *     1.发送请求中携带数据的key与方法参数的name必须一致
 *     2.数据类型合法
 *
 * */

3.常用注解

@RequestParam

作用

        把请求中指定名称的参数给控制器中的形参赋值。

        如果页面标签名称和方法参数名称不一致,可以使用此注解。

属性:

        name属性:设置参数名称

        defaultValue属性:设置默认值

        required属性:设置是否为必传

@RequestBody

        作用:

                用于获取“请求体”内容,直接使用得到是key=value&key=value...结构的数据,并可以转换为对象。

        属性:

                required:是否必须有请求体,默认值是:true.

@PathVariable

        作用:

                用于绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。url支持占位符是spring3.0后加入的,是springmvc支持rest风格URL的一个重要标志。

        属性:

                value:用于指定url中的占位符名称。

                required:是否必须提供占位符。

@RequestHeader

        作用:

                用于获取请求消息头。

        属性:

                value:提供消息头名称。

                required:是否必须有此消息头。

@CookieValue

        作用:

                用于把指定cookie名称的值传入控制器方法的参数。

        属性:

                value:指定cookie的名称

                required:是否必须有此cookie

4.数据传递
    @RequestMapping("/show4")
    public String show4(HttpSession  session){
        System.out.println("==========show4=============");
        // 模拟数据库中查询数据
        Emp emp=new Emp(1,"张三","男");
        session.setAttribute("emp",emp);

        return "success_String";
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>返回值String成功页面</h1>
<span>#(session.emp.eid)</span>
<span>#(session.emp.ename)</span>
<span>#(session.emp.esex)</span>
</body>
</html>
5.文件上传

导入坐标

   <!--导入七牛云需要坐标-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.25</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>happy-dns-java</artifactId>
            <version>0.1.6</version>
            <scope>test</scope>
        </dependency>
        <!--文件上传-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

文件上传

 @RequestMapping("/fileUpload")
    public String fileUpload(String uname, MultipartFile file, HttpServletRequest request, HttpSession session) {

        System.out.println("uname:" + uname);
        System.out.println("file:" + file);


        //方式1.将文件upic以流的方式写入当前服务器磁盘(应用服务器)
        //方式2.文件服务器(七牛云)
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.autoRegion());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //...生成上传凭证,然后准备上传
        String accessKey = "KdLYknp1GkTjvLa72NIhHZyO8qwUcDjOg9_hunNX";
        String secretKey = "CbYmLqqW52XtU3EnpYO8yHOk06kvSyvKIPoR6sBF";
        String bucket = "likejenne";
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = "mup";

        try {
            byte[] uploadBytes = file.getBytes();
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);

            try {
                Response response = uploadManager.put(uploadBytes, key, upToken);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                System.out.println(putRet.key);//获取文件名
                System.out.println(putRet.hash);//获取文件hash值
                request.getSession().setAttribute("picname", putRet.key);
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
            }
        } catch (Exception ex) {
            //ignore
        }

        return "success";
    }

四.注册Servlet三大三大组件Servlet/Filter/Listener

servlet

package com.itheima.springboot_day03_demo02.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/HttpServlet")
public class MyHttpServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("MyHttpServlet");
    }

}

filter

package com.itheima.springboot_day03_demo02.controller;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import java.io.IOException;

@WebFilter("/HttpServlet")
public class MyFilter extends HttpFilter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("MyFilter");
        chain.doFilter(request, response);
    }
}
Listener
package com.itheima.springboot_day03_demo02.controller;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听器启动");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("监听器销毁");
    }

}

五.切换为其他嵌入式Servlet容器

SpringBoot 默认针对Servlet容器提供以下支持:

        Tomcat(默认使用)

        Jetty :支持长连接项目(如:聊天页面)[ˈdʒeti]

        Undertow : 不支持 JSP , 但是并发性能高,是高性能非阻塞的容器[ˈʌndətəʊ]

<!--切换Jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!--            排除tomcat容器-->
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>spring-boot-starter-jetty</groupId>
            <artifactId>org.springframework.boot</artifactId>
        </dependency>

<!--       以上是更换内置服务器依赖-->

六.restFul

         Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次, * 更易于实现缓存机制等。

        Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

*       GET:用于获取资源
*       POST:用于新建资源
*       PUT:用于更新资源
*       DELETE:用于删除资源
* 例如:
*  /users/1                GET :      得到 id = 1 的 user
*  /users/1                DELETE:    删除 id = 1 的 user
*  /users/1/新名/新性       PUT:       更新 id = 1 的 user
*  /users/新名/新性         POST:      新增 user
*
*  http://localhost:8080/userSave?uid=101&uname=XX
*
*  post         http://localhost:8080/users/101/XX
*  get          http://localhost:8080/users/101
*  delete       http://localhost:8080/users/101
*  put          http://localhost:8080/users/101/XX
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐