終于有空可以閑下來了,前2個星期忙著寫代碼。在開發(fā)過程中,因為不懂的東西太多,所以這段時間在不停的惡補,忙的連看美女的時間都沒。就 趁著今天夜黑風(fēng)高之際,我就繼續(xù)寫點把。
介紹下我的開發(fā)工具是:eclipse3.1+myeclipse4.0GA 開發(fā)平臺:win2000
( myeclipse4.0有個功能很不錯,支持所見即所得,就是速度慢)
基本概念不說了,過下書就算了。我就用個用戶登錄的例子來說明如果使用JSP+SERVLET+JAVABEAN來開發(fā)項目,這個例子是通過讀取XML文件來驗證是否是合法用戶。
先說一下流程:本來想畫流程圖的,但是機器里還沒裝VISIO。。。以后在補把。其實也很簡單的。
這里是源碼,需要的朋友可以下載看看
http://www.tkk7.com/Files/yuanhuaming/mvctest.rar可能web.xml需要改一下,把還沒修改好的傳上去了。
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">
<INPUT type="Button" name="reset" value="reset" onclick="clean()">
</P><P></P></FORM>
</body>
</html>

通過action定向到Login.do, Login.do就是通過web.xml映射到指定的servlet。請看:
<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)向到指定的頁面。
ComJDom.java 用于封裝如何訪問XML
需要導(dǎo)入一個jdom.jar包,SDK里也有類似解析XML的包不過不太好用。
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 用來驗證用戶名是否正確
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)
{
//驗證用戶名密碼是否正確

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);
//得到根元素返回元素類型
Element root = dom.getRootElement();
//得到根元素的下一級元素
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個List表中
userList.add(username);
pwdList.add(password);
}
}

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

test.xml 記錄了合法的用戶名密碼
<?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 ,有錯誤就會跳轉(zhuǎn)到這里來。
總結(jié):盡量不要把代碼寫在jsp里,盡量不要使用DW畫界面,會出來很多垃圾代碼,后期修改的時候看起來也累。通過這個例子,我似乎漸漸了解了為什么那么多的框架使用XML做配置文件及其如何工作的。
實際開發(fā)項目的時候會碰到很多很多奇怪而且難以捉摸的問題,可能這就是為什么要加班了。我前1個星期就碰到一個很奇怪的頁面問題。本來顯示正常,然后加了一個完全不相關(guān)的JSP文件,結(jié)果頁面排版就出問題。然后COPY一下在其他機器上運行一切正常。郁悶了2天.....結(jié)果無意裝了新版本的tomcat,把老版本卸了。然后一運行,正常Y_Y,誰會想到是tomcat的問題,而且tomcat也沒報什么錯。