jsp第九课-jsp中使用XML

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);
   }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat是一个开源的Java Servlet容器,也是Apache软件基金会的一个项目。它实现了Java Servlet和JavaServer Pages(JSP)规范,提供了一个运行Java Web应用程序的环境。 以下是一些关于Tomcat的常见知识点: 1. Tomcat的架构:Tomcat由多个组件组成,包括Catalina、Coyote、Jasper等。Catalina是Tomcat的核心组件,负责处理Servlet和JSP。Coyote是Tomcat的HTTP协议处理组件,用于接收和处理HTTP请求。Jasper负责编译JSP文件。 2. 配置Tomcat:配置文件位于Tomcat安装目录下的conf文件夹。其,server.xml文件是主要的配置文件,可以配置监听端口、虚拟主机等。 3. 部署Web应用程序:将打包好的Web应用程序(通常是一个WAR文件)放置在Tomcat的webapps目录下,Tomcat会自动解压并部署该应用程序。 4. Tomcat的类加载机制:Tomcat使用了一个叫做Catalina的类加载器层次结构,按照一定的顺序加载类。其,Common类加载器加载Tomcat共享的类库,Catalina加载器加载Tomcat内部使用的类库,Web应用程序类加载器加载各个Web应用程序的类。 5. 连接池:Tomcat提供了连接池的功能,用于管理数据库连接。通过配置数据源和连接池参数,可以提高数据库连接的性能和效率。 6. Tomcat的日志:Tomcat会记录各种日志信息,包括访问日志、错误日志等。这些日志文件位于Tomcat安装目录下的logs文件夹。 7. 虚拟主机:Tomcat支持虚拟主机,即在同一个Tomcat实例运行多个独立的Web应用程序。通过配置不同的域名或端口,可以将请求分发到不同的虚拟主机上。 这些只是Tomcat的一些基础知识点,希望能对你有所帮助!如果你还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值