編程之道

          無(wú)論是批評(píng)的,贊揚(yáng)的,指著的都請(qǐng)EMAIL給我,你的建議將是我前進(jìn)的動(dòng)力! 聯(lián)系我

          開(kāi)發(fā)JSP&Servlet

                終于有空可以閑下來(lái)了,前2個(gè)星期忙著寫(xiě)代碼。在開(kāi)發(fā)過(guò)程中,因?yàn)椴欢臇|西太多,所以這段時(shí)間在不停的惡補(bǔ),忙的連看美女的時(shí)間都沒(méi)。就 趁著今天夜黑風(fēng)高之際,我就繼續(xù)寫(xiě)點(diǎn)把。

                介紹下我的開(kāi)發(fā)工具是:eclipse3.1+myeclipse4.0GA   開(kāi)發(fā)平臺(tái):win2000
               ( myeclipse4.0有個(gè)功能很不錯(cuò),支持所見(jiàn)即所得,就是速度慢)

                基本概念不說(shuō)了,過(guò)下書(shū)就算了。我就用個(gè)用戶(hù)登錄的例子來(lái)說(shuō)明如果使用JSP+SERVLET+JAVABEAN來(lái)開(kāi)發(fā)項(xiàng)目,這個(gè)例子是通過(guò)讀取XML文件來(lái)驗(yàn)證是否是合法用戶(hù)。
                先說(shuō)一下流程:本來(lái)想畫(huà)流程圖的,但是機(jī)器里還沒(méi)裝VISIO。。。以后在補(bǔ)把。其實(shí)也很簡(jiǎn)單的。
                這里是源碼,需要的朋友可以下載看看http://www.aygfsteel.com/Files/yuanhuaming/mvctest.rar
          可能web.xml需要改一下,把還沒(méi)修改好的傳上去了。


          Login.jsp   
           
          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <html>
            
          <head>  
          <SCRIPT language="JavaScript">
          function clean() {
              form1.passWord.value 
          = "";
              form1.userName.value 
          = "";    
          }

          </SCRIPT>
            
          </head>
            
          <body>
            
          <FORM name="form1" action="Login.do" method="post" >    
                 username: 
          <INPUT name="userName" type="text"><P></P>
              password: 
          <INPUT type="password" name="passWord"><P></P><P>
              
          <INPUT type="submit" name="submit" value="submit">
             
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              
          <INPUT type="Button" name="reset" value="reset" onclick="clean()">
              
          </P><P></P></FORM>
            
          </body>
          </html>
          通過(guò)action定向到Login.do, Login.do就是通過(guò)web.xml映射到指定的servlet。請(qǐng)看:
            <servlet>
              
          <servlet-name>Login</servlet-name>//3
              
          <servlet-class>com.yhm.servlet.Login</servlet-class>//4
            
          </servlet>

            
          <servlet-mapping>
              
          <servlet-name>Login</servlet-name>//2
              
          <url-pattern>/Login.do</url-pattern>//1
            
          </servlet-mapping>
          上面標(biāo)志的數(shù)字就是依次查找的順序,很容易理解把。

          Login.java
          package com.yhm.servlet;

          import java.io.IOException;
          import java.io.PrintWriter;

          import javax.servlet.RequestDispatcher;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;
          import com.yhm.bean.testConfig;

          public class Login extends HttpServlet {
              
              
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {
                  String username 
          = new String(request.getParameter("userName").getBytes("iso8859-1"),"utf-8");
                  String password 
          = new String(request.getParameter("passWord").getBytes("iso8859-1"),"utf-8");
                  
                  testConfig config 
          = new testConfig();
                  
          //.vaildate() return boolean
                  if(config.Vaildate(username, password) == true{            
                      
          /*通?SESSION?量?參 
                      HttpSession session = request.getSession();
                      session.setAttribute("userName", username);
                      response.sendRedirect("welcome.jsp");    
                      
          */

                      
          //request?參
                      request.setAttribute("username", username);
                         //定向
                      RequestDispatcher dispatcher 
          = request.getRequestDispatcher("welcome.jsp");            
                      dispatcher.forward(request, response);
                  }

                  
          else {
                      response.sendRedirect(
          "error.jsp");
                  }

              }


              
          //init and destroy
              public void init() throws ServletException {}
              
          public void destroy() {
                  
          super.destroy();
              }

          }

          主要負(fù)責(zé)獲取表單內(nèi)的參數(shù)值,并且轉(zhuǎn)向到指定的頁(yè)面。


          ComJDom.java   用于封裝如何訪問(wèn)XML
          需要導(dǎo)入一個(gè)jdom.jar包,SDK里也有類(lèi)似解析XML的包不過(guò)不太好用。
          package com.yhm.bean;

          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;

          import org.jdom.Document;
          import org.jdom.input.SAXBuilder;


          public class ComJDom {
              
          public static Document getDocument(String XMLUser) throws Exception {
                  Document dom 
          = null;
                  InputStream instr 
          = null;
                  
          try {
                      SAXBuilder build 
          = new SAXBuilder();
                      instr 
          = new FileInputStream(XMLUser);
                      dom 
          = build.build(instr);
                  }

                  
          finally {
                         
          if (instr != null{
                              
          try {
                                  instr.close();
                              }
           
                              
          catch (IOException ex) {
                                  
          throw ex;
                              }

                          }

                  }

                  
          return dom;
              }

          }


          testConfig.java   用來(lái)驗(yàn)證用戶(hù)名是否正確
          package com.yhm.bean;

          import java.util.ArrayList;
          import java.util.List;

          import org.jdom.Document;
          import org.jdom.Element;

          public class testConfig {
              
              
          private List userList = null;
              
          private List pwdList = null;
              
              
          public boolean Vaildate(String userName, String pwd) {
                  
          //驗(yàn)證用戶(hù)名密碼是否正確
                  for(int i=0;i<userList.size();i++){
                      
          if(userList.get(i).equals(userName) && pwdList.get(i).equals(pwd)){
                          
          return true;
                      }
                  
                  }
           return false;            
              }
              
              
              
          public testConfig() {
                  
          try {
                      userList 
          = new ArrayList();
                      pwdList 
          = new ArrayList();
                      String xmlStr 
          = "F:/project by eclipse/mvctest/WEB-INF/test.xml";
                      Document dom 
          = ComJDom.getDocument(xmlStr);
                      
          //得到根元素返回元素類(lèi)型
                      Element root = dom.getRootElement();
                      
          //得到根元素的下一級(jí)元素
                      List list = root.getChildren();
                      Element action 
          = null;
                      
          for (int i = 0; i < list.size(); i++{
                          action 
          = (Element) list.get(i);
                          
          //得到username元素里的內(nèi)容
                          String username = action.getChildText("username");
                          String password 
          = action.getChildText("password");
                          
          //放入2個(gè)List表中
                          userList.add(username);                
                          pwdList.add(password);
                      }
                      
                  }

                  
          catch(Exception ex) {
                      ex.printStackTrace();
                  }

              }
              
          }



          test.xml    記錄了合法的用戶(hù)名密碼
          <?xml version="1.0" encoding="UTF-8"?>
          <userList>
              
          <user>
                  
          <username>admin</username>
                  
          <password>admin</password>
              
          </user>    
              
          <user>
                  
          <username>test</username>
                  
          <password>test</password>
              
          </user>    
              
          <user>
                  
          <username>tiger</username>
                  
          <password>tiger</password>
              
          </user>    
          </userList>

          還有一張error.jsp ,有錯(cuò)誤就會(huì)跳轉(zhuǎn)到這里來(lái)。
           

             總結(jié):盡量不要把代碼寫(xiě)在jsp里,盡量不要使用DW畫(huà)界面,會(huì)出來(lái)很多垃圾代碼,后期修改的時(shí)候看起來(lái)也累。通過(guò)這個(gè)例子,我似乎漸漸了解了為什么那么多的框架使用XML做配置文件及其如何工作的。
          實(shí)際開(kāi)發(fā)項(xiàng)目的時(shí)候會(huì)碰到很多很多奇怪而且難以捉摸的問(wèn)題,可能這就是為什么要加班了。我前1個(gè)星期就碰到一個(gè)很奇怪的頁(yè)面問(wèn)題。本來(lái)顯示正常,然后加了一個(gè)完全不相關(guān)的JSP文件,結(jié)果頁(yè)面排版就出問(wèn)題。然后COPY一下在其他機(jī)器上運(yùn)行一切正常。郁悶了2天.....結(jié)果無(wú)意裝了新版本的tomcat,把老版本卸了。然后一運(yùn)行,正常Y_Y,誰(shuí)會(huì)想到是tomcat的問(wèn)題,而且tomcat也沒(méi)報(bào)什么錯(cuò)。

          posted on 2005-09-18 11:17 瘋流成性 閱讀(483) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): eclipse


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 古田县| 嘉鱼县| 昆明市| 道孚县| 汕头市| 郯城县| 定结县| 商洛市| 呼和浩特市| 天祝| 台山市| 姚安县| 金沙县| 辽宁省| 东乌珠穆沁旗| 前郭尔| 康平县| 普定县| 渝中区| 错那县| 资源县| 揭东县| 祁阳县| 兖州市| 都安| 修文县| 岳西县| 凌海市| 镇坪县| 浮梁县| 从江县| 海林市| 封丘县| 乌拉特后旗| 抚州市| 惠东县| 长沙县| 恭城| 曲阳县| 汶上县| 张家港市|