实现发表文章的功能
流程:
1:用户在首页点击发表文章的超链接来到发表文章页面
2:在页面输入文章标题和文章内容并点击发表按钮
3:服务端将该文章保存后响应发表结果页面(成功或失败)
实现:
1:在static下新建对应的页面
1.1:writeArticle.html 发表文章页面
页面form表单action指定的值"/writeArticle"
1.2:article_success.html 发表成功提示页面
1.3:article_fail.html 发表失败提示页面
2:在controller包下新建处理文章相关的业务类:ArticleController
并定义处理发表文章的方法:writeArticle()
注意:@Controller注解和@RequestMapping注解不要忘记!!!
3:在entity包下新建表示文章的对象:Article并实现序列化接口
4:在writeArticle方法中将表单提交上来的标题和文章内容以Article对象形式序列化到目录articles
下文件名格式:标题.obj
保存后响应发表成功。如果标题或内容没有输入则响应发表失败页面。
package cn.tedu.springboot220602.controller;
import cn.tedu.springboot220602.entity.Article;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
@Controller
public class ArticleController {
private static File ArticleDir;
static {
ArticleDir=new File("./articles");
if (!ArticleDir.exists()){
ArticleDir.mkdirs();
}
}
/**
* 发表文章
* @param request
* @param response
*/
@RequestMapping("/writeArticle")
private void writeArticle(HttpServletRequest request, HttpServletResponse response){
String title = request.getParameter("title");
String author = request.getParameter("author");
String content = request.getParameter("content");
//如果输入内容为空或空格
if(title==null||title.trim().isEmpty()||
author==null||author.trim().isEmpty()||
content==null||content.trim().isEmpty()
){
try {
response.sendRedirect("/article_fail.html");
} catch (IOException e) {
e.printStackTrace();
}
return;
}
File file=new File(ArticleDir,title+".obj");
if(file.exists()){
try {
response.sendRedirect("/article_fail.html");
} catch (IOException e) {
e.printStackTrace();
}
return;
}
try (FileOutputStream fos=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(fos);){
Article article=new Article(title,author,content);
oos.writeObject(article);
} catch (IOException e) {
e.printStackTrace();
}
try {
response.sendRedirect("/article_success.html");
} catch (IOException e) {
e.printStackTrace();
}
}
}
package cn.tedu.springboot220602.entity;
import java.io.Serializable;
public class Article implements Serializable {
public static final long serialVersionUID = 42L;
private String title;
private String author;
private String content;
public Article() {
}
public Article(String title, String author, String content) {
this.title = title;
this.author = author;
this.content = content;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package cn.tedu.springboot220602.controller;
import cn.tedu.springboot220602.entity.Article;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@Controller
public class ArticleController {
private static File ArticleDir;
static {
ArticleDir=new File("./articles");
if (!ArticleDir.exists()){
ArticleDir.mkdirs();
}
}
@RequestMapping("/deleteArticle")
private void delete(HttpServletRequest request,HttpServletResponse response){
String title = request.getParameter("title");
File file=new File(ArticleDir,title+".obj");
if(file.exists()){
file.delete();
try {
response.sendRedirect("/articleList");
} catch (IOException e) {
e.printStackTrace();
}
return;
}
}
//文章列表
@RequestMapping("/articleList")
private void articleList(HttpServletRequest request,HttpServletResponse response){
File[] subs = ArticleDir.listFiles(f -> f.getName().endsWith(".obj"));
List<Article> articleList=new ArrayList<>();
for (File file:subs) {
try (FileInputStream fis=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(fis);
){
Article article=(Article)ois.readObject();
articleList.add(article);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//向浏览器写信息
response.setContentType("text/html;charset=utf-8");
try (PrintWriter pw = response.getWriter();){
pw.println("");
pw.println("");
pw.println("");
pw.println("");
pw.println("文章列表 ");
pw.println("");
pw.println("" );
pw.println("");
pw.println("");
pw.println("标题 ");
pw.println("作者 ");
pw.println("操作 ");
pw.println(" ");
for(Article article:articleList){
pw.println("");
pw.println(""+article.getTitle()+" ");
pw.println(""+article.getAuthor()+" ");
pw.println("删除 ");
pw.println(" ");
}
pw.println("
");
pw.println("");
pw.println("");
pw.println("");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发表文章
* @param request
* @param response
*/
@RequestMapping("/writeArticle")
private void writeArticle(HttpServletRequest request, HttpServletResponse response){
String title = request.getParameter("title");
String author = request.getParameter("author");
String content = request.getParameter("content");
//如果输入内容为空或空格
if(title==null||title.trim().isEmpty()||
author==null||author.trim().isEmpty()||
content==null||content.trim().isEmpty()
){
try {
response.sendRedirect("/article_fail.html");
} catch (IOException e) {
e.printStackTrace();
}
return;
}
File file=new File(ArticleDir,title+".obj");
if(file.exists()){
try {
response.sendRedirect("/article_fail.html");
} catch (IOException e) {
e.printStackTrace();
}
return;
}
try (FileOutputStream fos=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(fos);){
Article article=new Article(title,author,content);
oos.writeObject(article);
} catch (IOException e) {
e.printStackTrace();
}
try {
response.sendRedirect("/article_success.html");
} catch (IOException e) {
e.printStackTrace();
}
}
}