实现小说阅读站,在线阅读功能——章节的添加与显示
目标:实现1000字以上的文章的后台上传,数据库存储与前台显示
一.建立数据库表:
DROP TABLE IF EXISTS `chapter`;
CREATE TABLE `chapter` (
`chapter_id` int(11) NOT NULL auto_increment,
`chapter_name` varchar(255) default NULL,
`chapter_content` text,
`book_id` int(11) default NULL,
PRIMARY KEY (`chapter_id`),
KEY `book_id` (`book_id`),
CONSTRAINT `book_id` FOREIGN KEY (`book_id`) REFERENCES `book` (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
其中chapter_content字段用于保存文章内容,考虑后使用text类型来创建字段,由于并不涉及到多客户端交互,直接使用字符串传值。
二.使用JSP页面,建立一个用于输入文字的文本框。
使用<textarea></textarea>设置文本框,form表单传值:
<body>
<form action="accept.jsp" method="post">
内容:
<textarea rows="10" cols="20" name="content"></textarea>
<input type="submit" value="OK">
</form>
</body>
注意:由于是大量文字传输,必须使用post的方式传值,使用get传值可能受限于地址栏长度限制,会出现白屏情况。无法获得相应的数据。
加入request转码,使汉字可以正常显示
request.setCharacterEncoding("utf-8");
将文字传入到accept.jsp页面。由于文字在java中是使用/r进行换行判断,因此,当我们准备在html上显示段落的时候,需要将输入文字进行格式化处理。这里采用replace()函数进行替换,将字符串中的。
简单的测试传输后替换的结果(jsp):
String s=request.getParameter("content");
s=s.replace("\r", "<br />");
s=s.replace(" "," ");
out.write(s);
这样替换之后,文字就可以在html中按照格式显示了。
三.存入数据库
存入数据库,必须在链接数据库的时候定义字符集,并使用格式化的链接方式,具体的操作方法是在数据库连接时添加格式化参数:
?useUnicode=true&characterEncoding=UTF-8
如果出现汉字存入数据库显示为?????的情况,在数据库链接字段后添加以上字段即可解决。
为了直观快速的测试,使用JDBC链接数据库,向表中添加测试数据
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="gbk"%>
<%@page import="java.sql.*" %>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>
查询数据库
</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String s=request.getParameter("content");
s=s.replace("\r", "<br />");
out.write(s);
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8";
String name="root";
String password="";
Connection conn=null;
Statement stmt=null;
String sql=null;
Class.forName(driver);
conn=DriverManager.getConnection(url,name,password);
stmt=conn.createStatement();
sql="INSERT INTO chapter VALUES ('','章节名','"+s+"',1);" ;
//System.out.print(sql);
boolean flag =stmt.execute(sql);
System.out.print(flag+"AAA");
%>
<%
stmt.close();
conn.close();
%>
</body>
</html>
检查数据库,文章插入成功。