核心方法:常见的SEO优化和关键词挖掘工具
优采云 发布时间: 2022-11-15 11:57核心方法:常见的SEO优化和关键词挖掘工具
搜索引擎优化常用工具:
网站站长网络 - 网站站长工具:
百度统计:
谷歌关键词工具:
爱站网络工具:
百度指数:
关键词目的:通过关键词的优化来提高关键词排名,最终为网站带来流量。
关键词流量分类:主页
关键词流量:首页权重高,可能很容易排名;内页关键词流量:同样可以带来流量,查看您的内页优化。
也就是说,您的网站流量主要来自主页和内部页面。有的网站放弃首页关键词,主要以首页为网站名,通过内页做流量,比如:Erge Society,有的要靠首页做流量。一般来说,如果你网站广泛的内容,你可以选择前者,如果你网站专业,你可以选择后者。当然,有些网站首页和内页都关键词来吸引流量,比如“手机”。在这里,您应该知道要选择哪一个关键词,这涉及优化您的网站标题。
声明:本网站的所有文章,如无特殊说明或标记,均由本站原创发布。未经本网站同意,任何个人或组织不得将本网站的内容复制、盗用、采集或发布到任何网站、书籍和其他媒体平台。如果本站内容侵犯了原作者的合法权益,您可以联系我们进行处理。
解决方案:【Java】Spring boot快速上手(三)前后端分离实现小程序登录(接口篇
系列 文章 目录
大家好,这一系列的快速上手学习到此结束。如果看不懂注解和整个springboot架构,建议看视频继续补。有些事你今天不明白,明天你就会明白。可能这跟学习能力有关,文中能表达的意思有限,关键还是看解释。后面会出一个综合性的springboot实战项目。但是,由于时间和精力有限,这个快速入门系列无法继续。
【Java】Spring boot快速入门(一):向日葵合集
【Java】Spring boot快速入门(二):参数传递
视频推荐:
Springboot极简教程,5分钟写一个http接口
文章目录
前言
例如:
1.新建一个spring项目
创建一个springboot项目
安装一些依赖
等待安装
2.建立设计数据库
由于本地没有mysql服务,所以我用服务器ip作为演示。可以下载一个phpstudy,配置完成后运行mysql。
创建一个新的用户表
创建字段
CREATE TABLE `qianxun`.`User` ( `id` INT NOT NULL AUTO_INCREMENT , `username` VARCHAR(20) NOT NULL , `password` VARCHAR(20) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
创建后输入账号密码
3.配置环境,编写界面
spring.application.name=demo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.name=user
spring.datasource.url=jdbc:mysql://localhost:3306/qianxun?serverTimezone=UTC
spring.datasource.username=qianxun
spring.datasource.password=123123
server.port=8080
mybatis.mapper-locations=classpath:mappers/*xml
mybatis.type-aliases-package=com.example.demo.mybatis.entity
配置好后运行测试,如果没有报错,说明数据库已经连接上了
配置mybatis框架(扫描mapper文件)
代码
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
创建 3 个新包
创建实体类,在实体文件夹下新建User.java完成字段映射,如下图
上一篇文章提到构造函数使用alt+ins弹出快捷键
完成构造函数的编辑,可以用刚才的lomb函数省略
所以(注意需要匹配数据库字段)
用户.java
package com.example.demo.entity;
import lombok.Data;
@Data
public class User {
private int id;
private String username;
private String password;
}
在mapper文件夹下新建UserMapper.java
package com.example.demo.mapper;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("select id from User where username = #{username}")
String findById(String username);
}
在controller文件夹下新建UserController.java
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
UserMapper userMapper;
// 引用spring容器资源
@GetMapping("/{username}")
public String findById(@PathVariable("username") String username) {
return userMapper.findById(username);
}
}
用户访问controller的api路径,例如
:8080/用户/123
通过get查询用户名是否存在,存在则返回id值
但是我们登录需要两个参数账号和密码
所以需要改参数才能接收
UserController.java 部分
@RequestMapping(value="/login")
public String logins(@RequestParam("username") String username,
@RequestParam("password") String password) {
System.out.println("username is:" + username);
System.out.println("password is:" + password);
}
使用权
:8080/用户/登录?用户名=123&密码=123
通过接口返回
UserController.java 部分
@RequestMapping(value="/login")
public String logins(@RequestParam("username") String username,
@RequestParam("password") String password) {
System.out.println("username is:" + username);
System.out.println("password is:" + password);
String id=userMapper.findById(username,password);
System.out.println(id);
if (id!=null){
return "{\"code\": 200, \"msg\": \"登陆成功\", \"data\": \"登陆成功\"}";
}else{
return "{\"code\": 202, \"msg\": \"登陆失败\", \"data\": \"登陆失败\"}";
}
}
因为查到的数据需要放在data中,所以我们要改代码,通过之前构造的映射返回查到的数据
所以
@RequestMapping(value="/login")
public String logins(@RequestParam("username") String username,
@RequestParam("password") String password) {
System.out.println("username is:" + username);
System.out.println("password is:" + password);
String id=userMapper.findById(username,password);
System.out.println(id);
if (id!=null){
List result=userMapper.login(username,password);
return "{\"code\": 200, \"msg\": \"登陆成功\", \"data\": "+result+"}";
}else{
return "{\"code\": 202, \"msg\": \"登陆失败\", \"data\": \"\"}";
}
}
完整代码
用户控制器.java
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
//将下面的返回类型都改为json
@RequestMapping("/user")
public class UserController {
@Resource
UserMapper userMapper;
// 引用spring容器资源
@RequestMapping(value="/login")
public String logins(@RequestParam("username") String username,
@RequestParam("password") String password) {
System.out.println("username is:" + username);
System.out.println("password is:" + password);
String id=userMapper.findById(username,password);
System.out.println(id);
if (id!=null){
List result=userMapper.login(username,password);
return "{\"code\": 200, \"msg\": \"登陆成功\", \"data\": \""+result+"\"}";
}else{
return "{\"code\": 202, \"msg\": \"登陆失败\", \"data\": \"\"}";
}
}
//
}
用户.java
package com.example.demo.entity;
import lombok.Data;
@Data
public class User {
private int id;
private String username;
private String password;
}
UserMapper.java
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("select id from User where username = #{username} and password = #{password}")
String findById(@Param(value = "username")String username,@Param(value = "password")String password);
@Select("select * from User where username = #{username} and password = #{password}")
List login(@Param(value = "username")String username,@Param(value = "password")String password);
}
4. 4包说明
mapper- - - - - - - 增删改查
controller- - - - - -controller(提供对api数据的外部访问)
entity- - - - - - - - 实体类(定义数据类型,与数据库一一对应)
5.一些注意事项
@RestController - - - - - 将下方返回类型转换为json
@RequestMapping()- - - - - 接口、方法路径,使方法通过接口去访问
@Resource- - - - - - - - - 资源引用
六、小程序实现api登录
新建一个小程序项目,这里就不多说了,不知道的可以看我的文章
登录.wxml
帐号
密码
登录
登录.wss
.login-form {
flex: 1;
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: center;
}
.input-group {
display: flex;
align-items: center;
padding: 25rpx 10rpx;
margin: 40rpx 3%;
background: #fff;
border-radius: 5px;
border: 2px solid #f4f4f4;
transition: all .25s ease-in-out;
}
.input-group.active {
<p>
border: 2px solid #7acfa6;
}
.input-label {
color: #888;
font-size: 13pt;
height: 25rpx;
line-height: 25rpx;
padding: 0 25rpx;
border-right: 1px solid #d8d8d8;
}
.input-group input,
.input-group picker {
flex: 1;
font-size: 13pt;
min-height: 52rpx;
height: 52rpx;
line-height: 52rpx;
padding: 0 25rpx;
}
</p>
登录.js
// pages/login/login.js
Page({
/**
* 页面的初始数据
*/
data: {
username:'',
password:''
},
getpw(e){
console.log(e.detail.value)
this.setData({
password:e.detail.value
})
},
getusername(e){
console.log(e.detail.value)
this.setData({
username:e.detail.value
})
},
/**
* 生命周期函数--*敏*感*词*页面加载
*/
onLoad(options) {
},
login:function(){
let that=this;
console.log("登录");
wx.request({
url: 'http://192.168.1.126:8080/user/login',
data:{
username:that.data.username,
password:that.data.password,
},
header: {
'content-type': 'application/json' // 默认值
},
success (res) {
console.log(res.data)
if (res.data.code==200) {
wx.showToast({
title: '登陆成功',
})
} else {
wx.showToast({
title: '登陆失败',
icon:'none'
})
}
}
})
},
/**
* 生命周期函数--*敏*感*词*页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--*敏*感*词*页面显示
*/
onShow() {
},
/**
* 生命周期函数--*敏*感*词*页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--*敏*感*词*页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--*敏*感*词*用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
5.七种引用
1.将请求参数直接写在Controller相应方法的形参中。该场景适用于请求参数较少的情况。
/**
* 1.
直接把请求参数写在
Controller
相应的方法的形参中
* @param username
* @param password
* @return
*/
@RequestMapping("/addUser1")
public String addUser1(String username,String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "success";
}
这里RequestMapping中的请求方式没有限制,所以get和post请求方式都可以。get请求方式我们可以直接在浏览器输入地址,
端口可以自己在application.properties中配置,然后用postman工具测试
2.封装一个bean,直接接收。这里我们使用前面案例中封装的User类来接收。也适用
获取、发布方法。
UserController中的代码如下:
@RequestMapping("/addUser2")
public String addUser2(User user) {
System.out.println("id is:"+user.getId());
System.out.println("username is:"+user.getUsername());
System.out.println("password is:"+user.getPassword());
return "success";
}
此时,我们可以继续使用postman进行测试。注意这里传入的参数名必须和User中的属性名一致(首字母大小写必须一致,已测试),否则无法接收,对应值为null