springmvc笔记

1. springmvc的返回参数和传入参数的方式

1.1 返回参数

/*
    @RestContorller = @Controller + @RsponseBody
*/
@Controller
/*
    @RequestMapping("/note") 可以在类上添加一级目录
*/
public class NoteController {

    /*       一.  几种参数返回类型            */


    @RequestMapping("/mav")
    public ModelAndView doSome(ModelAndView mav) {
        //添加参数
        mav.addObject("name", "jojo");
        //设置视图
        mav.setViewName("hello");
        /*
        1.重定向:   mav.setViewName("redirect:https://www.baidu.com")
        2.请求转发:    mav.setViewName("forward:hello")
        */
        return mav;
    }

    @RequestMapping("/m")
    public Model doSome(Model m) {
        //添加参数
        m.addAttribute("name", "jojo");
        return m;
    }

    @RequestMapping("/v")
    public void doSome() {
        //返回空值
        return;
    }

    @RequestMapping("/viewStr")
    public String doSome1() {
        //返回视图
        return "hello";
    }

    @RequestMapping(value = "/str", produces = "text/plain;charset=UTF-8" /*设置响应头Content-Type内容类型,防止中文字符串乱码*/)
    @ResponseBody /*作用其实是将java对象转为json格式的数据*/
    public String doSome2() {
        //返回字符串
        return "你好!";
    }

    @RequestMapping(value = "/obj")
    @ResponseBody
    public Object doSome3() {
        //返回对象
        return null;
    }

    //时间参数按照格式传到前端:
    @RequestMapping("/query")
    @ResponseBody
    public Person doSomE() {              //   在person类的时间成员变量上加上@JsonFormat注解,并指定时间格式
        Person person = new Person();     //   @JsonFormat(pattern = "yyyy-MM-dd")
        person.setBirthday(new Date());   //   private Date birthday;
        return person;
    }

1.2 传入参数


    /*        二.  几种参数传入类型            */


    @RequestMapping("/add")
    @ResponseBody
    public Object doSome(HttpServletRequest request/* 通过request请求获取参数 */) {
        String idStr = request.getParameter("id");
        Integer id = Integer.parseInt(idStr);
        return null;
    }


    @RequestMapping(value = "/add", method = RequestMethod.GET/*默认是所有请求都行,包括: get,post,put,delete等*/)
    @ResponseBody
    public Object doSome4(Integer id, String name/* 和网页传入的参数名相同springmvc自动注入参数 */) {
        return null;
    }

    @RequestMapping("/add")
    @ResponseBody
    public Object doSome4(Person person/* 当传入的参数较多时,通过对象获取参数;springmvc通过匹配成员变量名自动注入参数 */) {
        return null;
    }

    @RequestMapping("/add")
    @ResponseBody
    public Object doSome5(@RequestParam(value = "myId", required = true) Integer id,
                          /* 设置前端传入的参数名称,required默认为true表示必须前端参数中必须含有该参数
                             应用: 前后端参数名不一致的情况
                           */
                          @RequestParam(value = "myName", required = false) String name) {
        return null;
    }

    @GetMapping("/do/{id}/{name}")
    @ResponseBody
    public Object doSome6(@PathVariable(value = "id", required = true) Integer id,
            /* rest风格中绑定url中的参数; required默认为true表示参数不能为空,为false时表示参数可以为空  */
                          @PathVariable(value = "name", required = false) String name) {
        return null;
    }

    @RequestMapping("/body")
    @ResponseBody
    public Object doSome7(@RequestBody/* 将一个Json对象的字符串转换成java对象 */ Person person) {
        return null;
    }

    //从前端获取时间参数并转换为时间类型
    @RequestMapping("/")
    @ResponseBody
    public Object doSome8(String dateStr) throws ParseException {
        //将时间字符串解析成时间类型
        Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        Person person = new Person();
        person.setBirthday(date);
        return null;
    }
    @RequestMapping("/")                     //  springmvc默认按照' yyyy/MM/dd HH:mm:ss '的格式解析字符串,解析失败会报错
    @ResponseBody                            //  通过加上@DateTimeFormart注解,可以自定义时间格式,springMVC就会按照指定时间格式转换字符串
    public Object doSome8(Person person) {   //  @DateTimeFormat(pattern = "yyyy-MM-dd")
    return null;                             //  private Date birthday;
    }

}

2. springmvc的全局异常处理

//该注解默认作用的是所有的controller,可以通过backage等参数配置指定的作用对象
@RestControllerAdvice //  = @ControllerAdvice + @ResponseBody
public class GlobaleExceptionHandler {

    @ExceptionHandler(RuntimeException.class/* 声明处理的异常 */)
    public JsonResult doHandleRuntimeException(RuntimeException e){

        return JsonResult.error(e);
    }
}

3. springmvc的拦截器

3.1 定义拦截器

public class MyInterceptor implements HandlerInterceptor {

    /* 执行时间: 目标方法执行前 */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        return true;// true:放行,  false:阻止并抛出异常
    }
    
    /* 执行时间: 目标方法执行后 */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        /* 用于记录日志,处理数据和视图等 */
    }

    /* 执行时间: 视图渲染后 */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
     /* 释放资源等 */
    }
}

3.2 注册拦截器

@Configuration //定义配置类
public class SpringWebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加不拦截的路径
        List<String> exculdePaths = new ArrayList<>();
        exculdePaths.add("/rNotice/{title}/{page}/{num}");//添加Rest风格的路径

        //添加拦截器    有多个拦截器执行顺序是按照添加的顺序
        registry.addInterceptor(new PrintTimeInterceptor())
                .addPathPatterns("/rNotice/**"  /* 用*号表示所有子路径 */)
                .excludePathPatterns("/rNotice/{title}/{page}/{num}" /*/添加Rest风格的路径*/ );
        registry.addInterceptor(new PrintTimeInterceptor2())
                .addPathPatterns("/rNotice/**");
    }
}

3.3 处理器执行链

public class HandlerExecutionChain {
    private final Object handler;
    private final List<HandlerInterceptor> interceptorList;
    private int interceptorIndex;
    .....
    }

4. springmvc的组件

  1. 前端控制器组件(DispatcherServlet)
  2. 处理器组件(Controller)
  3. 处理器映射器组件(HandlerMapping)
  4. 处理器适配器组件(HandlerAdapter)
  5. 拦截器组件(HandlerInterceptor)
  6. 视图解析器组件(ViewResolver)
  7. 视图组件(View)
  8. 数据转换组件(DataBinder)
  9. 消息转换器组件(HttpMessageConverter)

5. springmvc运行流程

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值