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入门和模板语法的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 3.2 Thymeleaf Ajax 片段