XML是eXtensible Markup Language 缩写,称之为可扩展标记语言。所谓可扩展性是指XML允许用户按着XML规则自定义标记。XML文件是由标记及其所标记的内容构成的文本文件,与HTML文件不同的是,这些标记可自由定义,其目的是使得XML文件能够很好地体现数据的结构和含义。W3C推出XML的主要目的是使得Internet网络上的数据相互交流更方便,让文件的内容更加显而易懂。
简单的XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<列车时刻表>
<T28>
<开车时间>20点58分</开车时间>
<终到时间>08点18分</终到时间>
</T28>
<T876>
<开车时间>23点12分</开车时间>
<终到时间>07点25分</终到时间>
</T876>
</列车时刻表>
1.规范的XML
规范的XML文件应当用“XML声明”开始、文件有当且仅有一个根标记,其它标记都必须封装在根标记中,文件的标记必须是树型结构、非空标记必须由“开始标记”与“结束标记”组成、空标记没有“开始标记”和“结束标记”等等。
W3C吸取了HTML发展的教训,对XML指定了严格的语法标准。为了检查XML文件是否规范,一个简单的办法就是用浏览器,比如IE5.5,打开XML文件,如果XML是规范的,浏览器将显示XML源文件,否则,将显示出错信息。
XML声明
XML声明中的版本属性
一个简单的XML声明中可以只包含属性version,目前该属性的只可以值可以取1.0,指出该XML文件使用的XML版本。
XML声明中的编码属性
如果在XML声明中没有指定encoding属性的值,那么该属性的默认值是“UTF-8”。例如:
<?xml version="1.0" encoding="UTF-8" ?>
如果encoding属性的值为“UTF-8”,XML文件必须选择“UTF-8”编码来保存 .
2.标记
根标记
XML文件必须有且仅有一个根标记,其它标记都必须封装在根标记中,形成树型结构。
空标记
所谓空标记就是不标记任何内容的标记。由于空标记不标记任何内容,所以空标记不需要开始标记和结束标记,空标记以 “<”标识开始,用“/>” 标识结束 .例如:
<chair width="24" height="12" />
非空标记
非空标记必须由“开始标记”与“结束标记”组成,“开始标记”与“结束标记”之间是该标记所标记的内容。例如:
<名称>电视</名称>
3.有效的XML
规范性仅仅是XML语言的基本语法,没有对XML文件怎样组织数据进行具体的限制,对同一问题编写的XML文件,在数据组织结构上就可能有很大的不同 .
针对某些问题,有时可能需要对XML文件怎样组织数据,即数据之结构,进行必要的限制,以便解析器能更好地解析其中的数据。对XML的数据结构进行限制的传统常用方式是使用文档类型定义(Document Type Definition,DTD)。
DTD文档
DTD文档是由<!ELEMENT>元素组成的文本文件,其扩展名为“.dtd”。
DTD中的<!ELEMENT>元素用来约束XML文件中的标记,在DTD中使用元素声明来定义一个<!ELEMENT>元素,元素的声明格式为:
<!ELEMENT 标记名称 标记的约束条件 >
例如:
<!ELEMENT 列车时刻表 (T28次,T678次) >
约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T678次”。
XML与DTD关联
XML文件使用文档类型声明与一个DTD相关联,即遵守该DTD文件规定的限制条件。有两种形式的关联:SYSTEM和PUBLIC,SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可;PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件。
SYSTEM关联型的文档类型声明格式:
<DOCTYPE 根标记的名称 SYSTEM "DTD文件的URI">
例如:
<!DOCTYPE 列车时刻表 SYSTEM "Control.dtd">
PUBLIC关联型的文档类型声明格式:
<DOCTYPE根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">
例如:
<!DOCTYPE 列车时刻表 PUBLIC "-//ISO123456/Daxian/ForXML/EN" " Control.dtd">
4. DOM解析器
DOM(Document Object Model,文档对象模型)是W3C制定的一套规范标准。DOM规范的核心是按树型结构处理数据。简单地说,DOM解析器必须按着DOM规范在内存中按树型结构组织数据,DOM解析器通过读入XML文件在内存中建立一个“树”,也就是说XML文件的标记、标记的文本内容都会和内存中“树”的某个节点相对应。一个应用程可以方便地操作内存中“树”的节点来处理XML文档,获取自己所需要的数据。
使用DOM解析器的基本步骤
1.使用javax.xml.parsers包中的DocumentBuilderFactory类调用其类方法newInstance()实例化一个DocumentBuilderFactory对象:
DocumentBuilderFactory factory= DocumentBuilderFactory. newInstance();
2.factory对象调用newDocumentBuilder()方法返回一个DocumentBuilder对象(称做DOM解析器),例如:
DocumentBuilder builder=factory. newDocumentBuilder();
DocumentBuilder 类在javax.xml.parsers包中。
3.builder对象调用public Document parse(File f)方法解析参数f指定的文件,并返回一个实现了Document接口的实例,该实例被称做Document对象。例如:
Document document= builder. parse(new File("price.xml")) ;
5. SAX解析器
SAX解析器不在内存中建立和XML文件相对应的树形结构数据,SAX解析器的核心是事件处理机制,和DOM解析器相比,SAX解析器占有的内存少,对于许多应用程序,使用SAX解析器来获取XML数据具有较高的效率。
使用SAX解析器的基本步骤
1.SAXParserFactory对象
使用javax.xml.parsers包中的SAXParserFactory类调用其类方法
newInstance()实例化一个SAXParserFactory对象,如:
SAXParserFactory factory=SAXParserFactory.newInstance() ;
2. SAXParser对象(SAX解析器)
SAXParserFactory对象调用newSAXParser()方法返回一个SAXParser对象,称之为SAX解析器,如:
SAXParser saxParser=factory.newSAXParser();
3. saxParser对象调用public void parse(File f,DefaultHandler dh)方法解析参数f指定的XML文件。
SAX解析器的工作原理
SAX解析器调用parse方法(见9.4.1中的步骤3)解析XML文件,parse方法的第2个参数dh是DefaultHandler类型,称作事件处理器。parse方法在解析XML文件的过程中,根据从文件中解析出的的数据产生相应的事件,并报告这个事件个给事件处理器dh,事件处理器dh就会处理所发现的数据,即处理器dh会根据相应的事件调用相应的方法来处理数据,parse方法必须等待事件处理器处理完毕后再继续解析文件、报告下一个事件。
6. XML与CSS
W3C为显示XML中所有标记所含有的文本发布了一个建议规范:CSS(层叠样式表)。本节介绍CSS中的基本内容,如果需要了解细节可参见有关书籍.
使用CSS
为了让XML使用层叠样式表显示其中的文本数据,XML文件必须使用操作指令
<?xml-stylesheet href ="样式表的URI" type= "text/css" ?>
将当前XML文件关联到某个层叠样式表,样式表的URI如果是一个文件的名字,该文件必须和XML文件在同一目录中,例如:
<?xml-stylesheet href="show.css" type="text/css" ?>
在CSS中,最重要的概念就是样式表。样式表是一组规则,通过这组规则告诉浏览器用什么样式来显示文本,比如,告诉浏览器使用什么样的字体、颜色和页边距来显示文本。一个样式表的格式如下:
文本代表
{ 样式规则
}
对于XML文件,样式表中的“文本代表”可以是标记的名称。样式表中的“样式规则”是若干个用分号分隔的“属性名:属性值”,例如:
name
{ display:block;font-size:36pt;font-weight:bold;
}
样式表用来显示标记“name”的文本内容,其中的“display:block;”告知浏览器将标记“<name>…</name>所标记的文本内容显示在一个“块区域”;“font-size:36pt;”能使得文本字体的大小是36镑;“font-weight:bold”的作用是让文本加重显示。
如果有多个标记的内容需要有完全一样方式来显示,“文本代表”也可以是这些标记的名称用逗号分隔的字符串。如:
name,sex,birthday
{
display:block;font-size:36pt;font-weight:bold;
}
一个层叠样式表(CSS)就是由若干个样式表组成的文本文件(扩展名为.css),该文本文件可以使用“ANSI”或“UTF-8”编码来保存。
显示数学公式和化合物分子式
1.JSP页面:type.jsp (JSP页面使用超链接请求XML文件:formula.xm )
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY bgcolor=yellow >
<BR>显示几个数学公式和化合物分子式:
<A href="formula.xml">显示</A>
</BODY></HTML>
2.XML文件 (formula.xml描述常用的数学公式和化合物的分子式 )
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="show.css" type="text/css" ?>
<root>
<math> 几个数学公式:
<formula>
平方和公式:
(A+B)<sup>2</sup>=
A<sup>2</sup>+2AB+B<sup>2</sup>
</formula>
<formula>
立方和公式:
(A+B+C)<sup>3</sup>=
A<sup>3</sup>+3A<sup>2</sup>B+3B<sup>2</sup>A<sup>2</sup>+A<sup>3</sup>
</formula>
</math>
<chemistry>
几个化合物分子式:
<molecular>
水的分子式:
H<low>2</low>O
</molecular>
<molecular>
二氧化硫的分子式:
SO<low>2</low>
</molecular>
<molecular>
碳酸的分子式:
H<low>2</low>CO<low>3</low>
</molecular>
</chemistry>
</root>
3. CSS文件 (XML文件与CSS层叠样式表关联,可把数据的显示和数据结构相分离 )
math
{ display:block;
background-color:yellow;
color:green;
left=100;
}
chemistry
{ display:block;
background-color:cyan;
color:green;
left=100;
}
formula
{ display:list-item;
list-style-type:lower-roman;
margin-left:60;
font-size:14pt;
color:black;
}
molecular
{ display:list-item;
list-style-type:decimal;
margin-left:60;
font-size:14pt;
color:black;
}
sup
{ display:line;
font-size:10pt;
font-weight:bold;
font-style:italic;
color:blue;
vertical-align:super;
}
low
{ display:line;
font-size:8pt;
font-weight:bold;
color:blue;
vertical-align:bottom;
}
例子1
Score.xml
<?xml version="1.0" encoding="UTF-8" ?>
<成绩>
<学号 number="a1001">
<姓名>赵一</姓名>
<高等数学 课程性质="必修">89 </高等数学>
<大学物理 课程性质="必修">88 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1002">
<姓名>钱二</姓名>
<高等数学 课程性质="必修">77 </高等数学>
<大学物理 课程性质="必修">66 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1003">
<姓名>孙三</姓名>
<高等数学 课程性质="必修">75 </高等数学>
<大学物理 课程性质="必修">69 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1004">
<姓名>李四</姓名>
<高等数学 课程性质="必修">76 </高等数学>
<大学物理 课程性质="必修">87 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
</成绩>
input.jsp
<%@ page contentType="text/html;Charset=GB2312" %>
<HTML><BODY bgcolor=cyan>
<FORM action="byNumber" method=post name=form>
输入学号,查询成绩:
<INPUT type="text" name="studentNmber">
<INPUT TYPE="submit" value="提交" >
</FORM>
</HTML>
Number.java
package sun.yourservlet;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Number extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ boolean boo=false;
response.setContentType("text/html;charset=GB2312");
PrintWriter out=response.getWriter();
out.println("<html><body>");
String searchedNumber=request.getParameter("studentNmber");
try{ DocumentBuilderFactory factory=DocumentBuilderFactory. newInstance();
DocumentBuilder builder= factory.newDocumentBuilder();
Document document= builder. parse(new File("D:\\1000\\Score.xml")) ;
Element root=document.getDocumentElement() ; //获取根节点
//返回根节点的Element子节点,这些子节点对应着XML文件中的“学号"标记:
NodeList elemnetNodes=root.getElementsByTagName("学号") ;
int size=elemnetNodes.getLength();
for(int k=0;k<size;k++)
{ Node node=elemnetNodes.item(k);
if(node.getNodeType()==Node.ELEMENT_NODE) //判断node节点的类型
{ //再得到node节点的number属性的值:
String stuNumber=((Element)node).getAttribute("number");//获取学号
if(stuNumber.equals(searchedNumber))
{ boo=true;
NodeList childNodes=node.getChildNodes();//获取node的全部子节点
for(int i=0;k<childNodes.getLength();i++)
{ Node child=childNodes.item(i);
if(child.getNodeType()==Node.ELEMENT_NODE)
{ String nodeName=((Element)child).getTagName().trim();
out.println("<BR>"+nodeName);
String courseType=((Element)child).getAttribute("课程性质");
String contentStr=((Element)child).getTextContent();
if(nodeName.startsWith("姓名"))
out.println(":"+contentStr);
else
out.println("("+courseType+") :"+contentStr);
}
}
}
}
}
if(boo==false)
out.println("不存在您要查询的学号!");
}
catch(Exception ee)
{}
out.println("</body></html>");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
例子2
trainList.xml
<?xml version="1.0" encoding="UTF-8" ?>
<trainList>
<北京西站>
<始发列车>
<车次>
<名字>T83次</名字>
<运行区间>北京西-南京</运行区间>
<开车时间>20:17</开车时间>
<终到时间>09:10</终到时间>
</车次>
<车次>
<名字>T199次</名字>
<运行区间>北京西-上海</运行区间>
<开车时间>23:25</开车时间>
<终到时间>10:10</终到时间>
</车次>
</始发列车>
<终到列车>
<车次>
<名字>T84次</名字>
<运行区间>南京-北京西</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T200次</名字>
<运行区间>上海-北京西</运行区间>
<开车时间>22:25</开车时间>
<终到时间>09:10</终到时间>
</车次>
</终到列车>
</北京西站>
<广东站>
<始发列车>
<车次>
<名字>T186次</名字>
<运行区间>广东-武汉</运行区间>
<开车时间>22:17</开车时间>
<终到时间>09:24</终到时间>
</车次>
<车次>
<名字>T78次</名字>
<运行区间>广东-长沙</运行区间>
<开车时间>18:25</开车时间>
<终到时间>11:10</终到时间>
</车次>
</始发列车>
<终到列车>
<车次>
<名字>T193次</名字>
<运行区间>南京-广东</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T200次</名字>
<运行区间>上海-广东</运行区间>
<开车时间>21:15</开车时间>
<终到时间>12:10</终到时间>
</车次>
</终到列车>
</广东站>
</trainList>
train.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="moon.yourbean.*"%>
<jsp:useBean id="ok" class="moon.yourbean.SAXBean" scope="page"/>
<jsp:setProperty name="ok" property="stationName" param="stationName"/>
<jsp:setProperty name="ok" property="startOrArrive" param="startOrArrive"/>
<HTML><BODY bgcolor=cyan><Font size=2>
<FORM action="" Method="post" >
选择站名:
<Select name="stationName">
<Option value="北京西站">北京西站
<Option value="广东站">广东站
</Select>
选择始发或终到:
<INPUT type="radio" name="startOrArrive" value="始发列车" checked="default">始发列车
<INPUT type="radio" name="startOrArrive" value="终到列车">终到列车
<BR> <Input type=submit value="提交">
</FORM>
<jsp:getProperty name="ok" property="stationName"/>,
<jsp:getProperty name="ok" property="startOrArrive"/>:
<jsp:getProperty name="ok" property="trainMessages"/>
</FONT></BODY></HTML>
SAXBean.java
package moon.yourbean;
import javax.xml.parsers.*;
import org.xml.sax.helpers.*;
import org.xml.sax.*;
public class SAXBean
{ String stationName="北京西站"; //站名
String startOrArrive="" ; //始发或终到
StringBuffer trainMessages=new StringBuffer(); //信息
SAXParserFactory factory=null;
SAXParser saxParser=null; //解析器
MyHandler handler; //事件处理器
public void setStationName(String s)
{ stationName=s.trim();
try{ byte b[]=stationName.getBytes("ISO-8859-1");
stationName=new String(b);
}
catch(Exception ee){}
}
public String getStationName()
{ return stationName;
}
public void setStartOrArrive(String s)
{ startOrArrive=s.trim();
try{ byte b[]=startOrArrive.getBytes("ISO-8859-1");
startOrArrive=new String(b);
}
catch(Exception ee){}
}
public String getStartOrArrive()
{ return startOrArrive;
}
public StringBuffer getTrainMessages()
{ try{ factory=SAXParserFactory.newInstance() ;
saxParser=factory.newSAXParser();
handler=new MyHandler(trainMessages,stationName,startOrArrive);
saxParser.parse("D:/1000/trainList.xml",handler);
}
catch(Exception e){ System.out.println(e);}
return trainMessages;
}
}
class MyHandler extends DefaultHandler
{ StringBuffer trainMessages;
String stationName,startOrArrive;
boolean 站名标记=false,始发或终到标记=false;
MyHandler(StringBuffer mess,String sName,String startOrArr)
{ trainMessages=mess;
stationName=sName;
startOrArrive=startOrArr;
}
public void startDocument()
{ trainMessages.append("<table border=2> ");
trainMessages.append("<tr>");
trainMessages.append("<th>车次名字</th>");
trainMessages.append("<th>运行区间</th>");
trainMessages.append("<th>始发时间</th>");
trainMessages.append("<th>终到时间</th>");
trainMessages.append("</tr>");
}
public void endDocument()
{ trainMessages.append("</table> ");
}
public void startElement(String uri,String localName,
String qName,Attributes atts)
{ qName=qName.trim();
if(qName.equals(stationName))
{ 站名标记=true;
trainMessages.append(" "+qName);
}
if(qName.equals(startOrArrive))
{ 始发或终到标记=true;
}
if(qName.endsWith("车次"))
{ trainMessages.append("<tr>");
}
}
public void endElement(String uri,String localName,String qName)
{
if(qName.startsWith(stationName))
{ 站名标记=false;
}
if(qName.startsWith(startOrArrive))
{ 始发或终到标记=false;
}
if(qName.endsWith("车次"))
{ trainMessages.append("</tr>");
}
}
public void characters(char[] ch,int start,int length)
{
String text=new String(ch,start,length);
text=text.trim();
if(站名标记==true&&始发或终到标记==true&&text.length()>0)
{ String str=text.trim();
trainMessages.append("<td>"+str+"</td>");
}
}
}
例子3
type.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY bgcolor=yellow >
<BR>显示几个数学公式和化合物分子式:<A href="formula.xml">显示</A>
</BODY></HTML>
formula.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="show.css" type="text/css" ?>
<root>
<math> 几个数学公式:
<formula>
平方和公式:
(A+B)<sup>2</sup>=
A<sup>2</sup>+2AB+B<sup>2</sup>
</formula>
<formula>
立方和公式:
(A+B)<sup>3</sup>=
A<sup>3</sup>+3A<sup>2</sup>B+3B<sup>2</sup>A<sup>2</sup>+A<sup>3</sup>
</formula>
</math>
<chemistry>
几个化合物分子式:
<molecular>
水的分子式:
H<low>2</low>O
</molecular>
<molecular>
二氧化硫的分子式:
SO<low>2</low>
</molecular>
<molecular>
碳酸的分子式:
H<low>2</low>CO<low>3</low>
</molecular>
</chemistry>
</root>
show.css
math
{ display:block;
background-color:yellow;
color:green;
left=100;
}
chemistry
{ display:block;
background-color:cyan;
color:green;
left=100;
}
formula
{ display:list-item;
list-style-type:lower-roman;
margin-left:60;
font-size:14pt;
color:black;
}
molecular
{ display:list-item;
list-style-type:decimal;
margin-left:60;
font-size:14pt;
color:black;
}
sup
{ display:line;
font-size:10pt;
font-weight:bold;
font-style:italic;
color:blue;
vertical-align:super;
}
low
{ display:line;
font-size:8pt;
font-weight:bold;
color:blue;
vertical-align:bottom;
}
第10章 基于会员制的网络广告系统
head.txt
<%@ page contentType="text/html;charset=GB2312" %>
<CENTER><Font size=5><P>网 络 广 告 系 统</Font></CENTER>
<table cellSpacing="1" cellPadding="1" width="560" align="center" border="0" >
<tr valign="bottom">
<td><A href="register.jsp"><font size=2>会员注册</font></A></td>
<td><A href="login.jsp"><font size=2>会员登录</font></A></td>
<td><A href="upload.jsp"><font size=2>上传广告照片</font></A></td>
<td><A href="choiceLookType.jsp"><font size=2>浏览会员的广告</font></A></td>
<td><A href="choiceModifyMess.jsp"><font size=2>修改注册信息</font></A></td>
<td><A href="modifyPassword.jsp"><font size=2>修改密码</font></A></td>
<td><A href="helpExitLogin"><font size=2>退出登录</font></A></td>
<td><A href="index.jsp"><font size=2>返回主页</font></A></td>
</tr>
</Font>
</table>
index.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML> <BODY>
<HEAD><%@ include file="head.txt" %></HEAD>
<CENTER> <h1><Font Size=4 color=red>欢迎您来这里做广告</font></h1>
<img src="welcome.jpg" width=500 height=400 ></img>
</CENTER>
</BODY></HTML>
web.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>myservlet.control.HandleRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/helpRegister</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>myservlet.control.HandleLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/helpLogin</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>myservlet.control.HandleUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/helpUpload</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>lookRecord</servlet-name>
<servlet-class>myservlet.control.HandleDatabase</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>lookRecord</servlet-name>
<url-pattern>/helpShowMember</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>modifyPassword</servlet-name>
<servlet-class>myservlet.control.HandlePassword</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>modifyPassword</servlet-name>
<url-pattern>/helpModifyPassword</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getOldMess</servlet-name>
<servlet-class>myservlet.control.GetOldMess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getOldMess</servlet-name>
<url-pattern>/helpGetOldMess</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>modifyOldMess</servlet-name>
<servlet-class>myservlet.control.HandleModifyMess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>modifyOldMess</servlet-name>
<url-pattern>/helpModifyMess</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>exit</servlet-name>
<servlet-class>myservlet.control.HandleExit</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>exit</servlet-name>
<url-pattern>/helpExitLogin</url-pattern>
</servlet-mapping>
</web-app>
Register.java
package mybean.data;
public class Register
{ String logname="",password="",advertiseTitle="",
email="", phone="", message="";
String backNews;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setAdvertiseTitle(String s)
{ advertiseTitle=s;
}
public String getAdvertiseTitle()
{ return advertiseTitle;
}
public void setPassword(String pw)
{ password=pw;
}
public String getPassword()
{ return password;
}
public void setEmail(String em)
{ email=em;
}
public String getEmail()
{ return email;
}
public void setPhone(String ph)
{ phone=ph;
}
public String getPhone()
{ return phone;
}
public String getMessage()
{ return message;
}
public void setMessage(String m)
{ message=m;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
register.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=cyan><Font size=2><CENTER>
<FORM action="helpRegister" name=form>
<table>
输入您的信息,会员名字必须由字母和数字组成,带*号项必须填写。
<tr><td>会员名称:</td><td><Input type=text name="logname" >*</td></tr>
<tr><td>设置密码:</td><td><Input type=password name="password">*</td></tr>
<tr><td>广告标题:</td><td><Input type=text name="advertiseTitle">* </td></tr>
<tr><td>电子邮件:</td><td><Input type=text name="email"></td></tr>
<tr><td>联系电话:</td><td><Input type=text name="phone"></td></tr>
</table>
<table>
<tr><td><Font size=2>输入您的广告词:</td></tr>
<tr>
<td><TextArea name="message" Rows="6" Cols="30"></TextArea></td>
</tr>
<tr><td><Input type=submit name="g" value="提交"></td> </tr>
</table>
</Form></CENTER>
</Body></HTML>
showRegisterMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.*"%>
<jsp:useBean id="register" type="mybean.data.Register" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=cyan >
<CENTER>
<Font size=4 color=blue >
<BR> <jsp:getProperty name="register" property="backNews"/>
</Font>
<table>
<tr><td>注册的会员名称:
</td><td><jsp:getProperty name="register" property="logname"/>
</td></tr>
<tr><td>注册的广告标题:</td>
<td><jsp:getProperty name="register" property="advertiseTitle"/></td></tr>
<tr><td>
注册的电子邮件:</td><td><jsp:getProperty name="register" property="email"/>
</td></tr>
<tr><td>
注册的联系电话:</td><td><jsp:getProperty name="register" property="phone"/>
</td></tr>
</table>
<table><tr><td>您的广告词:</td></tr>
<tr><td><TextArea name="message" Rows="6" Cols="30">
<jsp:getProperty name="register" property="message"/>
</TextArea>
</td>
</tr>
</table>
</CENTER></BODY></HTML>
HandleRegister.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleRegister extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Connection con;
PreparedStatement sql;
Register reg=new Register();
request.setAttribute("register",reg);
String logname=request.getParameter("logname").trim(),
password=request.getParameter("password").trim(),
advertiseTitle=request.getParameter("advertiseTitle").trim(),
email=request.getParameter("email").trim(),
phone=request.getParameter("phone").trim(),
message=request.getParameter("message");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
if(logname==null)
logname="";
if(password==null)
password="";
boolean isLD=true;
for(int i=0;i<logname.length();i++)
{ char c=logname.charAt(i);
if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
isLD=false;
}
boolean boo=logname.length()>0&&password.length()>0&&isLD;
String backNews="";
try{ con=DriverManager.getConnection(uri,"sa","sa");
String insertCondition="INSERT INTO member VALUES (?,?,?,?,?,?,?)";
sql=con.prepareStatement(insertCondition);
if(boo)
{ sql.setString(1,handleString(logname));
sql.setString(2,handleString(password));
sql.setString(3,handleString(advertiseTitle));
sql.setString(4,phone);
sql.setString(5,email);
sql.setString(6,handleString(message));
sql.setString(7,"public.jpg");
int m=sql.executeUpdate();
if(m!=0)
{ backNews="注册成功";
reg.setBackNews(backNews);
reg.setLogname(logname);
reg.setPassword(handleString(password));
reg.setAdvertiseTitle(handleString(advertiseTitle));
reg.setEmail(handleString(email));
reg.setPhone(phone);
reg.setMessage(handleString(message));
}
}
else
{ backNews="信息填写不完整或名字中有非法字符";
reg.setBackNews(backNews);
}
con.close();
}
catch(SQLException exp)
{ backNews="该会员名已被使用,请您更换名字"+exp;
reg.setBackNews(backNews);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showRegisterMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
Login.java
package mybean.data;
public class Login
{ String logname,
password,
backNews="";
boolean success=false;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{return logname;
}
public void setPassword(String pw)
{ password=pw;
}
public String getPassword()
{return password;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
public void setSuccess(boolean b)
{ success=b;
}
public boolean getSuccess()
{ return success;
}
}
login.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=pink><Font size=2><CENTER>
<BR><BR>
<table border=2>
<tr> <th>请您登录</th></tr>
<FORM action="helpLogin" Method="post">
<tr><td>登录名称:<Input type=text name="logname"></td></tr>
<tr><td>输入密码:<Input type=password name="password"></td></tr>
</table>
<BR><Input type=submit name="g" value="提交">
</Form></CENTER>
</BODY></HTML>
showLoginMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.Login"%>
<jsp:useBean id="login" type="mybean.data.Login" scope="session"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER><Font size=4 color=blue >
<BR> <jsp:getProperty name="login" property="backNews"/>
</Font>
<% if(login.getSuccess()==true)
{
%> <BR>登录会员名称:<jsp:getProperty name="login" property="logname"/>
<% }
else
{
%> <BR>登录会员名称:<jsp:getProperty name="login" property="logname"/>
<BR>登录会员密码:<jsp:getProperty name="login" property="password"/>
<% }
%>
</FONT></CENTER>
</BODY></HTML>
HandleLogin.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleLogin extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Connection con;
PreparedStatement sql;
Login loginBean=null;
String backNews="";
HttpSession session=request.getSession(true);
try{ loginBean=(Login)session.getAttribute("login");
if(loginBean==null)
{ loginBean=new Login();
session.setAttribute("login",loginBean);
}
}
catch(Exception ee)
{ loginBean=new Login();
session.setAttribute("login",loginBean);
}
String logname=request.getParameter("logname").trim(),
password=request.getParameter("password").trim();
boolean ok=loginBean.getSuccess();
logname=handleString(logname);
password=handleString(password);
if(ok==true&&logname.equals(loginBean.getLogname()))
{ backNews=logname+"已经登录了";
loginBean.setBackNews(backNews);
}
else
{ String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
boolean boo=(logname.length()>0)&&(password.length()>0);
try{ con=DriverManager.getConnection(uri,"sa","sa");
String condition="select * from member where logname =? and password =?";
sql=con.prepareStatement(condition);
if(boo)
{ sql.setString(1,logname);
sql.setString(2,password);
ResultSet rs=sql.executeQuery();
boolean m=rs.next();
if(m==true)
{ backNews="登录成功";
loginBean.setBackNews(backNews);
loginBean.setSuccess(true);
loginBean.setLogname(logname);
}
else
{ backNews="您输入的用户名不存在,或密码不般配";
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
loginBean.setLogname(logname);
loginBean.setPassword(password);
}
}
else
{ backNews="您输入的用户名不存在,或密码不般配";
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
loginBean.setLogname(logname);
loginBean.setPassword(password);
}
con.close();
}
catch(SQLException exp)
{ backNews=""+exp;
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
}
}
RequestDispatcher dispatcher=request.getRequestDispatcher("showLoginMess.jsp");
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
UploadFile.java
package mybean.data;
public class UploadFile
{ String fileName,savedFileName,
backNews="";
public void setFileName(String name)
{ fileName=name;
}
public String getFileName()
{return fileName;
}
public void setSavedFileName(String name)
{ savedFileName=name;
}
public String getSavedFileName()
{return savedFileName;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
upload.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=yellow><Font size=2><CENTER>
<BR>文件将被上传到 D:\apache-tomcat-5.5.20\webapps\ch10\image中。
<BR>选择要上传的图像照片文件(名字不可以含有非ASCII码字符,比如汉字等):
<FORM action="helpUpload" method="post" ENCTYPE="multipart/form-data">
<INPUT type=FILE name="fileName" size="40">
<BR> <INPUT type="submit" name ="g" value="提交">
</FORM></CENTER>
</Font></BODY></HTML>
showUploadMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.*"%>
<jsp:useBean id="upFile" type="mybean.data.UploadFile" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER><Font size=2 color=blue >
<BR> <jsp:getProperty name="upFile" property="backNews" />
</Font>
<BR><font size=2>上传的文件名字:<jsp:getProperty name="upFile" property="fileName"/>
保存后的文件名字:<jsp:getProperty name="upFile" property="savedFileName"/>
<BR> <img src=image/<jsp:getProperty name="upFile" property="savedFileName"/>
width=150 height=120>图像效果
</img>
</FONT></CENTER>
</BODY></HTML>
HandleUpload.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleUpload extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ String logname=login.getLogname();
uploadFileMethod(request,response,logname); //接受上传文件
}
}
public void uploadFileMethod(HttpServletRequest request,HttpServletResponse response,
String logname) throws ServletException,IOException
{ UploadFile upFile=new UploadFile();
String backNews="";
try{ HttpSession session=request.getSession(true);
request.setAttribute("upFile",upFile);
String tempFileName=(String)session.getId();
File f1=new File(tempFileName);
FileOutputStream o=new FileOutputStream(f1);
InputStream in=request.getInputStream();
byte b[]=new byte[10000];
int n;
while( (n=in.read(b))!=-1)
{ o.write(b,0,n);
}
o.close();
in.close();
RandomAccessFile random=new RandomAccessFile(f1,"r");
int second=1; //读出f1的第2行,析取出上传文件的名字:
String secondLine=null;
while(second<=2)
{ secondLine=random.readLine();
second++;
}
//获取第2行中目录符号'\'最后出现的位置:
int position=secondLine.lastIndexOf('\\');
//截取文件名:
String fileName=secondLine.substring(position+1,secondLine.length()-1);
byte cc[]=fileName.getBytes("ISO-8859-1");
fileName=new String(cc);
fileName=fileName.replaceAll(" ","");
//文件是否由字母或数字组成判断名字
String checkedStr=fileName.substring(0,fileName.indexOf("."));
boolean isLetterOrDigit=true;
for(int i=0;i<checkedStr.length();i++)
{ char c=checkedStr.charAt(i);
if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
{ isLetterOrDigit=false;
break;
}
}
if(isLetterOrDigit==false)
{ response.sendRedirect("upload.jsp"); //重定向到upload.jsp页面
}
//保存文件名是上传文件名加会员名为前缀:
String savedFileName=logname.concat(fileName);
random.seek(0);
long forthEndPosition=0; //获取第4行回车符号的位置
int forth=1;
while((n=random.readByte())!=-1&&(forth<=4))
{ if(n=='\n')
{ forthEndPosition=random.getFilePointer();
forth++;
}
}
//根据客户上传文件的名字,将该文件存入磁盘:
File dir=new File("D:/apache-tomcat-5.5.20/webapps/ch10/image");
dir.mkdir();
//首先删除用户曾上传过的图像文件:
File file[]=dir.listFiles();
for(int k=0;k<file.length;k++)
{ if(file[k].getName().startsWith(logname))
file[k].delete();
}
File savingFile= new File(dir,savedFileName); //需要新保存的上传文件
RandomAccessFile random2=new RandomAccessFile(savingFile,"rw");
random.seek(random.length());
long endPosition=random.getFilePointer();
long mark=endPosition;
int j=1;
//确定出文件f1中包含客户上传的文件的内容的最后位置,即倒数第6行:
while((mark>=0)&&(j<=6))
{ mark--;
random.seek(mark);
n=random.readByte();
if(n=='\n')
{ endPosition=random.getFilePointer();
j++;
}
}
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
while(startPoint<endPosition-1)
{ n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
Connection con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=sql.executeQuery("SELECT * FROM member where logname =
'"+logname+"'");
if(rs.next())
{ if(isLetterOrDigit)
{ int mm=sql.executeUpdate("UPDATE member SET pic= '"+savedFileName+
"' where logname = '"+logname+"'");
if(mm!=0)
{ backNews=fileName+"成功上传";
upFile.setFileName(fileName);
upFile.setSavedFileName(savedFileName);
upFile.setBackNews(backNews);
}
}
}
con.close();
f1.delete();
}
catch(Exception exp)
{ backNews=""+exp;
upFile.setBackNews(backNews);
}
try{ RequestDispatcher dispatcher=
request.getRequestDispatcher("showUploadMess.jsp");//转发
dispatcher.forward(request, response);
}
catch(Exception ee){}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
MemberInform.java
package mybean.data;
public class MemberInform
{ String logname="",advertiseTitle="",email="",
phone="", message="",pic,backNews="";
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setAdvertiseTitle(String s)
{ advertiseTitle=s;
}
public String getAdvertiseTitle()
{ return advertiseTitle;
}
public void setEmail(String em)
{ email=em;
}
public String getEmail()
{ return email;
}
public void setPhone(String ph)
{ phone=ph;
}
public String getPhone()
{ return phone;
}
public String getMessage()
{ return message;
}
public void setMessage(String m)
{ message=m;
}
public String getPic()
{ return pic;
}
public void setPic(String s)
{ pic=s;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
ShowByPage.java
package mybean.data;
import com.sun.rowset.*;
public class ShowByPage
{ CachedRowSetImpl rowSet=null; //存储表中全部记录的行集对象
int pageSize=10; //每页显示的记录数
int pageAllCount=0; //分页后的总页数
int showPage=1 ; //当前显示页
StringBuffer presentPageResult; //显示当前页内容
public void setRowSet(CachedRowSetImpl set)
{ rowSet=set;
}
public CachedRowSetImpl getRowSet()
{ return rowSet;
}
public void setPageSize(int size)
{ pageSize=size;
}
public int getPageSize()
{ return pageSize;
}
public int getPageAllCount()
{ return pageAllCount;
}
public void setPageAllCount(int n)
{ pageAllCount=n;
}
public void setShowPage(int n)
{ showPage=n;
}
public int getShowPage()
{ return showPage;
}
public void setPresentPageResult(StringBuffer p)
{ presentPageResult=p;
}
public StringBuffer getPresentPageResult()
{ return presentPageResult;
}
}
choiceLookType.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=cyan><center><Font size=3>
<table>
<FORM action="helpShowMember" method="post" name="form">
<BR>分页显示全体会员
<INPUT type="hidden" value="1" name="showPage" size=6>
<INPUT type="submit" value="显示" name="submit">
</Form>
<FORM action="helpShowMember" method="get" name="form">
<br>输入要查找的会员名:
<INPUT type="text" name="logname" size=6>
<INPUT type="submit" value="显示" name="submit">
</FORM></center>
</BODY></HTML>
showAllMember.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.ShowByPage" %>
<jsp:useBean id="show" type="mybean.data.ShowByPage" scope="session"/>
<HTML><%@ include file="head.txt" %></HEAD>
<Body ><center>
<P>显示会员信息.
<BR>每页最多显示<jsp:getProperty name= "show" property="pageSize" />条信息
<BR>当前显示第<Font color=blue>
<jsp:getProperty name= "show" property="showPage" />
</Font>页,共有
<Font color=blue><jsp:getProperty name= "show" property="pageAllCount" />
</Font>页。
<BR>当前显示的内容是:
<table border=2>
<tr>
<th>会员名</th><th>广告标题</th><th>电话</th>
<th>email</th><th>广告词</th><th>广告照片</th>
</tr>
<jsp:getProperty name= "show" property="presentPageResult" />
</table>
<BR>单击“前一页”或“下一页”按纽查看信息
<Table>
<tr><td><FORM action="helpShowMember" method=post>
<Input type=hidden name="showPage" value="<%=show.getShowPage()-1 %>" >
<Input type=submit name="g" value="前一页">
</FORM>
</td>
<td><FORM action="helpShowMember" method=post>
<Input type=hidden name="showPage" value="<%=show.getShowPage()+1 %>" >
<Input type=submit name="g" value="后一页">
</Form>
</td>
<td> <FORM action="helpShowMember" method=post>
输入页码:<Input type=text name="showPage" size=5 >
<Input type=submit name="g" value="提交">
</FORM>
</td>
</tr>
</Table>
</Center>
</BODY></HTML>
showLookedMember.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.MemberInform" %>
<jsp:useBean id="inform" type="mybean.data.MemberInform" scope="request"/>
<Center>
<HTML><BODY bgcolor=pink><%@ include file="head.txt" %></HEAD>
<table border=2>
<tr>
<th>会员名</th><th>广告标题</th><th>电话</th>
<th>email</th><th>广告词</th><th>广告照片</th>
</tr>
<tr>
<td><jsp:getProperty name= "inform" property="logname" /></td>
<td><jsp:getProperty name= "inform" property="advertiseTitle" /></td>
<td><jsp:getProperty name= "inform" property="phone" /></td>
<td><jsp:getProperty name= "inform" property="email" /></td>
<td><jsp:getProperty name= "inform" property="message" /></td>
<td><img src=image/<jsp:getProperty name="inform" property="pic"/> width=50 height=50>
</img></td>
</table>
</Center>
</BODY></HTML>
HandleDatabase.java
package myservlet.control;
import mybean.data.*;
import com.sun.rowset.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleDatabase extends HttpServlet
{ CachedRowSetImpl rowSet=null;
public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Connection con=null;
StringBuffer presentPageResult=new StringBuffer();
ShowByPage showBean=null;
try{ showBean=(ShowByPage)session.getAttribute("show");
if(showBean==null)
{ showBean=new ShowByPage(); //创建Javabean对象
session.setAttribute("show",showBean);
}
}
catch(Exception exp)
{ showBean=new ShowByPage();
session.setAttribute("show",showBean);
}
showBean.setPageSize(3); //每页显示3条记录
int showPage=Integer.parseInt(request.getParameter("showPage"));
if(showPage>showBean.getPageAllCount())
showPage=1;
if(showPage<=0)
showPage=showBean.getPageAllCount();
showBean.setShowPage(showPage);
int pageSize=showBean.getPageSize();
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=sql.executeQuery("SELECT * FROM member");
rowSet=new CachedRowSetImpl(); //创建行集对象
rowSet.populate(rs);
con.close(); //关闭连接
showBean.setRowSet(rowSet); //数据存储在showBean中
rowSet.last();
int m=rowSet.getRow(); //总行数
int n=pageSize;
int pageAllCount=((m%n)==0)?(m/n):(m/n+1);
showBean.setPageAllCount(pageAllCount);//数据存储在showBean中
presentPageResult=show(showPage,pageSize,rowSet);
showBean.setPresentPageResult(presentPageResult);
}
catch(SQLException exp){}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showAllMember.jsp");//转发
dispatcher.forward(request, response);
}
public StringBuffer show(int page,int pageSize,CachedRowSetImpl rowSet)
{ StringBuffer str=new StringBuffer();
try{ rowSet.absolute((page-1)*pageSize+1);
for(int i=1;i<=pageSize;i++)
{ str.append("<tr>");
str.append("<td>"+rowSet.getString(1)+"</td>");
str.append("<td>"+rowSet.getString(3)+"</td>");
str.append("<td>"+rowSet.getString(4)+"</td>");
str.append("<td>"+rowSet.getString(5)+"</td>");
str.append("<td>"+rowSet.getString(6)+"</td>");
String s="<img src=image/"+rowSet.getString(7)+" width=100 height=100/>";
str.append("<td>"+s+"</td>");
str.append("</tr>");
rowSet.next();
}
}
catch(SQLException exp){}
return str;
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoGet(request,response);
}
}
public void continueDoGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ MemberInform inform=new MemberInform();
request.setAttribute("inform",inform);
String logname=request.getParameter("logname");
Connection con=null;
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname = '"+logname+"'");
if(rs.next())
{ inform.setLogname(rs.getString(1));
inform.setAdvertiseTitle(rs.getString(3));
inform.setPhone(rs.getString(4));
inform.setEmail(rs.getString(5));
inform.setMessage(rs.getString(6));
inform.setPic(rs.getString(7));
inform.setBackNews("查询到的会员信息:");
}
con.close();
RequestDispatcher dispatcher=
request.getRequestDispatcher("showLookedMember.jsp");//转发
dispatcher.forward(request, response);
}
catch(SQLException exp)
{ inform.setBackNews(""+exp);System.out.println("ok1"+exp);
}
}
}
Password.java
package mybean.data;
public class Password
{ String oldPassword,newPassword,backNews="";
public void setNewPassword(String pw)
{ newPassword=pw;
}
public String getnewPassword()
{return newPassword;
}
public void setOldPassword(String pw)
{ oldPassword=pw;
}
public String getOldPassword()
{return oldPassword;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
modifyPassword.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=pink><Font size=2><CENTER>
<P>输入您的密码:
<FORM action="helpModifyPassword" Method="post">
<BR>当前密码:<Input type=text name="oldPassword">
<BR>新密码: <Input type=password name="newPassword">
<BR><Input type=submit name="g" value="提交">
</Form></CENTER>
</BODY></HTML>
showNewPasswor.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.Password"%>
<jsp:useBean id="password" type="mybean.data.Password" scope="request" />
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER>
<jsp:getProperty name="password" property="backNews" />
<BR>您的新密码:<jsp:getProperty name="password" property="newPassword" />
<BR>您的旧密码:<jsp:getProperty name="password" property="oldPassword" />
</FONT></CENTER>
</BODY></HTML>
HandlePassword.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandlePassword extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueWork(request,response);
}
}
public void continueWork(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
Connection con=null;
String logname=login.getLogname();
Password passwordBean=new Password();
request.setAttribute("password",passwordBean);
String oldPassword=request.getParameter("oldPassword");
String newPassword=request.getParameter("newPassword");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname='"+
logname+"'And password='"+oldPassword+"'");
if(rs.next())
{ String updateString="UPDATE member SET password='"+
newPassword+"' where logname='"+logname+"'";
int m=sql.executeUpdate(updateString);
if(m==1)
{ passwordBean.setBackNews("密码更新成功");
passwordBean.setOldPassword(oldPassword);
passwordBean.setNewPassword(newPassword);
}
else
{ passwordBean.setBackNews("密码更新失败");
}
}
else
{ passwordBean.setBackNews("密码更新失败");
}
}
catch(SQLException exp)
{ passwordBean.setBackNews("密码更新失败"+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showNewPassword.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
ModifyMessage.java
package mybean.data;
public class ModifyMessage
{ String logname="",newAdvertiseTitle="",newEmail="",newPhone="",
newMessage="",backNews;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setNewAdvertiseTitle(String s)
{ newAdvertiseTitle=s;
}
public String getNewAdvertiseTitle()
{ return newAdvertiseTitle;
}
public void setNewEmail(String em)
{ newEmail=em;
}
public String getNewEmail()
{ return newEmail;
}
public void setNewPhone(String ph)
{ newPhone=ph;
}
public String getNewPhone()
{ return newPhone;
}
public String getNewMessage()
{ return newMessage;
}
public void setNewMessage(String m)
{ newMessage=m;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
choiceModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<Center>
<HTML><BODY bgcolor=pink><%@ include file="head.txt" %></HEAD>
<FORM action="helpGetOldMess" name=form>
<INPUT type=submit value="我要修改注册信息">
</FORM>
<FORM action="index.jsp" name=form>
<INPUT type=submit value="我不想修改了">
</FORM>
</Center>
</BODY></HTML>
inputModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<%@ page import="mybean.data.Register"%>
<jsp:useBean id="register" type="mybean.data.Register" scope="request" />
<HTML><BODY bgcolor=pink><CENTER>
<P>
<Font color=blue size=4>
以下是您(<jsp:getProperty name="register" property="logname"/>)曾注册的信息,
您可以修改这些信息。
</Font>
<Font size=2>
<FORM action="helpModifyMess" name=form>
<table>
<tr><td>广告标题:</td><td><Input type=text name="newAdvertiseTitle"
value=<jsp:getProperty name="register" property="advertiseTitle" /> ></td></tr>
<tr><td>联系电话:</td><td><Input type=text name="newPhone"
value=<jsp:getProperty name="register" property="phone" /> ></td></tr>
<tr><td>电子邮件:</td><td><Input type=text name="newEmail"
value=<jsp:getProperty name="register" property="email" />></td></tr>
</table>
<table>
<tr><td>广告词:</td></tr>
<tr>
<td><TextArea name="newMessage" Rows="6" Cols="30">
<jsp:getProperty name="register" property="message"/>
</TextArea></td>
</tr>
<tr><td><Input type=submit name="g" value="提交修改"></td></tr>
<tr><td><Input type=reset value="重置"></td> </tr>
</table><Font></CENTER>
</BODY></HTML>
showModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.ModifyMessage"%>
<jsp:useBean id="modify" type="mybean.data.ModifyMessage" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow ><Font size=4>
<CENTER>
<jsp:getProperty name="modify" property="backNews"/>
<BR>您修改信息如下:
<BR>新广告标题:<jsp:getProperty name="modify" property="newAdvertiseTitle"/>
<BR>新电话:<jsp:getProperty name="modify" property="newPhone"/>
<BR>新email:<jsp:getProperty name="modify" property="newEmail"/>
<BR>新广告词:<jsp:getProperty name="modify" property="newMessage"/>
</FONT></CENTER>
</BODY></HTML>
GetOldMess.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetOldMess extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");//获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueWork(request,response);
}
}
public void continueWork(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
Connection con=null;
String logname=login.getLogname();
Register register=new Register();
request.setAttribute("register",register);
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname='"+logname+"'");
if(rs.next())
{ register.setLogname(rs.getString(1));
register.setAdvertiseTitle(rs.getString(3));
register.setPhone(rs.getString(4));
register.setEmail(rs.getString(5));
register.setMessage(rs.getString(6));
register.setBackNews("您原来的注册信息:");
}
}
catch(SQLException exp)
{ register.setBackNews(""+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("inputModifyMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
HandleModifyMess.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleModifyMess extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");//获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
String logname=login.getLogname();
Connection con;
PreparedStatement sql;
ModifyMessage modify=new ModifyMessage();
request.setAttribute("modify",modify);
String advertiseTitle=request.getParameter("newAdvertiseTitle").trim(),
email=request.getParameter("newEmail").trim(),
phone=request.getParameter("newPhone").trim(),
message=request.getParameter("newMessage");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
String backNews="";
try{ con=DriverManager.getConnection(uri,"sa","sa");
String updateCondition=
"UPDATE member SET advertiseTitle=?,phone=?,email=?,message=? WHERE logname=?";
sql=con.prepareStatement(updateCondition);
sql.setString(1,handleString(advertiseTitle));
sql.setString(2,phone);
sql.setString(3,handleString(email));
sql.setString(4,handleString(message));
sql.setString(5,logname);
int m=sql.executeUpdate();
if(m==1)
{ backNews="修改信息成功";
modify.setBackNews(backNews);
modify.setLogname(logname);
modify.setNewAdvertiseTitle (handleString(advertiseTitle));
modify.setNewEmail(handleString(email));
modify.setNewPhone(phone);
modify.setNewMessage(handleString(message));
}
else
{ backNews="信息填写不完整或信息中有非法字符";
modify.setBackNews(backNews);
}
con.close();
}
catch(SQLException exp)
{ modify.setBackNews(""+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showModifyMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
HandleExit.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleExit extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
session.invalidate(); //销毁用户的session对象
response.sendRedirect("index.jsp"); //返回主页
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
简单的XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<列车时刻表>
<T28>
<开车时间>20点58分</开车时间>
<终到时间>08点18分</终到时间>
</T28>
<T876>
<开车时间>23点12分</开车时间>
<终到时间>07点25分</终到时间>
</T876>
</列车时刻表>
1.规范的XML
规范的XML文件应当用“XML声明”开始、文件有当且仅有一个根标记,其它标记都必须封装在根标记中,文件的标记必须是树型结构、非空标记必须由“开始标记”与“结束标记”组成、空标记没有“开始标记”和“结束标记”等等。
W3C吸取了HTML发展的教训,对XML指定了严格的语法标准。为了检查XML文件是否规范,一个简单的办法就是用浏览器,比如IE5.5,打开XML文件,如果XML是规范的,浏览器将显示XML源文件,否则,将显示出错信息。
XML声明
XML声明中的版本属性
一个简单的XML声明中可以只包含属性version,目前该属性的只可以值可以取1.0,指出该XML文件使用的XML版本。
XML声明中的编码属性
如果在XML声明中没有指定encoding属性的值,那么该属性的默认值是“UTF-8”。例如:
<?xml version="1.0" encoding="UTF-8" ?>
如果encoding属性的值为“UTF-8”,XML文件必须选择“UTF-8”编码来保存 .
2.标记
根标记
XML文件必须有且仅有一个根标记,其它标记都必须封装在根标记中,形成树型结构。
空标记
所谓空标记就是不标记任何内容的标记。由于空标记不标记任何内容,所以空标记不需要开始标记和结束标记,空标记以 “<”标识开始,用“/>” 标识结束 .例如:
<chair width="24" height="12" />
非空标记
非空标记必须由“开始标记”与“结束标记”组成,“开始标记”与“结束标记”之间是该标记所标记的内容。例如:
<名称>电视</名称>
3.有效的XML
规范性仅仅是XML语言的基本语法,没有对XML文件怎样组织数据进行具体的限制,对同一问题编写的XML文件,在数据组织结构上就可能有很大的不同 .
针对某些问题,有时可能需要对XML文件怎样组织数据,即数据之结构,进行必要的限制,以便解析器能更好地解析其中的数据。对XML的数据结构进行限制的传统常用方式是使用文档类型定义(Document Type Definition,DTD)。
DTD文档
DTD文档是由<!ELEMENT>元素组成的文本文件,其扩展名为“.dtd”。
DTD中的<!ELEMENT>元素用来约束XML文件中的标记,在DTD中使用元素声明来定义一个<!ELEMENT>元素,元素的声明格式为:
<!ELEMENT 标记名称 标记的约束条件 >
例如:
<!ELEMENT 列车时刻表 (T28次,T678次) >
约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T678次”。
XML与DTD关联
XML文件使用文档类型声明与一个DTD相关联,即遵守该DTD文件规定的限制条件。有两种形式的关联:SYSTEM和PUBLIC,SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可;PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件。
SYSTEM关联型的文档类型声明格式:
<DOCTYPE 根标记的名称 SYSTEM "DTD文件的URI">
例如:
<!DOCTYPE 列车时刻表 SYSTEM "Control.dtd">
PUBLIC关联型的文档类型声明格式:
<DOCTYPE根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">
例如:
<!DOCTYPE 列车时刻表 PUBLIC "-//ISO123456/Daxian/ForXML/EN" " Control.dtd">
4. DOM解析器
DOM(Document Object Model,文档对象模型)是W3C制定的一套规范标准。DOM规范的核心是按树型结构处理数据。简单地说,DOM解析器必须按着DOM规范在内存中按树型结构组织数据,DOM解析器通过读入XML文件在内存中建立一个“树”,也就是说XML文件的标记、标记的文本内容都会和内存中“树”的某个节点相对应。一个应用程可以方便地操作内存中“树”的节点来处理XML文档,获取自己所需要的数据。
使用DOM解析器的基本步骤
1.使用javax.xml.parsers包中的DocumentBuilderFactory类调用其类方法newInstance()实例化一个DocumentBuilderFactory对象:
DocumentBuilderFactory factory= DocumentBuilderFactory. newInstance();
2.factory对象调用newDocumentBuilder()方法返回一个DocumentBuilder对象(称做DOM解析器),例如:
DocumentBuilder builder=factory. newDocumentBuilder();
DocumentBuilder 类在javax.xml.parsers包中。
3.builder对象调用public Document parse(File f)方法解析参数f指定的文件,并返回一个实现了Document接口的实例,该实例被称做Document对象。例如:
Document document= builder. parse(new File("price.xml")) ;
5. SAX解析器
SAX解析器不在内存中建立和XML文件相对应的树形结构数据,SAX解析器的核心是事件处理机制,和DOM解析器相比,SAX解析器占有的内存少,对于许多应用程序,使用SAX解析器来获取XML数据具有较高的效率。
使用SAX解析器的基本步骤
1.SAXParserFactory对象
使用javax.xml.parsers包中的SAXParserFactory类调用其类方法
newInstance()实例化一个SAXParserFactory对象,如:
SAXParserFactory factory=SAXParserFactory.newInstance() ;
2. SAXParser对象(SAX解析器)
SAXParserFactory对象调用newSAXParser()方法返回一个SAXParser对象,称之为SAX解析器,如:
SAXParser saxParser=factory.newSAXParser();
3. saxParser对象调用public void parse(File f,DefaultHandler dh)方法解析参数f指定的XML文件。
SAX解析器的工作原理
SAX解析器调用parse方法(见9.4.1中的步骤3)解析XML文件,parse方法的第2个参数dh是DefaultHandler类型,称作事件处理器。parse方法在解析XML文件的过程中,根据从文件中解析出的的数据产生相应的事件,并报告这个事件个给事件处理器dh,事件处理器dh就会处理所发现的数据,即处理器dh会根据相应的事件调用相应的方法来处理数据,parse方法必须等待事件处理器处理完毕后再继续解析文件、报告下一个事件。
6. XML与CSS
W3C为显示XML中所有标记所含有的文本发布了一个建议规范:CSS(层叠样式表)。本节介绍CSS中的基本内容,如果需要了解细节可参见有关书籍.
使用CSS
为了让XML使用层叠样式表显示其中的文本数据,XML文件必须使用操作指令
<?xml-stylesheet href ="样式表的URI" type= "text/css" ?>
将当前XML文件关联到某个层叠样式表,样式表的URI如果是一个文件的名字,该文件必须和XML文件在同一目录中,例如:
<?xml-stylesheet href="show.css" type="text/css" ?>
在CSS中,最重要的概念就是样式表。样式表是一组规则,通过这组规则告诉浏览器用什么样式来显示文本,比如,告诉浏览器使用什么样的字体、颜色和页边距来显示文本。一个样式表的格式如下:
文本代表
{ 样式规则
}
对于XML文件,样式表中的“文本代表”可以是标记的名称。样式表中的“样式规则”是若干个用分号分隔的“属性名:属性值”,例如:
name
{ display:block;font-size:36pt;font-weight:bold;
}
样式表用来显示标记“name”的文本内容,其中的“display:block;”告知浏览器将标记“<name>…</name>所标记的文本内容显示在一个“块区域”;“font-size:36pt;”能使得文本字体的大小是36镑;“font-weight:bold”的作用是让文本加重显示。
如果有多个标记的内容需要有完全一样方式来显示,“文本代表”也可以是这些标记的名称用逗号分隔的字符串。如:
name,sex,birthday
{
display:block;font-size:36pt;font-weight:bold;
}
一个层叠样式表(CSS)就是由若干个样式表组成的文本文件(扩展名为.css),该文本文件可以使用“ANSI”或“UTF-8”编码来保存。
显示数学公式和化合物分子式
1.JSP页面:type.jsp (JSP页面使用超链接请求XML文件:formula.xm )
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY bgcolor=yellow >
<BR>显示几个数学公式和化合物分子式:
<A href="formula.xml">显示</A>
</BODY></HTML>
2.XML文件 (formula.xml描述常用的数学公式和化合物的分子式 )
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="show.css" type="text/css" ?>
<root>
<math> 几个数学公式:
<formula>
平方和公式:
(A+B)<sup>2</sup>=
A<sup>2</sup>+2AB+B<sup>2</sup>
</formula>
<formula>
立方和公式:
(A+B+C)<sup>3</sup>=
A<sup>3</sup>+3A<sup>2</sup>B+3B<sup>2</sup>A<sup>2</sup>+A<sup>3</sup>
</formula>
</math>
<chemistry>
几个化合物分子式:
<molecular>
水的分子式:
H<low>2</low>O
</molecular>
<molecular>
二氧化硫的分子式:
SO<low>2</low>
</molecular>
<molecular>
碳酸的分子式:
H<low>2</low>CO<low>3</low>
</molecular>
</chemistry>
</root>
3. CSS文件 (XML文件与CSS层叠样式表关联,可把数据的显示和数据结构相分离 )
math
{ display:block;
background-color:yellow;
color:green;
left=100;
}
chemistry
{ display:block;
background-color:cyan;
color:green;
left=100;
}
formula
{ display:list-item;
list-style-type:lower-roman;
margin-left:60;
font-size:14pt;
color:black;
}
molecular
{ display:list-item;
list-style-type:decimal;
margin-left:60;
font-size:14pt;
color:black;
}
sup
{ display:line;
font-size:10pt;
font-weight:bold;
font-style:italic;
color:blue;
vertical-align:super;
}
low
{ display:line;
font-size:8pt;
font-weight:bold;
color:blue;
vertical-align:bottom;
}
例子1
Score.xml
<?xml version="1.0" encoding="UTF-8" ?>
<成绩>
<学号 number="a1001">
<姓名>赵一</姓名>
<高等数学 课程性质="必修">89 </高等数学>
<大学物理 课程性质="必修">88 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1002">
<姓名>钱二</姓名>
<高等数学 课程性质="必修">77 </高等数学>
<大学物理 课程性质="必修">66 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1003">
<姓名>孙三</姓名>
<高等数学 课程性质="必修">75 </高等数学>
<大学物理 课程性质="必修">69 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
<学号 number="a1004">
<姓名>李四</姓名>
<高等数学 课程性质="必修">76 </高等数学>
<大学物理 课程性质="必修">87 </大学物理>
<摄影艺术 课程性质="选修">良好 </摄影艺术>
</学号>
</成绩>
input.jsp
<%@ page contentType="text/html;Charset=GB2312" %>
<HTML><BODY bgcolor=cyan>
<FORM action="byNumber" method=post name=form>
输入学号,查询成绩:
<INPUT type="text" name="studentNmber">
<INPUT TYPE="submit" value="提交" >
</FORM>
</HTML>
Number.java
package sun.yourservlet;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Number extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ boolean boo=false;
response.setContentType("text/html;charset=GB2312");
PrintWriter out=response.getWriter();
out.println("<html><body>");
String searchedNumber=request.getParameter("studentNmber");
try{ DocumentBuilderFactory factory=DocumentBuilderFactory. newInstance();
DocumentBuilder builder= factory.newDocumentBuilder();
Document document= builder. parse(new File("D:\\1000\\Score.xml")) ;
Element root=document.getDocumentElement() ; //获取根节点
//返回根节点的Element子节点,这些子节点对应着XML文件中的“学号"标记:
NodeList elemnetNodes=root.getElementsByTagName("学号") ;
int size=elemnetNodes.getLength();
for(int k=0;k<size;k++)
{ Node node=elemnetNodes.item(k);
if(node.getNodeType()==Node.ELEMENT_NODE) //判断node节点的类型
{ //再得到node节点的number属性的值:
String stuNumber=((Element)node).getAttribute("number");//获取学号
if(stuNumber.equals(searchedNumber))
{ boo=true;
NodeList childNodes=node.getChildNodes();//获取node的全部子节点
for(int i=0;k<childNodes.getLength();i++)
{ Node child=childNodes.item(i);
if(child.getNodeType()==Node.ELEMENT_NODE)
{ String nodeName=((Element)child).getTagName().trim();
out.println("<BR>"+nodeName);
String courseType=((Element)child).getAttribute("课程性质");
String contentStr=((Element)child).getTextContent();
if(nodeName.startsWith("姓名"))
out.println(":"+contentStr);
else
out.println("("+courseType+") :"+contentStr);
}
}
}
}
}
if(boo==false)
out.println("不存在您要查询的学号!");
}
catch(Exception ee)
{}
out.println("</body></html>");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
例子2
trainList.xml
<?xml version="1.0" encoding="UTF-8" ?>
<trainList>
<北京西站>
<始发列车>
<车次>
<名字>T83次</名字>
<运行区间>北京西-南京</运行区间>
<开车时间>20:17</开车时间>
<终到时间>09:10</终到时间>
</车次>
<车次>
<名字>T199次</名字>
<运行区间>北京西-上海</运行区间>
<开车时间>23:25</开车时间>
<终到时间>10:10</终到时间>
</车次>
</始发列车>
<终到列车>
<车次>
<名字>T84次</名字>
<运行区间>南京-北京西</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T200次</名字>
<运行区间>上海-北京西</运行区间>
<开车时间>22:25</开车时间>
<终到时间>09:10</终到时间>
</车次>
</终到列车>
</北京西站>
<广东站>
<始发列车>
<车次>
<名字>T186次</名字>
<运行区间>广东-武汉</运行区间>
<开车时间>22:17</开车时间>
<终到时间>09:24</终到时间>
</车次>
<车次>
<名字>T78次</名字>
<运行区间>广东-长沙</运行区间>
<开车时间>18:25</开车时间>
<终到时间>11:10</终到时间>
</车次>
</始发列车>
<终到列车>
<车次>
<名字>T193次</名字>
<运行区间>南京-广东</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T200次</名字>
<运行区间>上海-广东</运行区间>
<开车时间>21:15</开车时间>
<终到时间>12:10</终到时间>
</车次>
</终到列车>
</广东站>
</trainList>
train.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="moon.yourbean.*"%>
<jsp:useBean id="ok" class="moon.yourbean.SAXBean" scope="page"/>
<jsp:setProperty name="ok" property="stationName" param="stationName"/>
<jsp:setProperty name="ok" property="startOrArrive" param="startOrArrive"/>
<HTML><BODY bgcolor=cyan><Font size=2>
<FORM action="" Method="post" >
选择站名:
<Select name="stationName">
<Option value="北京西站">北京西站
<Option value="广东站">广东站
</Select>
选择始发或终到:
<INPUT type="radio" name="startOrArrive" value="始发列车" checked="default">始发列车
<INPUT type="radio" name="startOrArrive" value="终到列车">终到列车
<BR> <Input type=submit value="提交">
</FORM>
<jsp:getProperty name="ok" property="stationName"/>,
<jsp:getProperty name="ok" property="startOrArrive"/>:
<jsp:getProperty name="ok" property="trainMessages"/>
</FONT></BODY></HTML>
SAXBean.java
package moon.yourbean;
import javax.xml.parsers.*;
import org.xml.sax.helpers.*;
import org.xml.sax.*;
public class SAXBean
{ String stationName="北京西站"; //站名
String startOrArrive="" ; //始发或终到
StringBuffer trainMessages=new StringBuffer(); //信息
SAXParserFactory factory=null;
SAXParser saxParser=null; //解析器
MyHandler handler; //事件处理器
public void setStationName(String s)
{ stationName=s.trim();
try{ byte b[]=stationName.getBytes("ISO-8859-1");
stationName=new String(b);
}
catch(Exception ee){}
}
public String getStationName()
{ return stationName;
}
public void setStartOrArrive(String s)
{ startOrArrive=s.trim();
try{ byte b[]=startOrArrive.getBytes("ISO-8859-1");
startOrArrive=new String(b);
}
catch(Exception ee){}
}
public String getStartOrArrive()
{ return startOrArrive;
}
public StringBuffer getTrainMessages()
{ try{ factory=SAXParserFactory.newInstance() ;
saxParser=factory.newSAXParser();
handler=new MyHandler(trainMessages,stationName,startOrArrive);
saxParser.parse("D:/1000/trainList.xml",handler);
}
catch(Exception e){ System.out.println(e);}
return trainMessages;
}
}
class MyHandler extends DefaultHandler
{ StringBuffer trainMessages;
String stationName,startOrArrive;
boolean 站名标记=false,始发或终到标记=false;
MyHandler(StringBuffer mess,String sName,String startOrArr)
{ trainMessages=mess;
stationName=sName;
startOrArrive=startOrArr;
}
public void startDocument()
{ trainMessages.append("<table border=2> ");
trainMessages.append("<tr>");
trainMessages.append("<th>车次名字</th>");
trainMessages.append("<th>运行区间</th>");
trainMessages.append("<th>始发时间</th>");
trainMessages.append("<th>终到时间</th>");
trainMessages.append("</tr>");
}
public void endDocument()
{ trainMessages.append("</table> ");
}
public void startElement(String uri,String localName,
String qName,Attributes atts)
{ qName=qName.trim();
if(qName.equals(stationName))
{ 站名标记=true;
trainMessages.append(" "+qName);
}
if(qName.equals(startOrArrive))
{ 始发或终到标记=true;
}
if(qName.endsWith("车次"))
{ trainMessages.append("<tr>");
}
}
public void endElement(String uri,String localName,String qName)
{
if(qName.startsWith(stationName))
{ 站名标记=false;
}
if(qName.startsWith(startOrArrive))
{ 始发或终到标记=false;
}
if(qName.endsWith("车次"))
{ trainMessages.append("</tr>");
}
}
public void characters(char[] ch,int start,int length)
{
String text=new String(ch,start,length);
text=text.trim();
if(站名标记==true&&始发或终到标记==true&&text.length()>0)
{ String str=text.trim();
trainMessages.append("<td>"+str+"</td>");
}
}
}
例子3
type.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY bgcolor=yellow >
<BR>显示几个数学公式和化合物分子式:<A href="formula.xml">显示</A>
</BODY></HTML>
formula.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="show.css" type="text/css" ?>
<root>
<math> 几个数学公式:
<formula>
平方和公式:
(A+B)<sup>2</sup>=
A<sup>2</sup>+2AB+B<sup>2</sup>
</formula>
<formula>
立方和公式:
(A+B)<sup>3</sup>=
A<sup>3</sup>+3A<sup>2</sup>B+3B<sup>2</sup>A<sup>2</sup>+A<sup>3</sup>
</formula>
</math>
<chemistry>
几个化合物分子式:
<molecular>
水的分子式:
H<low>2</low>O
</molecular>
<molecular>
二氧化硫的分子式:
SO<low>2</low>
</molecular>
<molecular>
碳酸的分子式:
H<low>2</low>CO<low>3</low>
</molecular>
</chemistry>
</root>
show.css
math
{ display:block;
background-color:yellow;
color:green;
left=100;
}
chemistry
{ display:block;
background-color:cyan;
color:green;
left=100;
}
formula
{ display:list-item;
list-style-type:lower-roman;
margin-left:60;
font-size:14pt;
color:black;
}
molecular
{ display:list-item;
list-style-type:decimal;
margin-left:60;
font-size:14pt;
color:black;
}
sup
{ display:line;
font-size:10pt;
font-weight:bold;
font-style:italic;
color:blue;
vertical-align:super;
}
low
{ display:line;
font-size:8pt;
font-weight:bold;
color:blue;
vertical-align:bottom;
}
第10章 基于会员制的网络广告系统
head.txt
<%@ page contentType="text/html;charset=GB2312" %>
<CENTER><Font size=5><P>网 络 广 告 系 统</Font></CENTER>
<table cellSpacing="1" cellPadding="1" width="560" align="center" border="0" >
<tr valign="bottom">
<td><A href="register.jsp"><font size=2>会员注册</font></A></td>
<td><A href="login.jsp"><font size=2>会员登录</font></A></td>
<td><A href="upload.jsp"><font size=2>上传广告照片</font></A></td>
<td><A href="choiceLookType.jsp"><font size=2>浏览会员的广告</font></A></td>
<td><A href="choiceModifyMess.jsp"><font size=2>修改注册信息</font></A></td>
<td><A href="modifyPassword.jsp"><font size=2>修改密码</font></A></td>
<td><A href="helpExitLogin"><font size=2>退出登录</font></A></td>
<td><A href="index.jsp"><font size=2>返回主页</font></A></td>
</tr>
</Font>
</table>
index.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML> <BODY>
<HEAD><%@ include file="head.txt" %></HEAD>
<CENTER> <h1><Font Size=4 color=red>欢迎您来这里做广告</font></h1>
<img src="welcome.jpg" width=500 height=400 ></img>
</CENTER>
</BODY></HTML>
web.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>myservlet.control.HandleRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/helpRegister</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>myservlet.control.HandleLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/helpLogin</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>myservlet.control.HandleUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/helpUpload</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>lookRecord</servlet-name>
<servlet-class>myservlet.control.HandleDatabase</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>lookRecord</servlet-name>
<url-pattern>/helpShowMember</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>modifyPassword</servlet-name>
<servlet-class>myservlet.control.HandlePassword</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>modifyPassword</servlet-name>
<url-pattern>/helpModifyPassword</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getOldMess</servlet-name>
<servlet-class>myservlet.control.GetOldMess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getOldMess</servlet-name>
<url-pattern>/helpGetOldMess</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>modifyOldMess</servlet-name>
<servlet-class>myservlet.control.HandleModifyMess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>modifyOldMess</servlet-name>
<url-pattern>/helpModifyMess</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>exit</servlet-name>
<servlet-class>myservlet.control.HandleExit</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>exit</servlet-name>
<url-pattern>/helpExitLogin</url-pattern>
</servlet-mapping>
</web-app>
Register.java
package mybean.data;
public class Register
{ String logname="",password="",advertiseTitle="",
email="", phone="", message="";
String backNews;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setAdvertiseTitle(String s)
{ advertiseTitle=s;
}
public String getAdvertiseTitle()
{ return advertiseTitle;
}
public void setPassword(String pw)
{ password=pw;
}
public String getPassword()
{ return password;
}
public void setEmail(String em)
{ email=em;
}
public String getEmail()
{ return email;
}
public void setPhone(String ph)
{ phone=ph;
}
public String getPhone()
{ return phone;
}
public String getMessage()
{ return message;
}
public void setMessage(String m)
{ message=m;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
register.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=cyan><Font size=2><CENTER>
<FORM action="helpRegister" name=form>
<table>
输入您的信息,会员名字必须由字母和数字组成,带*号项必须填写。
<tr><td>会员名称:</td><td><Input type=text name="logname" >*</td></tr>
<tr><td>设置密码:</td><td><Input type=password name="password">*</td></tr>
<tr><td>广告标题:</td><td><Input type=text name="advertiseTitle">* </td></tr>
<tr><td>电子邮件:</td><td><Input type=text name="email"></td></tr>
<tr><td>联系电话:</td><td><Input type=text name="phone"></td></tr>
</table>
<table>
<tr><td><Font size=2>输入您的广告词:</td></tr>
<tr>
<td><TextArea name="message" Rows="6" Cols="30"></TextArea></td>
</tr>
<tr><td><Input type=submit name="g" value="提交"></td> </tr>
</table>
</Form></CENTER>
</Body></HTML>
showRegisterMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.*"%>
<jsp:useBean id="register" type="mybean.data.Register" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=cyan >
<CENTER>
<Font size=4 color=blue >
<BR> <jsp:getProperty name="register" property="backNews"/>
</Font>
<table>
<tr><td>注册的会员名称:
</td><td><jsp:getProperty name="register" property="logname"/>
</td></tr>
<tr><td>注册的广告标题:</td>
<td><jsp:getProperty name="register" property="advertiseTitle"/></td></tr>
<tr><td>
注册的电子邮件:</td><td><jsp:getProperty name="register" property="email"/>
</td></tr>
<tr><td>
注册的联系电话:</td><td><jsp:getProperty name="register" property="phone"/>
</td></tr>
</table>
<table><tr><td>您的广告词:</td></tr>
<tr><td><TextArea name="message" Rows="6" Cols="30">
<jsp:getProperty name="register" property="message"/>
</TextArea>
</td>
</tr>
</table>
</CENTER></BODY></HTML>
HandleRegister.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleRegister extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Connection con;
PreparedStatement sql;
Register reg=new Register();
request.setAttribute("register",reg);
String logname=request.getParameter("logname").trim(),
password=request.getParameter("password").trim(),
advertiseTitle=request.getParameter("advertiseTitle").trim(),
email=request.getParameter("email").trim(),
phone=request.getParameter("phone").trim(),
message=request.getParameter("message");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
if(logname==null)
logname="";
if(password==null)
password="";
boolean isLD=true;
for(int i=0;i<logname.length();i++)
{ char c=logname.charAt(i);
if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
isLD=false;
}
boolean boo=logname.length()>0&&password.length()>0&&isLD;
String backNews="";
try{ con=DriverManager.getConnection(uri,"sa","sa");
String insertCondition="INSERT INTO member VALUES (?,?,?,?,?,?,?)";
sql=con.prepareStatement(insertCondition);
if(boo)
{ sql.setString(1,handleString(logname));
sql.setString(2,handleString(password));
sql.setString(3,handleString(advertiseTitle));
sql.setString(4,phone);
sql.setString(5,email);
sql.setString(6,handleString(message));
sql.setString(7,"public.jpg");
int m=sql.executeUpdate();
if(m!=0)
{ backNews="注册成功";
reg.setBackNews(backNews);
reg.setLogname(logname);
reg.setPassword(handleString(password));
reg.setAdvertiseTitle(handleString(advertiseTitle));
reg.setEmail(handleString(email));
reg.setPhone(phone);
reg.setMessage(handleString(message));
}
}
else
{ backNews="信息填写不完整或名字中有非法字符";
reg.setBackNews(backNews);
}
con.close();
}
catch(SQLException exp)
{ backNews="该会员名已被使用,请您更换名字"+exp;
reg.setBackNews(backNews);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showRegisterMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
Login.java
package mybean.data;
public class Login
{ String logname,
password,
backNews="";
boolean success=false;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{return logname;
}
public void setPassword(String pw)
{ password=pw;
}
public String getPassword()
{return password;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
public void setSuccess(boolean b)
{ success=b;
}
public boolean getSuccess()
{ return success;
}
}
login.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=pink><Font size=2><CENTER>
<BR><BR>
<table border=2>
<tr> <th>请您登录</th></tr>
<FORM action="helpLogin" Method="post">
<tr><td>登录名称:<Input type=text name="logname"></td></tr>
<tr><td>输入密码:<Input type=password name="password"></td></tr>
</table>
<BR><Input type=submit name="g" value="提交">
</Form></CENTER>
</BODY></HTML>
showLoginMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.Login"%>
<jsp:useBean id="login" type="mybean.data.Login" scope="session"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER><Font size=4 color=blue >
<BR> <jsp:getProperty name="login" property="backNews"/>
</Font>
<% if(login.getSuccess()==true)
{
%> <BR>登录会员名称:<jsp:getProperty name="login" property="logname"/>
<% }
else
{
%> <BR>登录会员名称:<jsp:getProperty name="login" property="logname"/>
<BR>登录会员密码:<jsp:getProperty name="login" property="password"/>
<% }
%>
</FONT></CENTER>
</BODY></HTML>
HandleLogin.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleLogin extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Connection con;
PreparedStatement sql;
Login loginBean=null;
String backNews="";
HttpSession session=request.getSession(true);
try{ loginBean=(Login)session.getAttribute("login");
if(loginBean==null)
{ loginBean=new Login();
session.setAttribute("login",loginBean);
}
}
catch(Exception ee)
{ loginBean=new Login();
session.setAttribute("login",loginBean);
}
String logname=request.getParameter("logname").trim(),
password=request.getParameter("password").trim();
boolean ok=loginBean.getSuccess();
logname=handleString(logname);
password=handleString(password);
if(ok==true&&logname.equals(loginBean.getLogname()))
{ backNews=logname+"已经登录了";
loginBean.setBackNews(backNews);
}
else
{ String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
boolean boo=(logname.length()>0)&&(password.length()>0);
try{ con=DriverManager.getConnection(uri,"sa","sa");
String condition="select * from member where logname =? and password =?";
sql=con.prepareStatement(condition);
if(boo)
{ sql.setString(1,logname);
sql.setString(2,password);
ResultSet rs=sql.executeQuery();
boolean m=rs.next();
if(m==true)
{ backNews="登录成功";
loginBean.setBackNews(backNews);
loginBean.setSuccess(true);
loginBean.setLogname(logname);
}
else
{ backNews="您输入的用户名不存在,或密码不般配";
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
loginBean.setLogname(logname);
loginBean.setPassword(password);
}
}
else
{ backNews="您输入的用户名不存在,或密码不般配";
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
loginBean.setLogname(logname);
loginBean.setPassword(password);
}
con.close();
}
catch(SQLException exp)
{ backNews=""+exp;
loginBean.setBackNews(backNews);
loginBean.setSuccess(false);
}
}
RequestDispatcher dispatcher=request.getRequestDispatcher("showLoginMess.jsp");
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
UploadFile.java
package mybean.data;
public class UploadFile
{ String fileName,savedFileName,
backNews="";
public void setFileName(String name)
{ fileName=name;
}
public String getFileName()
{return fileName;
}
public void setSavedFileName(String name)
{ savedFileName=name;
}
public String getSavedFileName()
{return savedFileName;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
upload.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=yellow><Font size=2><CENTER>
<BR>文件将被上传到 D:\apache-tomcat-5.5.20\webapps\ch10\image中。
<BR>选择要上传的图像照片文件(名字不可以含有非ASCII码字符,比如汉字等):
<FORM action="helpUpload" method="post" ENCTYPE="multipart/form-data">
<INPUT type=FILE name="fileName" size="40">
<BR> <INPUT type="submit" name ="g" value="提交">
</FORM></CENTER>
</Font></BODY></HTML>
showUploadMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.*"%>
<jsp:useBean id="upFile" type="mybean.data.UploadFile" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER><Font size=2 color=blue >
<BR> <jsp:getProperty name="upFile" property="backNews" />
</Font>
<BR><font size=2>上传的文件名字:<jsp:getProperty name="upFile" property="fileName"/>
保存后的文件名字:<jsp:getProperty name="upFile" property="savedFileName"/>
<BR> <img src=image/<jsp:getProperty name="upFile" property="savedFileName"/>
width=150 height=120>图像效果
</img>
</FONT></CENTER>
</BODY></HTML>
HandleUpload.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleUpload extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ String logname=login.getLogname();
uploadFileMethod(request,response,logname); //接受上传文件
}
}
public void uploadFileMethod(HttpServletRequest request,HttpServletResponse response,
String logname) throws ServletException,IOException
{ UploadFile upFile=new UploadFile();
String backNews="";
try{ HttpSession session=request.getSession(true);
request.setAttribute("upFile",upFile);
String tempFileName=(String)session.getId();
File f1=new File(tempFileName);
FileOutputStream o=new FileOutputStream(f1);
InputStream in=request.getInputStream();
byte b[]=new byte[10000];
int n;
while( (n=in.read(b))!=-1)
{ o.write(b,0,n);
}
o.close();
in.close();
RandomAccessFile random=new RandomAccessFile(f1,"r");
int second=1; //读出f1的第2行,析取出上传文件的名字:
String secondLine=null;
while(second<=2)
{ secondLine=random.readLine();
second++;
}
//获取第2行中目录符号'\'最后出现的位置:
int position=secondLine.lastIndexOf('\\');
//截取文件名:
String fileName=secondLine.substring(position+1,secondLine.length()-1);
byte cc[]=fileName.getBytes("ISO-8859-1");
fileName=new String(cc);
fileName=fileName.replaceAll(" ","");
//文件是否由字母或数字组成判断名字
String checkedStr=fileName.substring(0,fileName.indexOf("."));
boolean isLetterOrDigit=true;
for(int i=0;i<checkedStr.length();i++)
{ char c=checkedStr.charAt(i);
if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
{ isLetterOrDigit=false;
break;
}
}
if(isLetterOrDigit==false)
{ response.sendRedirect("upload.jsp"); //重定向到upload.jsp页面
}
//保存文件名是上传文件名加会员名为前缀:
String savedFileName=logname.concat(fileName);
random.seek(0);
long forthEndPosition=0; //获取第4行回车符号的位置
int forth=1;
while((n=random.readByte())!=-1&&(forth<=4))
{ if(n=='\n')
{ forthEndPosition=random.getFilePointer();
forth++;
}
}
//根据客户上传文件的名字,将该文件存入磁盘:
File dir=new File("D:/apache-tomcat-5.5.20/webapps/ch10/image");
dir.mkdir();
//首先删除用户曾上传过的图像文件:
File file[]=dir.listFiles();
for(int k=0;k<file.length;k++)
{ if(file[k].getName().startsWith(logname))
file[k].delete();
}
File savingFile= new File(dir,savedFileName); //需要新保存的上传文件
RandomAccessFile random2=new RandomAccessFile(savingFile,"rw");
random.seek(random.length());
long endPosition=random.getFilePointer();
long mark=endPosition;
int j=1;
//确定出文件f1中包含客户上传的文件的内容的最后位置,即倒数第6行:
while((mark>=0)&&(j<=6))
{ mark--;
random.seek(mark);
n=random.readByte();
if(n=='\n')
{ endPosition=random.getFilePointer();
j++;
}
}
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
while(startPoint<endPosition-1)
{ n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
Connection con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=sql.executeQuery("SELECT * FROM member where logname =
'"+logname+"'");
if(rs.next())
{ if(isLetterOrDigit)
{ int mm=sql.executeUpdate("UPDATE member SET pic= '"+savedFileName+
"' where logname = '"+logname+"'");
if(mm!=0)
{ backNews=fileName+"成功上传";
upFile.setFileName(fileName);
upFile.setSavedFileName(savedFileName);
upFile.setBackNews(backNews);
}
}
}
con.close();
f1.delete();
}
catch(Exception exp)
{ backNews=""+exp;
upFile.setBackNews(backNews);
}
try{ RequestDispatcher dispatcher=
request.getRequestDispatcher("showUploadMess.jsp");//转发
dispatcher.forward(request, response);
}
catch(Exception ee){}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
MemberInform.java
package mybean.data;
public class MemberInform
{ String logname="",advertiseTitle="",email="",
phone="", message="",pic,backNews="";
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setAdvertiseTitle(String s)
{ advertiseTitle=s;
}
public String getAdvertiseTitle()
{ return advertiseTitle;
}
public void setEmail(String em)
{ email=em;
}
public String getEmail()
{ return email;
}
public void setPhone(String ph)
{ phone=ph;
}
public String getPhone()
{ return phone;
}
public String getMessage()
{ return message;
}
public void setMessage(String m)
{ message=m;
}
public String getPic()
{ return pic;
}
public void setPic(String s)
{ pic=s;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
ShowByPage.java
package mybean.data;
import com.sun.rowset.*;
public class ShowByPage
{ CachedRowSetImpl rowSet=null; //存储表中全部记录的行集对象
int pageSize=10; //每页显示的记录数
int pageAllCount=0; //分页后的总页数
int showPage=1 ; //当前显示页
StringBuffer presentPageResult; //显示当前页内容
public void setRowSet(CachedRowSetImpl set)
{ rowSet=set;
}
public CachedRowSetImpl getRowSet()
{ return rowSet;
}
public void setPageSize(int size)
{ pageSize=size;
}
public int getPageSize()
{ return pageSize;
}
public int getPageAllCount()
{ return pageAllCount;
}
public void setPageAllCount(int n)
{ pageAllCount=n;
}
public void setShowPage(int n)
{ showPage=n;
}
public int getShowPage()
{ return showPage;
}
public void setPresentPageResult(StringBuffer p)
{ presentPageResult=p;
}
public StringBuffer getPresentPageResult()
{ return presentPageResult;
}
}
choiceLookType.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=cyan><center><Font size=3>
<table>
<FORM action="helpShowMember" method="post" name="form">
<BR>分页显示全体会员
<INPUT type="hidden" value="1" name="showPage" size=6>
<INPUT type="submit" value="显示" name="submit">
</Form>
<FORM action="helpShowMember" method="get" name="form">
<br>输入要查找的会员名:
<INPUT type="text" name="logname" size=6>
<INPUT type="submit" value="显示" name="submit">
</FORM></center>
</BODY></HTML>
showAllMember.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.ShowByPage" %>
<jsp:useBean id="show" type="mybean.data.ShowByPage" scope="session"/>
<HTML><%@ include file="head.txt" %></HEAD>
<Body ><center>
<P>显示会员信息.
<BR>每页最多显示<jsp:getProperty name= "show" property="pageSize" />条信息
<BR>当前显示第<Font color=blue>
<jsp:getProperty name= "show" property="showPage" />
</Font>页,共有
<Font color=blue><jsp:getProperty name= "show" property="pageAllCount" />
</Font>页。
<BR>当前显示的内容是:
<table border=2>
<tr>
<th>会员名</th><th>广告标题</th><th>电话</th>
<th>email</th><th>广告词</th><th>广告照片</th>
</tr>
<jsp:getProperty name= "show" property="presentPageResult" />
</table>
<BR>单击“前一页”或“下一页”按纽查看信息
<Table>
<tr><td><FORM action="helpShowMember" method=post>
<Input type=hidden name="showPage" value="<%=show.getShowPage()-1 %>" >
<Input type=submit name="g" value="前一页">
</FORM>
</td>
<td><FORM action="helpShowMember" method=post>
<Input type=hidden name="showPage" value="<%=show.getShowPage()+1 %>" >
<Input type=submit name="g" value="后一页">
</Form>
</td>
<td> <FORM action="helpShowMember" method=post>
输入页码:<Input type=text name="showPage" size=5 >
<Input type=submit name="g" value="提交">
</FORM>
</td>
</tr>
</Table>
</Center>
</BODY></HTML>
showLookedMember.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.MemberInform" %>
<jsp:useBean id="inform" type="mybean.data.MemberInform" scope="request"/>
<Center>
<HTML><BODY bgcolor=pink><%@ include file="head.txt" %></HEAD>
<table border=2>
<tr>
<th>会员名</th><th>广告标题</th><th>电话</th>
<th>email</th><th>广告词</th><th>广告照片</th>
</tr>
<tr>
<td><jsp:getProperty name= "inform" property="logname" /></td>
<td><jsp:getProperty name= "inform" property="advertiseTitle" /></td>
<td><jsp:getProperty name= "inform" property="phone" /></td>
<td><jsp:getProperty name= "inform" property="email" /></td>
<td><jsp:getProperty name= "inform" property="message" /></td>
<td><img src=image/<jsp:getProperty name="inform" property="pic"/> width=50 height=50>
</img></td>
</table>
</Center>
</BODY></HTML>
HandleDatabase.java
package myservlet.control;
import mybean.data.*;
import com.sun.rowset.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleDatabase extends HttpServlet
{ CachedRowSetImpl rowSet=null;
public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Connection con=null;
StringBuffer presentPageResult=new StringBuffer();
ShowByPage showBean=null;
try{ showBean=(ShowByPage)session.getAttribute("show");
if(showBean==null)
{ showBean=new ShowByPage(); //创建Javabean对象
session.setAttribute("show",showBean);
}
}
catch(Exception exp)
{ showBean=new ShowByPage();
session.setAttribute("show",showBean);
}
showBean.setPageSize(3); //每页显示3条记录
int showPage=Integer.parseInt(request.getParameter("showPage"));
if(showPage>showBean.getPageAllCount())
showPage=1;
if(showPage<=0)
showPage=showBean.getPageAllCount();
showBean.setShowPage(showPage);
int pageSize=showBean.getPageSize();
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=sql.executeQuery("SELECT * FROM member");
rowSet=new CachedRowSetImpl(); //创建行集对象
rowSet.populate(rs);
con.close(); //关闭连接
showBean.setRowSet(rowSet); //数据存储在showBean中
rowSet.last();
int m=rowSet.getRow(); //总行数
int n=pageSize;
int pageAllCount=((m%n)==0)?(m/n):(m/n+1);
showBean.setPageAllCount(pageAllCount);//数据存储在showBean中
presentPageResult=show(showPage,pageSize,rowSet);
showBean.setPresentPageResult(presentPageResult);
}
catch(SQLException exp){}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showAllMember.jsp");//转发
dispatcher.forward(request, response);
}
public StringBuffer show(int page,int pageSize,CachedRowSetImpl rowSet)
{ StringBuffer str=new StringBuffer();
try{ rowSet.absolute((page-1)*pageSize+1);
for(int i=1;i<=pageSize;i++)
{ str.append("<tr>");
str.append("<td>"+rowSet.getString(1)+"</td>");
str.append("<td>"+rowSet.getString(3)+"</td>");
str.append("<td>"+rowSet.getString(4)+"</td>");
str.append("<td>"+rowSet.getString(5)+"</td>");
str.append("<td>"+rowSet.getString(6)+"</td>");
String s="<img src=image/"+rowSet.getString(7)+" width=100 height=100/>";
str.append("<td>"+s+"</td>");
str.append("</tr>");
rowSet.next();
}
}
catch(SQLException exp){}
return str;
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoGet(request,response);
}
}
public void continueDoGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ MemberInform inform=new MemberInform();
request.setAttribute("inform",inform);
String logname=request.getParameter("logname");
Connection con=null;
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname = '"+logname+"'");
if(rs.next())
{ inform.setLogname(rs.getString(1));
inform.setAdvertiseTitle(rs.getString(3));
inform.setPhone(rs.getString(4));
inform.setEmail(rs.getString(5));
inform.setMessage(rs.getString(6));
inform.setPic(rs.getString(7));
inform.setBackNews("查询到的会员信息:");
}
con.close();
RequestDispatcher dispatcher=
request.getRequestDispatcher("showLookedMember.jsp");//转发
dispatcher.forward(request, response);
}
catch(SQLException exp)
{ inform.setBackNews(""+exp);System.out.println("ok1"+exp);
}
}
}
Password.java
package mybean.data;
public class Password
{ String oldPassword,newPassword,backNews="";
public void setNewPassword(String pw)
{ newPassword=pw;
}
public String getnewPassword()
{return newPassword;
}
public void setOldPassword(String pw)
{ oldPassword=pw;
}
public String getOldPassword()
{return oldPassword;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
modifyPassword.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<BODY bgcolor=pink><Font size=2><CENTER>
<P>输入您的密码:
<FORM action="helpModifyPassword" Method="post">
<BR>当前密码:<Input type=text name="oldPassword">
<BR>新密码: <Input type=password name="newPassword">
<BR><Input type=submit name="g" value="提交">
</Form></CENTER>
</BODY></HTML>
showNewPasswor.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.Password"%>
<jsp:useBean id="password" type="mybean.data.Password" scope="request" />
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow >
<CENTER>
<jsp:getProperty name="password" property="backNews" />
<BR>您的新密码:<jsp:getProperty name="password" property="newPassword" />
<BR>您的旧密码:<jsp:getProperty name="password" property="oldPassword" />
</FONT></CENTER>
</BODY></HTML>
HandlePassword.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandlePassword extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueWork(request,response);
}
}
public void continueWork(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
Connection con=null;
String logname=login.getLogname();
Password passwordBean=new Password();
request.setAttribute("password",passwordBean);
String oldPassword=request.getParameter("oldPassword");
String newPassword=request.getParameter("newPassword");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname='"+
logname+"'And password='"+oldPassword+"'");
if(rs.next())
{ String updateString="UPDATE member SET password='"+
newPassword+"' where logname='"+logname+"'";
int m=sql.executeUpdate(updateString);
if(m==1)
{ passwordBean.setBackNews("密码更新成功");
passwordBean.setOldPassword(oldPassword);
passwordBean.setNewPassword(newPassword);
}
else
{ passwordBean.setBackNews("密码更新失败");
}
}
else
{ passwordBean.setBackNews("密码更新失败");
}
}
catch(SQLException exp)
{ passwordBean.setBackNews("密码更新失败"+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showNewPassword.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
ModifyMessage.java
package mybean.data;
public class ModifyMessage
{ String logname="",newAdvertiseTitle="",newEmail="",newPhone="",
newMessage="",backNews;
public void setLogname(String name)
{ logname=name;
}
public String getLogname()
{ return logname;
}
public void setNewAdvertiseTitle(String s)
{ newAdvertiseTitle=s;
}
public String getNewAdvertiseTitle()
{ return newAdvertiseTitle;
}
public void setNewEmail(String em)
{ newEmail=em;
}
public String getNewEmail()
{ return newEmail;
}
public void setNewPhone(String ph)
{ newPhone=ph;
}
public String getNewPhone()
{ return newPhone;
}
public String getNewMessage()
{ return newMessage;
}
public void setNewMessage(String m)
{ newMessage=m;
}
public String getBackNews()
{ return backNews;
}
public void setBackNews(String s)
{ backNews=s;
}
}
choiceModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<Center>
<HTML><BODY bgcolor=pink><%@ include file="head.txt" %></HEAD>
<FORM action="helpGetOldMess" name=form>
<INPUT type=submit value="我要修改注册信息">
</FORM>
<FORM action="index.jsp" name=form>
<INPUT type=submit value="我不想修改了">
</FORM>
</Center>
</BODY></HTML>
inputModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<%@ page import="mybean.data.Register"%>
<jsp:useBean id="register" type="mybean.data.Register" scope="request" />
<HTML><BODY bgcolor=pink><CENTER>
<P>
<Font color=blue size=4>
以下是您(<jsp:getProperty name="register" property="logname"/>)曾注册的信息,
您可以修改这些信息。
</Font>
<Font size=2>
<FORM action="helpModifyMess" name=form>
<table>
<tr><td>广告标题:</td><td><Input type=text name="newAdvertiseTitle"
value=<jsp:getProperty name="register" property="advertiseTitle" /> ></td></tr>
<tr><td>联系电话:</td><td><Input type=text name="newPhone"
value=<jsp:getProperty name="register" property="phone" /> ></td></tr>
<tr><td>电子邮件:</td><td><Input type=text name="newEmail"
value=<jsp:getProperty name="register" property="email" />></td></tr>
</table>
<table>
<tr><td>广告词:</td></tr>
<tr>
<td><TextArea name="newMessage" Rows="6" Cols="30">
<jsp:getProperty name="register" property="message"/>
</TextArea></td>
</tr>
<tr><td><Input type=submit name="g" value="提交修改"></td></tr>
<tr><td><Input type=reset value="重置"></td> </tr>
</table><Font></CENTER>
</BODY></HTML>
showModifyMess.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="mybean.data.ModifyMessage"%>
<jsp:useBean id="modify" type="mybean.data.ModifyMessage" scope="request"/>
<HTML><HEAD><%@ include file="head.txt" %></HEAD>
<HTML><BODY bgcolor=yellow ><Font size=4>
<CENTER>
<jsp:getProperty name="modify" property="backNews"/>
<BR>您修改信息如下:
<BR>新广告标题:<jsp:getProperty name="modify" property="newAdvertiseTitle"/>
<BR>新电话:<jsp:getProperty name="modify" property="newPhone"/>
<BR>新email:<jsp:getProperty name="modify" property="newEmail"/>
<BR>新广告词:<jsp:getProperty name="modify" property="newMessage"/>
</FONT></CENTER>
</BODY></HTML>
GetOldMess.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetOldMess extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");//获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueWork(request,response);
}
}
public void continueWork(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
Connection con=null;
String logname=login.getLogname();
Register register=new Register();
request.setAttribute("register",register);
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName= Friend";
try{ con=DriverManager.getConnection(uri,"sa","sa");
Statement sql=con.createStatement();
ResultSet rs=
sql.executeQuery("SELECT * FROM member where logname='"+logname+"'");
if(rs.next())
{ register.setLogname(rs.getString(1));
register.setAdvertiseTitle(rs.getString(3));
register.setPhone(rs.getString(4));
register.setEmail(rs.getString(5));
register.setMessage(rs.getString(6));
register.setBackNews("您原来的注册信息:");
}
}
catch(SQLException exp)
{ register.setBackNews(""+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("inputModifyMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
HandleModifyMess.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleModifyMess extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){}
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");//获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login");
String logname=login.getLogname();
Connection con;
PreparedStatement sql;
ModifyMessage modify=new ModifyMessage();
request.setAttribute("modify",modify);
String advertiseTitle=request.getParameter("newAdvertiseTitle").trim(),
email=request.getParameter("newEmail").trim(),
phone=request.getParameter("newPhone").trim(),
message=request.getParameter("newMessage");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Friend";
String backNews="";
try{ con=DriverManager.getConnection(uri,"sa","sa");
String updateCondition=
"UPDATE member SET advertiseTitle=?,phone=?,email=?,message=? WHERE logname=?";
sql=con.prepareStatement(updateCondition);
sql.setString(1,handleString(advertiseTitle));
sql.setString(2,phone);
sql.setString(3,handleString(email));
sql.setString(4,handleString(message));
sql.setString(5,logname);
int m=sql.executeUpdate();
if(m==1)
{ backNews="修改信息成功";
modify.setBackNews(backNews);
modify.setLogname(logname);
modify.setNewAdvertiseTitle (handleString(advertiseTitle));
modify.setNewEmail(handleString(email));
modify.setNewPhone(phone);
modify.setNewMessage(handleString(message));
}
else
{ backNews="信息填写不完整或信息中有非法字符";
modify.setBackNews(backNews);
}
con.close();
}
catch(SQLException exp)
{ modify.setBackNews(""+exp);
}
RequestDispatcher dispatcher=
request.getRequestDispatcher("showModifyMess.jsp");//转发
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}
HandleExit.java
package myservlet.control;
import mybean.data.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleExit extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{ super.init(config);
}
public String handleString(String s)
{ try{ byte bb[]=s.getBytes("iso-8859-1");
s=new String(bb);
}
catch(Exception ee){}
return s;
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
Login login=(Login)session.getAttribute("login"); //获取用户登录时的Javabean
boolean ok=true;
if(login==null)
{ ok=false;
response.sendRedirect("login.jsp"); //重定向到登录页面
}
if(ok==true)
{ continueDoPost(request,response);
}
}
public void continueDoPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{ HttpSession session=request.getSession(true);
session.invalidate(); //销毁用户的session对象
response.sendRedirect("index.jsp"); //返回主页
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ doPost(request,response);
}
}