//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>微博首页</h1>
<div>
<div v-if="isLogin">
<p>欢迎回来{{user.nick}}!</p>
<a href="/insert.html">发布微博</a>
<a href="javascript:void(0)" @click="logout()">登出</a>
</div>
<div v-else>
<a href="/reg.html">注册</a>
<a href="/login.html">登录</a>
</div>
</div>
<script src="js/vue.js"></script>
<script src="js/axios.min.js"></script>
<script>
let v = new Vue({
el:"body>div",
data:{
isLogin:false,
user:{nick:"刘德华"}
},
created:function(){
axios.get("/currentUser").then(function (response){
v.user = response.data;
v.isLogin = v.user==""?false:true;
})
},
methods:{
logout(){
//发出推出登录的请求
axios.get("/logout").then(function (response){
location.reload();
})
}
}
})
</script>
</body>
</html>
insert.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>微博首页</h1>
<div>
<div v-if="isLogin">
<p>欢迎回来{{user.nick}}!</p>
<a href="/insert.html">发布微博</a>
<a href="javascript:void(0)" @click="logout()">登出</a>
</div>
<div v-else>
<a href="/reg.html">注册</a>
<a href="/login.html">登录</a>
</div>
</div>
<script src="js/vue.js"></script>
<script src="js/axios.min.js"></script>
<script>
let v = new Vue({
el:"body>div",
data:{
isLogin:false,
user:{nick:"刘德华"}
},
created:function(){
axios.get("/currentUser").then(function (response){
v.user = response.data;
v.isLogin = v.user==""?false:true;
})
},
methods:{
logout(){
//发出推出登录的请求
axios.get("/logout").then(function (response){
location.reload();
})
}
}
})
</script>
</body>
</html>
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- import CSS -->
<link rel="stylesheet" href="css/eui.css">
</head>
<body>
<h1>发布微博页面</h1>
<div id="app">
<input type="text" v-model="weibo.content" placeholder="请你开始装b....">
<!--name代表上传文件时 文件的参数名-->
<el-upload
action="/upload"
name="picFile"
:limit="1"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-success="handleSuccess"
:on-remove="handleRemove">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<input type="button" value="发布微博" @click="insert()">
</div>
</body>
<!-- import Vue before Element -->
<script src="js/vue.js"></script>
<!-- import JavaScript -->
<script src="js/eui.js"></script>
<script src="js/axios.min.js"></script>
<script>
let v = new Vue({
el: '#app',
data: function() {
return {
dialogImageUrl: '',
dialogVisible: false,
weibo:{
content:"",
url:""
}
}
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
//当点击删除图片时方法会执行
//file代表要删除的文件
//file.response代表文件上传成功时 服务器响应的数据(文件名)
console.log("文件名="+file.response);
//http://localhost:8080/remove?name=xxx.jpg
axios.get("/remove?name="+file.response).then(function (response) {
console.log("服务器图片已经删除")
})
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
insert(){
if(v.weibo.content.trim()==""||v.weibo.url==""){
alert("微博内容或图片不能为空")
return;
}
axios.post("/insert",v.weibo).then(function (response){
if(response.data==1){
alert("添加完成");
location.href="/";
}else{
alert("请先登录");
location.href="/login.html";
}
})
},
handleSuccess(response,file,fileList){
console.log("文件上传完成,图片名字="+response);
v.weibo.url=response;
}
}
})
</script>
</html>
reg.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>注册页面</h1>
<div>
<input type="text" v-model="user.username" placeholder="用户名">
<input type="text" v-model="user.password" placeholder="密码">
<input type="text" v-model="user.nick" placeholder="昵称">
<input type="button" value="注册" @click="reg()">
</div>
<script src="js/vue.js"></script>
<script src="js/axios.min.js"></script>
<script>
let v = new Vue({
el:"div",
data:{
user:{
username:"",password:"",nick:""
}
},
methods:{
reg(){
axios.post("/reg",v.user).then(function (response){
if(response.data==1){
alert("注册成功!");
location.href="/";
}else {
alert("用户名已存在")
}
})
}
}
})
</script>
</body>
</html>
UploadController.class
package cn.tedu.boot51.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
public class UploadController {
@RequestMapping("/upload")
public String upload(MultipartFile picFile) throws IOException {
System.out.println("picFile = " + picFile);
//得到文件原始文件名 a.jpg
String fileName = picFile.getOriginalFilename();
//得到后缀名 从最后一个.出现的位置截取到最后
String suffix = fileName.substring(fileName.lastIndexOf("."));
//得到唯一文件名 UUID.randomUUID()得到一个唯一标识符
fileName = UUID.randomUUID()+suffix;
System.out.println("文件名:"+fileName);
//准备保存图片的文件夹路径
String dirPath = "D:/files";
File dirFile = new File(dirPath);
//如果该文件夹不存在 则创建此文件夹
if (!dirFile.exists()){
dirFile.mkdirs();//创建文件夹
}
//得到文件的完整路径
String filePath = dirPath+"/"+fileName;
//把文件保存到此路径 异常抛出
picFile.transferTo(new File(filePath));
System.out.println("文件保存完成! 请去此路径检查文件是否存在 "+filePath);
return fileName;
}
@RequestMapping("/remove")
public void remove(String name){
String filePath = "D:/files/"+name;
new File(filePath).delete();//删除文件
}
}
UserController.class
package cn.tedu.boot51.controller;
import cn.tedu.boot51.entity.User;
import cn.tedu.boot51.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
@RestController
public class UserController {
@Autowired(required = false)
UserMapper mapper;
@RequestMapping("/reg")
public int reg(@RequestBody User user) {
User u = mapper.selectByUsername(user.getUsername());
if (u != null) {//表示用户已存在
return 2;
}
mapper.insert(user);
return 1;
}
@RequestMapping("/login")
public int login(@RequestBody User user, HttpSession session){
System.out.println("user = " + user);
User u = mapper.selectByUsername(user.getUsername());
if(u!=null){
if(user.getPassword().equals(u.getPassword())){
session.setAttribute("user",u);
return 1;
}
return 3;
}
return 2;
}
@RequestMapping("/currentUser")
public User currentUser(HttpSession session){
//HttpSession 是Object类型 用User接受需要强转
User u = (User)session.getAttribute("user");
return u;
}
@RequestMapping("/logout")
public void logout(HttpSession session){
session.removeAttribute("user");
}
}
WeiboController.class
package cn.tedu.boot51.controller;
import cn.tedu.boot51.entity.User;
import cn.tedu.boot51.entity.WeiBo;
import cn.tedu.boot51.mapper.WeiboMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
import java.util.Date;
@RestController
public class WeiboController {
@Autowired(required = false)
WeiboMapper mapper;
@RequestMapping("/insert")
public int insert(@RequestBody WeiBo weibo, HttpSession session){
User u = (User) session.getAttribute("user");
if(u==null){
return 2;
}
weibo.setCreated(new Date());
weibo.setUserId(u.getId());
weibo.setNick(u.getNick());
System.out.println("weibo = " + weibo);
mapper.insert(weibo);
return 1;
}
}
WeiBo.class
package cn.tedu.boot51.entity;
import java.util.Date;
public class WeiBo {
private Integer id;
private String content;
private String url;
private String nick;
private Date created;
private Integer userId;
@Override
public String toString() {
return "WeiBo{" +
"id=" + id +
", content='" + content + '\'' +
", url='" + url + '\'' +
", nick='" + nick + '\'' +
", created=" + created +
", userId=" + userId +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
UserMapper.interface
package cn.tedu.boot51.mapper;
import cn.tedu.boot51.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("select * from user where username=#{username}")
User selectByUsername(String username);
@Insert("insert into user values(null,#{username},#{password},#{nick})")
void insert(User user);
}
WeiboMapper.interface
package cn.tedu.boot51.mapper;
import cn.tedu.boot51.entity.User;
import cn.tedu.boot51.entity.WeiBo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WeiboMapper {
@Insert("insert into weibo values(null,#{content},#{url},#{nick}," +
"#{created},#{userId})")
void insert(WeiBo weibo);
}