SpringBoot Vue 前后端分離 測試demo項目


上一篇寫了直接從url地址下載圖片到本地,最近在學springboot,就試寫了一個springboot和vue前后端分離展示的demo,簡單來說就是后端返回Json數據,前端Vue通過axios請求來獲取解析。

期間遇到了幾個問題,需要注意,如下:

1.一般來說會有跨域請求問題出現,原因是后端占用了一個端口,前端端口不匹配。解決方法就是在springboot 中新建一個配置類,修改默認配置,

2.js for循環中調用其它函數會因為變量問題導致循環提前終止。所有for循環中的變量最好不同,如 i,j,k

 

一:實際根據url請求地址爬取內容返回

package com.yaimer.test.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: SpringBootMyBatisPuls
 * @description: 爬取地址
 * @author: Guistar_yaimer
 * @create: 2020-07-22 16:02
 **/

public class test {
    private static String s;

    public static String getHtml(String urlString) {
        try {
            StringBuffer html = new StringBuffer();
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            InputStreamReader isr = new InputStreamReader(conn.getInputStream());
            BufferedReader br = new BufferedReader(isr);
            String temp;
            int a=0;
            while ((temp = br.readLine()) != null) {
                a=a+1;
                //System.out.println(a);
                html.append(temp).append("\n");
                if (a==42){
                    //該頁面第四十二行 name值
                    //System.out.println("============第四十二=============="+temp);
                    s="";
                    s=temp;
                }
            }
            br.close();
            isr.close();
            return html.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static List<String> getJson(){
        List<String> list = new ArrayList<>();
        //只展示該話漫畫四頁內容,
        for (int i = 1; i < 5; i++) {

            String src="http://www.hhimm.com/cool79471/"+i+".html?s=5&d=0";

            getHtml(src);

            String ss =s.trim();

            String sss =ss.substring(ss.indexOf("name="),ss.indexOf("onerror"));

            String ssss = sss.substring(6,sss.length()-2);

            list.add(ssss);
            System.out.println(ssss);
        }
        System.out.println("完畢--over");
        return list;
    }
}

二:controller類,本地請求地址

package com.yaimer.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @program: SpringBootMyBatisPuls
 * @description:
 * @author: Guistar_yaimer
 * @create: 2020-07-22 19:01
 **/

@Controller
public class testController {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "濱邊美波";
    }

    @ResponseBody
    @RequestMapping("/yel")
    public List<String> yel(){
        return test.getJson();
    }
}

 三:需要修改的配置

package com.yaimer.test.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @program: SpringBootMyBatisPuls
 * @description: vue axios 出現跨域請求錯誤
 * @author: Guistar_yaimer
 * @create: 2020-07-26 18:57
 **/
@Configuration
public class conf implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET","POST","HEAD","PUT","DELETE","OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

 

 

以上就是后端業務代碼,

 

:前端

 

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
</head>
<script src="js/jquery-1.8.3.js"></script>
<script src="js/axios.js"></script>
<script src="js/vue.js"></script>

<body>
    <div id="app">
        <p>{{ message }}</p>
        <button @click="getJpg">獲取</button><br />

        <!-- 
            <img style="width: 500px;height: auto;"
            src="http://20.94201314.net/dm05//ok-comic05/J/JingBaoYouXi/vol_001/99770_0002_14121.JPG" > -->
        <div id="soul">
            <!-- <img  style="display: block;width: 500px;height: auto;" :src="message" /> -->
            <ul>
                <li v-for="(iu,index) in jpgs">
                    <img style="display: block;width: 500px;height: auto;" :src=iu />
                </li>
            </ul>
        </div>
    </div>

    <br />
    <br />

</body>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: '朴智妍 iu',
            jpgs: []
        },
        methods: {
            getJpg: function () {
                var that = this;
                axios.get("http://localhost:8080/yel")
                    .then(function (response) {
                        console.log(response);

                        console.log("Size:" + response.data.length);
                        for (j = 0; j < response.data.length; j++) {
                            that.getNum(response.data[j]);
                        }

                        console.log("length:"+that.jpgs.length)

                    })
                    .catch(function (error) {

                    })
            },
            getNum: function (s) {
                /* var s="yexoooxopexytxqqxoooxopqxoptxqqxywxtuxyexeyxyexeyxoptxoopxopuxrrxqexoooxwqxoooxooexwwxoptxyexoowxoooxopwxqtxywxywxyqxyextextexttxttxywxqtxywxywxtexttxqtxyqxtrxtpxtyxtuxyrxeyxwpxeopoiuytrewqxpqb"; */
                var x = s.substring(s.length - 1);
                var w = "abcdefghijklmnopqrstuvwxyz";
                var xi = w.indexOf(x) + 1;
                var sk = s.substring(s.length - xi - 12, s.length - xi - 1);
                s = s.substring(0, s.length - xi - 12);
                var k = sk.substring(0, sk.length - 1);
                var f = sk.substring(sk.length - 1);
                for (i = 0; i < k.length; i++) {
                    eval("s=s.replace(/" + k.substring(i, i + 1) + "/g,'" + i + "')");
                }
                var ss = s.split(f);
                s = "";
                for (i = 0; i < ss.length; i++) {
                    s += String.fromCharCode(ss[i]);
                }
                this.message = "http://20.94201314.net/dm05/" + s;
                //console.log(s)
                this.jpgs.push("http://20.94201314.net/dm05/" + s);

            }
        }
    })
</script>

</html>

 

基於只是簡單了解前后端分離而寫,不是很嚴謹;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM