• springbooot


    Srpingboot记录

    一、HelloWorld

    依赖

    <parent>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-parent</artifactId>

            <version>1.5.9.RELEASE</version>

        </parent>

        <dependencies>

          <!—SpringBoot web 组件 -->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

            </dependency>

        </dependencies>

    spring-boot-starter-parent作用

    在pom.xml中引入spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供dependency management,也就是说依赖管理,引入以后在申明其它dependency的时候就不需要version了,后面可以看到。

    spring-boot-starter-web作用

    springweb 核心组件

    创建HelloController类,内容如下

     

    @RestController

    @EnableAutoConfiguration

    publicclass HelloController {

         @RequestMapping("/hello")

         public String index() {

              return"Hello World";

         }   

    publicstaticvoid main(String[] args) {

              SpringApplication.run(HelloController.class, args);

         }

    }

    2.4、@RestController

    在上加上RestController 表示修饰该Controller所有的方法返回JSON格式,直接可以编写

    Restful接口

    2.5、@EnableAutoConfiguration

    注解:作用在于让 Spring Boot   根据应用所声明的依赖来对 Spring 框架进行自动配置
            这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

    2.6 SpringApplication.run(HelloController.class, args);

       标识为启动类

    2.7、SpringBoot启动方式1

    Springboot默认端口号为8080

     

    @RestController

    @EnableAutoConfiguration

    publicclass HelloController {

         @RequestMapping("/hello")

         public String index() {

              return"Hello World";

         }   

    publicstaticvoid main(String[] args) {

              SpringApplication.run(HelloController.class, args);

         }

    }

    启动主程序,打开浏览器访问http://localhost:8080/index,可以看到页面输出Hello World

    2.8、SpringBoot启动方式2

    @ComponentScan(basePackages = "com.itmayiedu.controller")---控制器扫包范围

    @ComponentScan(basePackages = "com.itmayiedu.controller")

    @EnableAutoConfiguration

    public class App {

          public static void main(String[] args) {

                SpringApplication.run(App.class, args);

          }

    }

    说明:@RestController登陆Controller+Responsebody,用原生的SpringMVC也是可以的!

    二、静态资源访问

    在src/main/resources/目录下创建如下规定的目录:

    /static

    /public

    /resources

    /META-INF/resources

    这是springboot已经配置好了的静态资源映射。注意:路径是不带static或者public的,已经映射好了。

    三、自定义异常拦截器

    1.拦截器代码(跟SpringMVC相同)

    package com.loger.interceptor;

    import com.alibaba.fastjson.JSON;

    import com.alibaba.fastjson.JSONObject;

    import org.springframework.web.servlet.HandlerInterceptor;

    import org.springframework.web.servlet.ModelAndView;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.PrintWriter;

    /**

     * Create by Loger

     * SpringMVC拦截器

     */

    public class ExceptionInterceptor implements HandlerInterceptor {

        public boolean preHandle(HttpServletRequest request,

                                 HttpServletResponse response, Object handler) throws Exception {

            return true;

        }

        public void postHandle(HttpServletRequest request,

                               HttpServletResponse response, Object handler,

                               ModelAndView modelAndView) throws Exception {

        }

        public void afterCompletion(HttpServletRequest request,

                                    HttpServletResponse response, Object handler, Exception ex)

                throws Exception {

            JSONObject msg = new JSONObject();

            if (ex != null) {

                msg.put("result", "fail");

                msg.put("code", "system.error");

                msg.put("msg", "系统错误");

                String json = JSON.toJSONString(msg);

                response.setContentType("application/json;charset=UTF-8");

                response.setHeader("Pragma", "No-cache");

                response.setHeader("Cache-Control", "no-cache");

                response.setDateHeader("Expires", 0);

                PrintWriter out = response.getWriter();

                out.print(json);

                out.flush();

                out.close();

            }

        }

    2.拦截器配置

    @Configuration

    public class WebConfig extends WebMvcConfigurerAdapter {

        @Override

        public void addInterceptors(InterceptorRegistry registry) {

            registry.addInterceptor(new ExceptionInterceptor());

            super.addInterceptors(registry);

        }

    }

    3.main方法扫包

    @ComponentScan(basePackages = {"com.loger.controller","com.loger.common"})

    @EnableAutoConfiguration//标识为启动类

    public class Main {

        public static void main(String [] args){

            SpringApplication.run(Main.class,args);

        }

    }

    说明:扫描到config所在的包

    四、springboot中使用原生Servlet的东西

    1.过滤器

    @WebFilter(filterName = "test",urlPatterns = "/*")

    public class TestFilter implements Filter {

        @Override

        public void init(FilterConfig filterConfig) throws ServletException {

            System.out.println("过滤器被初始化了");

        }

        @Override

        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

            HttpServletRequest request = (HttpServletRequest) servletRequest;

            StringBuffer requestURL = request.getRequestURL();

            System.out.println("请求的url:"+requestURL);

            filterChain.doFilter(servletRequest,servletResponse);

        }

        @Override

        public void destroy() {

            System.out.println("过滤器被销毁了");

        }

    }

    2.监听器

    @WebListener

    public class TestListener implements ServletRequestListener {

        @Override

        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {

            System.out.println("请求销毁了了:"+servletRequestEvent.getServletRequest().getRemoteAddr());

        }

        @Override

        public void requestInitialized(ServletRequestEvent servletRequestEvent) {

            System.out.println("请求进来了:"+servletRequestEvent.getServletRequest().getRemoteAddr());

        }

    }

    3.servlet

    @WebServlet(value = "/testServlet")

    public class TestServlet extends HttpServlet {

        @Override

        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

            System.out.println("请求了TestServlet");

            resp.setCharacterEncoding("utf-8");

            PrintWriter out = resp.getWriter();

            out.print("响应给你");

        }

    }

    4.扫包

    @ServletComponentScan(basePackages = {"com.loger.filter","com.loger.listener","com.loger.servlet"})

    @ComponentScan(basePackages = {"com.loger.controller","com.loger.common"})

    @EnableAutoConfiguration//标识为启动类

    public class Main {

        public static void main(String [] args){

            SpringApplication.run(Main.class,args);

        }

    }

    五、项目路径问题

    @RequestMapping(value = "/path")

        public Object path(HttpServletRequest request){

            //这种写法springboot不支持

    //        String path = this.getClass().getClassLoader().getResource("/").getPath();

    //        System.out.println(path);

            return request.getServletContext().getRealPath("/");

        }

    不支持this这种写法

    六、页面(freeMark)

    推荐使用freeMark,不推荐使用jsp。如果使用jsp,那就需要建立webapps、web-inf目录,这跟web工程就没什么区别了。

    1.依赖

    <!-- 引入freeMarker的依赖包. -->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-freemarker</artifactId>

            </dependency>

    2.配置文件

    新建application.properties文件,在resources目录下

    #freeMark配置

    spring.freemarker.allow-request-override=false

    spring.freemarker.cache=true

    spring.freemarker.check-template-location=true

    spring.freemarker.charset=UTF-8

    spring.freemarker.content-type=text/html

    spring.freemarker.expose-request-attributes=false

    spring.freemarker.expose-session-attributes=false

    spring.freemarker.expose-spring-macro-helpers=false

    spring.freemarker.suffix=.ftl

    spring.freemarker.template-loader-path=classpath:/templates/

    3.代码

    @RequestMapping

        public String index(HttpServletRequest request){

            request.setAttribute("name","Loger");

            return "index";

        }

    4.页面

    <!DOCTYPE html>

    <html>

    <head lang="en">

        <meta charset="UTF-8"/>

        <title>ftl页面</title>

    </head>

    <body>

    ${name}

    </body>

    </html>

    七、文件上传

    1.单文件上传

    /**

         * 单文件上传

         * @param file2

         * @return

         */

        @RequestMapping(value = "/upload",method = RequestMethod.POST)

        public Object upload(MultipartFile file2){

            //说明:使用MultipartFIle不需要进行配置,使用CommonsMultipartFile是需要配置的

            //参数名可以与文件name属性对应,也可以使用@RequestParam指定

            File save = new File("D:\"+file2.getOriginalFilename());

            try {

                System.out.println(file2.getName()+" "+file2.getOriginalFilename());

                file2.transferTo(save);

            } catch (IOException e) {

                e.printStackTrace();

                return "fail";

            }

            return "success";

        }

    2.多文件上传

    /**

         * 多文件上传

         * @return

         */

        @RequestMapping(value = "/upload2",method = RequestMethod.POST)

        public Object upload2(HttpServletRequest request){

            List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");//这个file对应表单名

            for(MultipartFile file:files){

                File save = new File("d:\"+file.getOriginalFilename());

                try {

                    file.transferTo(save);

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            return "success";

        }

    3.页面代码

    <!DOCTYPE html>

    <html lang="en">

    <head>

        <meta charset="UTF-8">

        <title>Title</title>

    </head>

    <body>

    你能访问到我吗???

    <form action="/upload2" method="post" enctype="multipart/form-data" >

        <input name="file" type="file"><br>

        <input name="file" type="file"><br>

        <input name="file" type="file"><br>

        <input type="submit" value="上传">

    </form>

    </body>

    </html>

    4.上传文件大小限制配置

    在application.properties文件中添加如下配置

    #文件上传设置

    spring.http.multipart.maxFileSize=100Mb

    spring.http.multipart.maxRequestSize=1000Mb

    八、整合jdbc-template

    依赖

    <!-- jdbc-template -->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-jdbc</artifactId>

            </dependency>

            <dependency>

                <groupId>mysql</groupId>

                <artifactId>mysql-connector-java</artifactId>

                <version>5.1.21</version>

            </dependency>

    application.properties配置

    #JDBCTemplate

    spring.datasource.url=jdbc:mysql://localhost:3306/db_test

    spring.datasource.username=root

    spring.datasource.password=apple

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    增删改

    都是使用jdbcTemplate.unpdate();方法

    public void delete(int id){

        jdbcTemplate.update("DELETE FROM `user` WHERE id=?;",id);

    }

    首先需要一个Mapper映射:

    然后使用query方法:

    事务管理

    在Service方法上加@Transactional注解即可。

    springboot整合Mybatis

    依赖

    <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->

            <dependency>

                <groupId>org.mybatis.spring.boot</groupId>

                <artifactId>mybatis-spring-boot-starter</artifactId>

                <version>1.3.1</version>

            </dependency>

    数据源

    跟jdbctemplate的数据源一样的

    #Mybatis

    spring.datasource.url=jdbc:mysql://localhost:3306/db_test

    spring.datasource.username=root

    spring.datasource.password=apple

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    mapper接口

    这里使用注解的形式

    public interface UserMapper {

        @Select("select id,name,age from user where id=#{id}")

        User select(Integer id);

    }

    启动类扫包

    扫描mapper接口所在的包

    @MapperScan(value = "com.loger.mapper")

    打包发布

    在pom文件中添加:

    <build>

            <plugins>

                <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-compiler-plugin</artifactId>

                    <configuration>

                        <source>1.8</source>

                        <target>1.8</target>

                    </configuration>

                </plugin>

                <plugin>

                    <groupId>org.springframework.boot</groupId>

                    <artifactId>spring-boot-maven-plugin</artifactId>

                    <configuration>

                        <maimClass>com.loger.main.Main</maimClass>

                    </configuration>

                    <executions>

                        <execution>

                            <goals>

                                <goal>repackage</goal>

                            </goals>

                        </execution>

                    </executions>

     

                </plugin>

            </plugins>

        </build>

  • 相关阅读:
    Web_0002:关于MongoDB的操作
    JN_0008:win下通过cmd进入指定目录
    H5_0008:链接分享图片和判断平台
    H5_0007:使用base64做为背景图片
    JN_0007:微信昵称设置小数字
    H5_0006:JS判断PC,平板,手机平台的方法
    H5_0002:微信分享设置
    Web_0001:关于阿里云防盗链Referer,CDN加速,OSS自定义域名的操作
    H5_0001:localStorage本地存储
    JN_0006:MongoDB未授权访问漏洞处理
  • 原文地址:https://www.cnblogs.com/da-peng/p/9064318.html
Copyright © 2020-2023  润新知