• 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");
        }
    }

    在访问范围内的网页后:

  • 相关阅读:
    java学习之旅(一):BOS项目使用的技术以及开发环境
    spring手动回滚
    tomcat下配置多端口,多项目
    centos7安装Mysql5.6
    windows phone7 下 Silverlight 异步读取网络图片
    Sencha Touch 本地化存储配置
    LCD1602显示接收的串口通讯字串
    QML 怎么在gridview中用Index定位? 怎么在代理中设置背景?
    89C52定时/计数器
    QML JSON 展示
  • 原文地址:https://www.cnblogs.com/zxj-262410/p/10879882.html
Copyright © 2020-2023  润新知