一、实习内容
1、问题的提出
无论是在商业网站还是在社区中,留言板都是一种重要的功能,通过留言板,用户可以将自己的想法、感受等发表出来以更好地进行交流。留言板的基本功能是让使用者撰写留言或者查看别人的留言。一个功能完善的留言板也有着复杂的功能,这种复杂性主要表现在留言板的管理权限和留言丰富的表现形式两个方面。本次实训项目介绍使用纯文本的留言,并具有添加和删除的权限。
2、问题分析与总体设计
(1)包含模块
①撰写留言模块
功能比较单一,就是给出表单,让撰写者填写留言的标题和内容。一般来说,这个模块要注意的是对留言权限的限制,不同的权限具有不同的功能要求,有的系统允许不登录(匿名)留言,有的系统只有登录过的用户才能留言。本项目允许匿名留言,由JSP、JavaBean、Serlet共同实现,JSP负责显示留言撰写页面,JavaBean完成数据库的连接及添加操作,Serlet负责执行留言记录的添加。
②阅读留言模块
由JSP和JavaBean共同完成,JavaBean完成数据库的连接及查询查询操作,JSP负责显示具体的留言内容,包括留言人、日期、E-mail、留言主题、留言内容、多余留言的分页显示。
③留言管理模块
主要负责留言的删除操作,由JavaBean和Serlet共同实现,JavaBean负责数据库的连接及删除操作,Serlet执行留言记录的删除。
(2)MVC模式
MVC(model-view-controller,模型-视图-控制器)模式的核心思想是将整个程序代码分成既相对独立又能协同工作的3个组成部分。
①模型:业务逻辑层。实现具体的业务逻辑、状态管理的功能。
②视图:表示层。即与用户实现交互的界面,通常实现数据的输入和输出功能。
③控制器:控制层。起到控制整个业务流程的作用,实现视图和模型部分的协同工作。
(3)数据库设计
在SQL Server 中新建数据库message,新建数据表mas,其中“留言id”字段数值为自动编码,表的结构如图所示:
3、项目实现(依据MVC模式)
(1)模型(DB.com)
DB.conn代码:
package app63;
import java.sql.*;
public class DBconn {
String DBDriver="sun.jdbc.odbc.Jdbc.OdbcDriver";
String Connstr="jdbc:odbc:message";
Connection con=null;
ResultSet rs=null;
public DBconn(){
try{
Class.forName (DBDriver);
}
catch(ClassNotFoundException e){
System.err.println("DBconn:classnotfoundexception");
}
}
public void executeInsert(String s){
int i=0;
Statement sql;
try{
//con=DriverMananger.get.Connection(Connstr,username,password);
con=DriverManager.getConnection(Connstr);
sql=con.createStatement();
i=sql.executeUpdate(s);
}
catch(SQLException sqlexception){
System.err.println("executeInsert:"+sqlexception.getMessage());
}
}
public ResultSet Querysimple(String s){
rs=null;
Statement sql;
try{
con=DriverManager.getConnection(Connstr);
sql=con.createStatement();
rs=sql.executeQuery(s);
}
catch(SQLException sqlexception){
System.err.println("executeQuery:"+sqlexception.getMessage());
}
return rs;
}
public void executeDelete(String s){
Statement sql;
try {
//con=DriverManager.getConnection(Connstr);
sql=con.createStatement();
sql.executeUpdate(s);
}
catch(SQLException sqlexception){
System.err.println("executeDelete:"+sqlexception.getMessage());
}
}
public int executeUpdate (String s){
int i=0;
Statement sql;
try{
con=DriverManager.getConnection(Connstr);
sql=con.createStatement();
i=sql.executeUpdate(s);
}
catch(SQLException sqlexception){
System.err.println("executeUpdate:"+sqlexception.getMessage());
}
return i;
}
public void close(){
try{
if(rs!=null)
rs.close();
if(con!=null)
con.close();
}
catch(SQLException sqlexception){
System.err.println("close:"+sqlexception.getMessage());
}
}
}
strConvert代码:
package app63;
public class StrConvert{
public StrConvert(){
}
public String chStr(String str){
if(str==null){
str="";
}
else{
try {
str=(new String (str.getBytes("ISO-8859-1"),"GB2312")).trim();
}
catch (Exception e){
System .out.println("chStr");
System .out.println(e.getMessage());
}
}
return str;
}
}
(2)视图(message.jsp)截图
单击“增加留言”连接即可进入添加留言页面,如图所示:
Message.jsp 的视图代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>察看留言</title>
<jsp:useBean id="con" class="app63.DBconn" scope="request" />
<body>
<table width="732" height="*" border="1" align="center" cellpadding="1" cellspacing="0" bordercolordark="#ffffff" bordercolor="#ffffff" bordercolorlight="#0066ff">
<tr bgcolor="#CCCCFF">
<td height="22" colspan="5" align="center"><a href="addMessage.jsp">增加留言</a></td>
</tr>
<%
String sqli=" SELECT * FROM mas ORDER BY 留言id DESC";
ResultSet rs=con.executeQuery(sqli);
String color="";
String strpages=(String)request.getParameter("pages");
int pages=0;
if(strpages==null){
pages=0;
}else{
pages=Integer.parseInt(strpages);
}
rs.last();
int sqan=4,i=0,fcount=0;
int count=rs.getRow();
int countpage=count/sqan;
if(count%sqan>0) countpage=countpage+1;
if(pages<0) pages=0;
if(pages>countpage-1) pages=countpage-1;
fcount=pages*sqan+1;
int fpage=(count-fcount)/sqan+1;
rs.absolute(fcount);
rs.previous();
while(rs.next()){
int id=rs.getInt("留言id");
String username=rs.getString("留言人");
String time=rs.getString("留言时间");
if(masinfo==null) masinfo="";
if(color==""){
color="#ffffff";
}else{
color="";
}
%>
<%=username%>
<%=time%>
<%=topic%>
<tr bgcolor="<%=color%>">
<td align="center" width="86" height="22"><div align="left">留言人:</div></td>
<td align="center" width="158"><%=username%> </td>
<td height="22" colspan="2" align="left">留言主题:</td>
<td width="298" height="22" align="center"><%=topic%> </td>
</tr>
<tr bgcolor="<%=color%>">
<td width="86" height="22" align="center"><div align="left">日期:</div></td>
<td width="158" height="22" align="center"><%=time%></td>
<td height="22" colspan="3" rowspan="3" align="left" valign="top"><%=masinfo%> </td>
</tr>
<tr bgcolor="<%=color%>">
<td height="22" align="center"><div align="left">Email:</div></td>
<td height="22" align="center"><%=email%> </td>
</tr>
<tr bgcolor="<%=color%>">
<td height="22" align="center"><div align="left">处理:</div></td>
<td height="22" align="center"><a href="delmessage?id=<%=id%>" >删除留言</a></td>
<%
i++;if(i==sqan) break;
}
try{
con.close();
}catch(Exception e){
}
%>
</tr>
Addmessage.jsp代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>留言</title>
<jsp:useBean id="add" class="app63.DBconn" scope="page" />
</head>
<body>
<form action="addmessage" method="get" name="form1">
<table width="365" height="276" border="0" align="center" cellspacing="0">
<tr bgcolor="#AEB6DD">
<td width="93" height="27" align="left"><span class="style2">留 言 人:</span></td>
<td width="324" height="27" style="font-size:12px "><input name="name" type="text" id="name" size="20" maxlength="40" />
</td>
</tr>
<tr bgcolor="#AEB6DD">
<td width="93" height="27" align="left"><span class="style2">E-mail:</span></td>
<td width="324" height="27"> <input name="email" type="text" size="20" maxlength="40"> </td>
</tr>
<tr bgcolor="#AEB6DD">
<td width="93" height="27" align="left"><span class="style2">留言主题:</span></td>
<td width="324" height="27"> <input name="topic" type="text" size="30" maxlength="50"> </td>
</tr>
<tr align="left" bgcolor="#AEB6DD">
<td height="27" colspan="2"><span class="style2">留言信息:</span></td>
</tr>
<tr align="left" bgcolor="#AEB6DD">
<td height="106" colspan="2" valign="top"><span class="style2">
<textarea name="masinfo" cols="50" rows="6" wrap="PHYSICAL"></textarea>
</span> </td>
</tr>
<tr align="center" bgcolor="#AEB6DD">
<td height="34" colspan="2">
<span class="style2">
<input name="Submit" type="submit" class="code" value="留言" >
<input name="Submit2" type="reset" class="code" value="重置">
</span></td>
</tr>
</table>
</form>
</body>
</html>
(3)控制器(addMessage.java delMessage.java)
addMessage.java代码:
package app63;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class addMessage extends HttpServlet
{
private static final String CONTENT_TYPE="text/html;charset=GBK";
//Initialize global variables
public void init() throws ServletException{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest requst,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<head><title>addMessage</title></head>");
out.println("<body bgcolor=\"#ffffff\">");
DBcoon con=new DBconn();
StrConvert chstr=new StrConvert();
String username=(String)request.getParameter("name");
String email=(String)request.getParameter("email");
String topic=(String)request.getParameter("topic");
String masinfo=(String)request.getParameter("masinfo");
String nowtime=String.valueOf(new Date().toLocaleString());
if(username!=null||email!=null||topic!=null||)
{
username=chstr.chStr(username);
email=chstr.chStr(email);
topic=chstr.chStr(topic);
masinfo=chstr.chStr(masinfo);
}
String sqli="INSERT INFO mas(留言人,留言主题,留言时间,留言人Email,留言内容)
VALUES("'+username+'","'+topic+'","'+nowtime+'","'+email+'","'+masinfo+'")";
int temp=-10;
con.executeInsert(Sqli);
response.sendRedirect("message.jsp");
out.println("</body></html>");
}
public void destroy(){
}
}
delMessage.java代码:
package app63;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class addMessage extends HttpServlet
{
private static final String CONTENT_TYPE="text/html;charset=GBK";
//Initialize global variables
public void init() throws ServletException{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest requst,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<head><title>delMessage</title></head>");
out.println("<body bgcolor=\"#ffffff\">");
DBcoon con=new DBconn();
int id=integer.parseInt((String)request.getParameter("id"));
String sqld="DELETE FROM mas WHERE 留言 id="+id;
con.executeInsert(Sqld);
response.sendRedirect("message.jsp");
out.println("</body></html>");
}
//Clean up resources
public void destroy(){
}
}
二、实习体会
为期一周的JSP培训已经结束,经过一学期的学习,对于JSP有个初步的了解,这学期我们仅仅学习了一个基础和大概,这次实训,确实让自己受益匪浅,在实训期间,我学到了很多知识,遇到一些困难,也看到了自己的理解存在着许多问题,测试的时候,还总会遇到各种各样的问题,从而导致软件不能执行,所以我们在做程序时一定要细心。经过这次的实训,我真真确确的感受到了JSP在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。这次我们学习的是数据路的原理及应用的各方面知识,由老师带着我们不断操作。
通过这次实训,我们也感受到了网络的强大,遇到不懂的问题只要上网查下酒知道怎么做了,通过不断的学习,我了解的知识比以前更多了,这是一次很好的时间机会,是对我培养独立思考问题和自学能力的锻炼,让我意识到自己懂得实在太少了,在今后的学习中,要更加勤奋、刻苦,学习更多的知识,更好适应工作的需要。