个人博客网站记录 1

之前说过想做一个自己的网站,一开始考虑用python做吧,然后思索再三还是考虑用java来做,python来做网站生态和java比起来差距还是有点大的。然后每天回去一边学一边做,生怕忘记做到哪了,就顺手就做了一些记录,网站现在马马虎虎也算是基本有个样子出来了吧,功能都只写了个大概,后面还有很多东西要改,很多东西要学。

1、提示某个依赖不存在时:

比如刚安装的idea,创建项目时没有勾选jdbc api,在pom.xml中配置依赖时报错找不到:

<dependency>          
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

先把上面的内容添加到pom.xml中,然后右击项目,选择最后面的Maevn,点击重新加载项目,然后就会自动下载这个包了。也可以自己下载依赖,放到路径下。

2、使用特殊字体:

直接从各大字体网站下载ttf字体文件,放到项目的static目录中后,就可以在css中引入了,引入方式:

<style>
@font-face {
            font-family: yangFont;
            src: url('font-style/yangrendong.ttf');
        }
</style>        

使用时用class

.yangFont{
    font-family:yangFont,serif;
}

也可以直接使用有字库的接口,地址:https://www.webfont.com/onlinefont/index/1

找到喜欢的字体点进去有现成的代码,贴过去就能看到效果了。不过使用一段时间后会收费。

<script type="text/javascript" 
src="http://cdn.repository.webfont.com/wwwroot/js/wf/youziku.api.min.js">
</script>

<script type="text/javascript">
   $webfont.load("body", "13911088238b4090a6208ec754ba1c3c", "LiDeBiao-Xing3");
   /*$webfont.load("#id1,.class1,h1", "13911088238b4090a6208ec754ba1c3c", "LiDeBiao-Xing3");*/
   /*...*/
   $webfont.draw();
</script>

在这里插入图片描述

3、网址请求跳转:

创建indexController.java

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class indexController {
    @RequestMapping(value ="/home",method = RequestMethod.GET)   //路径为home ,get方式执行以下函数
    public String Home()
    {
        System.out.println("当前是home页面");
        return "index";                              //返回到index.html
    }

    @RequestMapping(value ="/article",method = RequestMethod.GET)    //路径为article ,get方式执行以下函数
    public String Article(ModelMap map)
    {
        return "article";                           //返回到article.html
    }
    @RequestMapping(value ="/photoGraph",method = RequestMethod.GET)    //路径为photoGraph ,get方式执行以下函数
    public String Photo()
    {
        return "photoGraph";                        //返回到photoGraph.html
    }
}

@RequestMapping(value,method)中的value是网页地址,return 是地址关联的html页面。如value="home"return "index" 就可以通过localhost:8080/home访问index.html了,后面不加地址就会默认访问index.html

4、加载页面时,给前端传值:

前提是添加了thymeleaf依赖。

比如在index.html添加下面代码,th可能会红线提示错误,不管它:

<p th:text="${key1}"></p>
<div th:text="'key =' +${key2}"></div>

controller中这样写:

import org.springframework.ui.ModelMap;
@RequestMapping("/home")
public String index(ModelMap map) {
    map.addAttribute("key1","111");
    map.addAttribute("key2","222");
    return "index";
    }

在这里插入图片描述
除了th:text传值外,还有th:utext可以进行传值,它们两个的区别在于text只负责传递内容,而utext能够解析里面的html。比如:

<div th:text="'key = <br>' +${key}"></div>
<div th:utext="'key = <br>' +${key}"></div>

key传值1

  • text输出为:
key = <br> 1
  • utext输出为:
key = 
1
5、不存在的页面返回404:

最查找方法看到的是这个版本:

@RequestMapping("*")
public String notFound(){
    return "404";  //自己写的404页面
}

就是对所有没有映射到mapping的网页都跳转到404,但是这个只针对没有mapping的一级后缀网页,比如对于localhost:8080/dhaj可以返回404页面,但是对于localhost:8080/dhaj/hjksahdjlocalhost:8080/dhaj/hsadjh/asjdhsaj这种二级三级后缀的网页,如果不存在时就尾了。

后来通过404的报错信息,看到提示这个页面是因为没有配置/error页面的映射,那我就应该可以配置error映射到自己定义的网页了,就不需要像上面那个一样去针对地址了,只要报错,我就返回到自定义的页面就行了。

但是不是直接@RequestMapping("error")然后return页面就可以的,后来在 https://www.cnblogs.com/yaoyuan2/p/11880375.html 找到了方法。

创建一个errorPageConfig java类:

package com.example.myblogweb.config;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class errorPageConfig implements ErrorController {
    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        return "404";   //返回404页面,即自定义页面
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

上面的代码中我是仍何错误都无脑返回同一个页面的,做细一点就可以通过HttpServletRequest request判断错误类型来返回不同页面,并输出错误信息。

404.html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="source/eleCat.png" type="image/x-icon">
    <title>Title</title>
</head>
<body>
<div th:utext="'错误码:'+${errCode}+'<br>'+'错误信息:'+${errMess}"></div>
</body>
</html>

errorPageConfig.java

package com.example.myblogweb.config;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class errorPageConfig implements ErrorController {
    @RequestMapping("/error")
    public String handleError(HttpServletRequest request, ModelMap map) {
        Integer errCode = (Integer) request.getAttribute("javax.servlet.error.status_code");  //错误码
        Exception errMess = (Exception) request.getAttribute("javax.servlet.error.exception");  //错误信息
        map.addAttribute("errCode",errCode);
        map.addAttribute("errMess",errMess);
        return "404";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

当页面不存在返回404错误时:
在这里插入图片描述

6、使用mysql数据库:
(1)配置数据库和jdbc:

首先要安装好mysql,然后点击右边数据库:
在这里插入图片描述
然后加号选择数据源:
在这里插入图片描述
创建好数据源就填写用户名密码,主机中的数据库名,URL右数据库服务端口+数据库名组成:
在这里插入图片描述

然后点击测试链接,可能会提示时区不对,把serverTimezone改为Asia/Shanghai
在这里插入图片描述
再次测试,就成功了:
在这里插入图片描述
此时可以在加号下的查询控制台中使用sql了:
在这里插入图片描述
要在java中使用mysql还要配置一下,在pox.xml中添加mysqljdbc

<dependency>          
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

application.yml中添加配置,用户名密码我是按照刚刚数据库配置中写的填的:

spring:
  datasource:
    name: localhost
    url: jdbc:mysql://localhost:3306/mydatabase #数据库端口,mydatabase是使用的数据库名
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

此时要在java中使用数据库时首先在controller中引入JdbcTemplate,然后使用JdbcTemplate控制数据库了。

(2)使用JdbcTemplate:
  • 查询某一个属性时,可以像这样写:
public class indexController {
    @Autowired   
    private JdbcTemplate jdbcTemplate;     //JdbcTemplate对象

    @RequestMapping(value ="/article",method = RequestMethod.GET) 
    public String Article(ModelMap map)
    {
        String sql = "select articleId from articleInfo";
        String articleId = jdbcTemplate.queryForObject(sql, String.class);  //只能Integer或String
        //接收的变量也用Integer或String,除非转类型
        System.out.println(articleId);
        
        return "article";   //返回 article.html,无关
    }

当我打开网页时,就会输出了一条查询记录啦:
在这里插入图片描述
queryForObject只会返回一个结果。

  • 当查询结果有多条,或查询多个字段元素时可以这样:
String sql = "select articleId,createdDate,createdTime,readNm,articleName,up,comment from articleInfo";
List<Map<String, Object>> article = jdbcTemplate.queryForList(sql);  //返回字符串
System.out.println(article.get(0));  //输出第一条记录的所有字段
System.out.println(article.get(0).get("articleName"));   //输出第一条记录的articleNm字段

输出结果:
在这里插入图片描述

  • 进行增删改时,可以使用jdbcTemplate.update
String sql = "delete from article WHERE articleId=?;";
int i = jdbcTemplate.update(sql,1);    //此处1为sql的参数,idea会在此处提示args
System.out.println("删除了"+i+"条数据");

输出结果:
在这里插入图片描述

7、动态网址网页:

在原本网址后面添加后缀{articleID},并将articleID作为下方数据库查询的参数,查询到这篇文章的文章信息,然后通过addAttribute将文章的信息加载到前端页面,就简单的实现了一个打开到文章的功能:

@RequestMapping(value ="/article/{articleID}",method = RequestMethod.GET)     
public String Article(@PathVariable("articleID") String articleID, ModelMap map)
{
    String sql = "select articleId,createdDate,articleText,readNm,articleName,up,comment " +
            "from articleInfo where articleId = ?";
    //article作为参数
    List<Map<String, Object>> article = jdbcTemplate.queryForList(sql,articleID);  
    if (article.size() == 0)  
    {
        //没有找到这个文章的ID,返回404。
        map.addAttribute("errCode","404");
        map.addAttribute("errMess","文章不存在");
        //注意了,这个404不是数字,是自己画的 404.html 页面
        return "404";
    }
    else {  //找到该文章
        //浏览量+1
        Integer readNm = (Integer) article.get(0).get("readNm");   //string转integer
        readNm+=1;
        //更新浏览量
        String updateReadNm = "update articleinfo set readNm = ? where articleId = ?";  
        jdbcTemplate.update(updateReadNm,readNm,articleID);
        //文章信息加载到前端页面中
        map.addAttribute("articleName", article.get(0).get("articleName"));   //文章名
        map.addAttribute("createdDate", article.get(0).get("createdDate"));   //创建日期
        map.addAttribute("articleText", article.get(0).get("articleText"));  //文章内容
        map.addAttribute("readNm", article.get(0).get("readNm"));       //阅读数
        map.addAttribute("comment", article.get(0).get("comment"));     //评论数
        map.addAttribute("up", article.get(0).get("up"));             //点赞数
        return "article";    //跳转到 article
    }
}

数据库中有两篇文章信息,所以在浏览器输入请求192.168.1.5:8080/article/1,即打开到第一篇文章:
在这里插入图片描述

到达的页面还是article.html,只是添加了它的网址后缀和一些文章的信息,同时看到数据库,浏览量也从199变成了200
在这里插入图片描述
不过这样刷新也会增加浏览量,由于是我个人的博客,也就无所谓啦。

8、对8080页面重定向:

8080页面会自动定向至index.html,同时也作为通过域名访问的页面,但是由于比我的主页的路径不同,所以8080页面有的资源不加载,所以干脆给他重定向,当然也可以跳转到其他页面。

//对8080页面进行重定向
    //8080页重定向
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView redirect(ModelMap map, ModelAndView view) {

        view.setViewName("redirect:/home");
        return view;
    }

这样每次访问8080页面就会自动跳转到 localhost:8080/home页面了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值