目的:编写JSP页面,实现留言和分页查看留言的功能
开发工具:MyEclipse 2018.8.0
Java EE version:JavaEE 6-Web 3.0
Java version:1.6
数据库驱动:mysql-connector-java-5.1.37
实现过程:
- 第一步:思考留言中需要涉及到的字段,创建数据库mobileshop,根据需求在数据库中创建表messlist,在这里我用到了姓名、留言标题、留言内容三个字段,表的结构如下:
- 第二步:在src目录下新建Class,Package设置为mybean.data,Name设置为AddMess,实现留言功能
- 声明属性,包括mysql的用户名和密码、数据库名称、表的名字、提交的姓名、留言标题、留言内容并添加相应的get和set方法
- 将数据库驱动mysql-connector-java-5.1.37添加到WEB-INF目录下的lib文件夹下
- 连接数据库并判断属性值是否为空,满足要求时执行插入操作
AddMess.java文件的代码如下:
package mybean.data;
import java.sql.*;
public class AddMess {
String name="",messTitle="",messDetail=""; //提交的姓名、留言标题、留言内容
String backNews="";
String databaseName=""; //数据库名称
String tableName=""; //表的名字
String user="" ; //用户
String password="" ; //密码
public AddMess(){
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
}
public String handleString(String s) {
try {
byte bb[]=s.getBytes("ISO8859-1");
s=new String(bb,"UTF-8");
}catch(Exception e){}
return s;
}
public void insertMess(){
String uri="jdbc:mysql://127.0.0.1/"+databaseName+"?useUnicode=true&characterEncoding=utf-8";
boolean boo=name.length()>0&&messTitle.length()>0&&messDetail.length()>0;
PreparedStatement sql;
Connection con;
name = name.trim();
messTitle = messTitle.trim();
messDetail = messDetail.trim();
try{
con = DriverManager.getConnection(uri,user,password);
//String insertCondition = "INSERT INTO messList(name,mess_title,mess_detail) VALUES(?,?,?)";
String insertCondition;
if(boo) {
insertCondition ="INSERT INTO messList(name,mess_title,mess_detail) VALUES('"+handleString(name)+"','"+handleString(messTitle)+"','"+handleString(messDetail)+"')";
sql=con.prepareStatement(insertCondition);
// sql.setString(1, handleString(name));
// sql.setString(2, handleString(messTitle));
// sql.setString(3, handleString(messDetail));
int m=sql.executeUpdate(insertCondition);
if(m!=0) {
backNews="插入成功";
}else {
backNews="插入失败";
}
}else {
backNews="请将信息填写完整";
}
con.close();
}
catch(Exception exp){backNews=exp.toString();}
}
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
public void setBackNews(String back) {
this.backNews = back;
}
public String getBackNews() {
return backNews;
}public String getMessTitle() {
return messTitle;
}public void setMessTitle(String messTitle) {
this.messTitle = messTitle;
}public String getMessDetail() {
return messDetail;
}public void setMessDetail(String messDetail) {
this.messDetail = messDetail;
}
public void setDatabaseName(String s){
databaseName=s.trim();
}
public String getDatabaseName(){
return databaseName;
}
public void setTableName(String s){
tableName=s.trim();
}
public String getTableName(){
return tableName;
}
public void setPassword(String s){
password=s.trim();;
}
public void setUser(String s){
user=s.trim();
}
}
- 第三步:设计留言页面inputMess.jsp
- 在WEB-INF目录下创建JSP文件inputMess.jsp,在页面中设置三个输入框和一个提交按钮
- 调用JavaBean,将用户输入的内容设置为对应的属性值
- 调用insertMess(),将获取到的内容插入到messlist表中
- 编写inputMess.css,改变页面的样式
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="mybean.data.AddMess" %>
<jsp:useBean id="add" class="mybean.data.AddMess" scope="session"/>
<jsp:setProperty name="add" property="databaseName" value="mobileshop"/>
<jsp:setProperty name="add" property="tableName" value="messList"/>
<jsp:setProperty name="add" property="user" value="root"/>
<jsp:setProperty name="add" property="password" value=""/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'showMess.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="assets/css/inputMess.css">
</head>
<body>
<FORM action="" Method="post" name="form" class="formCss">
输入你的名字:<BR><input type="text" name="user" class="inputCss">
<BR> 输入你留言的标题:<BR><input type="text" name="messTitle" class="inputCss">
<BR>输入你的留言:<BR><TEXTAREA name="mess" Rows="10" COLS="36" class="textareaCss"></TEXTAREA>
<br><Input type="submit" name="ok" value="提交" id="submBtn"/>
<a href="showMess.jsp">查看留言</a>
<jsp:setProperty name="add" property="name" param="user"/>
<jsp:setProperty name="add" property="messTitle" param="messTitle"/>
<jsp:setProperty name="add" property="messDetail" param="mess"/>
<%add.insertMess();%>
<br>TIP:<jsp:getProperty name="add" property="backNews"/>
</FORM>
</body>
</html>
inputMess.css代码如下:
html,body{
background: #EBEBEB;
}
}a{
outline: none;
text-decoration: none;
}a:hover,a:focus{
outline: none;
text-decoration: none;
}.textareaCss{
wrap="physical"
}.formCss{
width:33.33%;
margin:0 auto; margin-top:100px;
padding:20px;
background:rgba(217,255,255,0.7);
font-size:14px;
}.inputCss{
margin-bottom:10px;
}#submBtn{
margin-top:10px;
margin-bottom:10px;
background:rgba(217,255,255,0.7);
border-radius: 5px;
}
——留言页效果截图
- 第四步:在src目录下新建Class,Package设置为mybean.data,Name设置为MessBoard,实现分页查看留言功能
- 同上一个bean文件,先声明基本的三个属性,包括mysql的用户名和密码、数据库名称、表的名字;然后设置每页显示的记录数、分页后的总页数以及当前页的默认值
- 除此上述还需要声明两个对象分别用于显示当前页内容和存储ResultSet对象,因为我的包中不含有 CachedRowSetImpl类,所以需要去下载一个com.sun.rowset.jar包,将这个jar包放到WEB-INF目录下的lib文件夹下
- 创建setPageSize方法,用于查询表messList的内容并存放到ResultSet对象中
- 创建show方法,将ResultSet对象中的内容按页数和每页显示的记录数插入到表格中,返回插入数据后的表格字符串,并在getPresentPageResult方法中调用,达到按页数显示留言内容的效果
package mybean.data;
import java.sql.*;
import com.sun.rowset.*;
public class MessBoard {
int pageSize=10; //每页显示的记录数
int pageAllCount=0; //分页后的总页数
int showPage=1 ; //当前显示页
StringBuffer presentPageResult; //显示当前页内容
CachedRowSetImpl rowSet; //用于存储ResultSet对象
String databaseName=""; //数据库名称
String tableName=""; //表的名字
String user="" ; //用户
String password="" ; //密码
String 字段[]=new String[100] ;
int 字段个数=0;
public MessBoard(){
presentPageResult=new StringBuffer();
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
}
public void setPageSize(int size){
pageSize=size;
字段个数=0;
String uri="jdbc:mysql://127.0.0.1/"+databaseName;
try{ Connection con=DriverManager.getConnection(uri,user,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int k=0;
while(rs1.next()){
字段个数++;
字段[k]=rs1.getString(4); //获取字段的名字
k++;
}
Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=sql.executeQuery("SELECT * FROM "+tableName);
rowSet=new CachedRowSetImpl(); //创建行集对象
rowSet.populate(rs);
con.close(); //关闭连接
rowSet.last();
int m=rowSet.getRow(); //总行数
int n=pageSize;
pageAllCount=((m%n)==0)?(m/n):(m/n+1);
}
catch(Exception exp){}
}
public int getPageSize(){
return pageSize;
}
public int getPageAllCount(){
return pageAllCount;
}
public void setShowPage(int n){
showPage=n;
}
public int getShowPage(){
return showPage;
}
public StringBuffer getPresentPageResult(){
if(showPage>pageAllCount)
showPage=1;
if(showPage<=0)
showPage=pageAllCount;
presentPageResult=show(showPage);
return presentPageResult;
}
public StringBuffer show(int page){
StringBuffer str=new StringBuffer();
str.append("<table border=1 class='tableCss'>");
str.append("<tr>");
for(int i=0;i<字段个数;i++)
str.append("<th>"+字段[i]+"</th>");
str.append("</tr>");
try{ rowSet.absolute((page-1)*pageSize+1);
boolean boo=true;
for(int i=1;i<=pageSize&&boo;i++){
str.append("<tr>");
for(int k=1;k<=字段个数;k++)
str.append("<td>"+rowSet.getString(k)+"</td>");
str.append("</tr>");
boo=rowSet.next();
}
}
catch(SQLException exp){}
str.append("</table>");
return str;
}
public void setDatabaseName(String s){
databaseName=s.trim();
}
public String getDatabaseName(){
return databaseName;
}
public void setTableName(String s){
tableName=s.trim();
}
public String getTableName(){
return tableName;
}
public void setPassword(String s){
password=s.trim();;
}
public void setUser(String s){
user=s.trim();
}
public String getUser(){
return user;
}
}
- 第五步: 设计分页显示留言的页面showMess.jsp
- 调用对应javabean,设置和获取属性值,将留言内容显示出来
- 设计翻页按钮,翻页时设置当前页的属性值并刷新页面,显示对应留言内容
- 编写showMess.css,改变页面的样式
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="mybean.data.MessBoard" %>
<jsp:useBean id="look" class="mybean.data.MessBoard" scope="session"/>
<jsp:setProperty name="look" property="databaseName" value="mobileshop"/>
<jsp:setProperty name="look" property="tableName" value="messList"/>
<jsp:setProperty name="look" property="user" value="root"/>
<jsp:setProperty name="look" property="password" value=""/>
<jsp:setProperty name="look" property="pageSize" value="3"/>
<HTML>
<head>
<title>My JSP 'showMess.jsp' starting page</title>
<link rel="stylesheet" type="text/css" href="assets/css/inputMess.css">
<link rel="stylesheet" type="text/css" href="assets/css/showMess.css">
</head>
<BODY>
<p>
数据库
<jsp:getProperty name= "look" property="databaseName"/>中
<jsp:getProperty name= "look" property="tableName"/>表的记录将被分页显示。
<br>共有 <jsp:getProperty name="look" property="pageAllCount"/> 页,
每页最多显示<jsp:getProperty name="look" property="pageSize" />条记录。
</p>
<jsp:setProperty name= "look" property="showPage" />
<jsp:getProperty name= "look" property="presentPageResult" />
<BR>单击“前一页”或“后一页”按纽查看记录(当前显示第
<jsp:getProperty name= "look" property="showPage" /> 页)。
<Table class="tableCss">
<tr><td><FORM action="">
<Input type=hidden name="showPage" value="<%=look.getShowPage()-1 %>" >
<Input type=submit name="g" value="前一页">
</FORM>
</td>
<td><FORM action="">
<Input type=hidden name="showPage" value="<%=look.getShowPage()+1 %>" >
<Input type=submit name="g" value="后一页">
</Form>
</td>
<td> <FORM action="">
输入页码:<Input type=text name="showPage" size=5 >
<Input type=submit name="g" value="提交">
<a href="inputMess.jsp">去留言</a>
</FORM>
</td>
<td></td>
<td></td>
</tr>
</Table>
</BODY></HTML>
inputMess.css代码如下:
.tableCss{
width:33.33%;
margin:0 auto;
padding:20px;
background:rgba(217,255,255,0.7);
font-size:14px;
}
body{
text-align:center;
}
p{
margin-top:100px;
}
——分页查看留言页的效果