Spring入门和模板语法

Posted zxj-262410

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring入门和模板语法相关的知识,希望对你有一定的参考价值。

一、java的工程目录

技术图片

pom.xml:工程的依赖包和对工程的说明

templates:放一些模板

static:放一些网站需要的静态

 

二、网站的简单分层

技术图片

controller与service之间,随着工程的变大,会有一个base层

 

 三、简单的测试

创建一个controller文件

技术图片

@Controller:表示这是一个controller

@RequestMapping:对访问的映射地址进行设置

@ResponseBody:因为返回的是一个字符串,所以要说明response是一个body

 最后在ToutiaoApplication处进行运行

技术图片

技术图片

网站的地址也可以设置多个:

@RequestMapping(path = {"/","index"})

 

指定参数:

@PathVariable:表示是@RequestMapping处的参数

@RequestParam表示是地址?后的参数

技术图片

效果图:

技术图片

 

 开发的时候,一般使用模板,templates

 技术图片

技术图片

 

四、关于使用thymeleaf 模板语言

详情:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#maps

 

五、request、response

1.request

    @RequestMapping(value = {"/request"})
    @ResponseBody
    public String request(HttpServletRequest request,
                          HttpServletResponse response,
                          HttpSession session) {
        StringBuilder sb = new StringBuilder();
        Enumeration<String> headerNames = request.getHeaderNames();         //显示reques中Header
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            sb.append(name + ":" + request.getHeader(name) + "<br>");
        }

        for (Cookie cookie : request.getCookies()) {                     //显示cookie
            sb.append("Cookie: ");
            sb.append(cookie.getName());
            sb.append(":");
            sb.append(cookie.getValue());
            sb.append("<br>");
        }

        sb.append("getMethod: " + request.getMethod() + "<br>");                   //其他一些内容显示
        sb.append("getPathInfo: " + request.getPathInfo() + "<br>");
        sb.append("getQueryString:" + request.getQueryString() + "<br>");
        sb.append("getRequestURI:" + request.getRequestURL() + "<br>");
        return sb.toString();
    }

 

效果图

技术图片

2.response

    @RequestMapping(value = {"/response"})
    @ResponseBody
    public String response(@CookieValue(value = "nowcoderid",defaultValue = "a") String nowcoderid,
                           @RequestParam(value = "key",defaultValue = "key")  String key,
                           @RequestParam(value = "value",defaultValue = "value") String value,
                           HttpServletResponse response){
        response.addCookie(new Cookie(key,value));
        response.addHeader(key,value);
        return "Nowcoderid From Cookie: " + nowcoderid;
    }
技术图片
response.addCookie(new Cookie(key,value));//会将nowcoderid写入

 

 六、重定向

301:永久转移                 //第二次就直接请求服务器的跳转页

302:临时转移

    @RequestMapping("/redirect/{code}")
    public RedirectView redirect(@PathVariable("code") int code){
        RedirectView red = new RedirectView("/",true);
        if(code == 301){
            red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);          //设置成永久性跳转

        }
        return red;
    }

第二种方法:(永远302跳转)

    @RequestMapping("/redirect/{code}")
    public String redirect(@PathVariable("code") int code){

        return "redirect:/";
    }

}

 

 

七、错误处理

    @RequestMapping(value = {"/admin"})
    @ResponseBody
    public String admin(@RequestParam(value = "key", required = false) String key) throws IllegalAccessException {
        if ("admin".equals(key)) {
            return "Hello admin!";
        }
        throw new IllegalAccessException("Key error");
    }

    @ExceptionHandler                               //自定义错误处理函数
    @ResponseBody
    public String error(Exception e) {
        return "error: " + e.getMessage();
    }

效果图

1.出错页

技术图片

2.成功页

 技术图片

 

八、Spring IOP AOP

参考网站:https://docs.spring.io/spring/docs/current/spring-framework-reference/

IOP

技术图片

 

 例子IOP

1.创建service文件,ToutiaoService

技术图片

 

@Service
public class ToutiaoService {
    public String say(){
        return "This is from ToutiaoService.";
    }
}

在controller文档使用,我用的是IndexController

 技术图片

 

技术图片

 

2.AOP

底层其实用的是:Aspectj

举例:

1.创建文件LogAspect 

技术图片

@Aspect
@Component
public class LogAspect {
    private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);

    @Before("execution(* com.nowcoder.toutiao.controller.IndexController.*(..))")           //对使用此切面的范围,进行划分
    public void beforeMethod(JoinPoint joinPoint) {
        StringBuilder sb = new StringBuilder();
        for (Object arg:joinPoint.getArgs()){
            sb.append("arg:" + arg.toString() + "|");
        }
        logger.info("before method" + sb.toString());
    }

    @After("execution(* com.nowcoder.toutiao.controller.IndexController.*(..))")
    public void afterMethod(JoinPoint joinPoint) {
        logger.info("after method");
    }
}

在访问范围内的网页后:

技术图片

 

技术图片

 

以上是关于Spring入门和模板语法的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序第七天WXML语法之模板用法

Spring Boot入门——使用模板FreeMaker

Spring MVC 3.2 Thymeleaf Ajax 片段

Spring boot:thymeleaf 没有正确渲染片段

Django入门学习--深入模板(templates)

Django入门学习--深入模板(templates)