在java代码中写文档(html),这是servlet;在文档中写java代码,这是jsp;而如何将两者分开,这就是MVC模式了。虽然是java的一小步,却是程序员们生活的一大步哦。
下面给出一个简单的用户登陆功能,采用jsp/servelt/javaBean来实现MVC模式(即经典的模式2)。
模型层:
packagecom.vitamin.DataAccess;


importjava.sql.*;


publicclassDBbase
{
StringsDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
StringsConnstr="jdbc:odbc:myDB";
Connectionconnect=null;
ResultSetrs=null;
Statementstmt=null;


publicDBbase()


{

try


{

Class.forName(sDBDriver);

}
catch(ClassNotFoundExceptionex)


{
System.err.println(ex.getMessage());

}
}
publicResultSetexecuteQuery(Stringsql)


{

try


{
this.connect=DriverManager.getConnection(sConnstr);
this.stmt=this.connect.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLExceptionex)


{
System.err.println(ex.getMessage());
}
returnrs;
}
publicintexecuteUpdate(Stringsql)


{
intresult=0;
try


{
this.connect=DriverManager.getConnection(sConnstr);
this.stmt=this.connect.createStatement();
result=stmt.executeUpdate(sql);
}
catch(SQLExceptionex)


{
System.err.println(ex.getMessage());
}
returnresult;
}

}

控制层:
packagecom.vitamin.servlet;

importjava.io.IOException;
importjava.io.PrintWriter;

importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.vitamin.DataAccess.*;
importjava.sql.*;


publicclassHelloextendsHttpServlet
{


/***//**
*Constructoroftheobject.
*/

publicHello()
{
super();
}


/***//**
*Destructionoftheservlet.<br>
*/

publicvoiddestroy()
{
super.destroy();//Justputs"destroy"stringinlog
//Putyourcodehere
}


/***//**
*ThedoGetmethodoftheservlet.<br>
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
*
*@paramrequesttherequestsendbytheclienttotheserver
*@paramresponsetheresponsesendbytheservertotheclient
*@throwsServletExceptionifanerroroccurred
*@throwsIOExceptionifanerroroccurred
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException
{

response.setContentType("text/html");

PrintWriterout=response.getWriter();
out.println("<!DOCTYPEHTMLPUBLIC/"-//W3C//DTDHTML4.01Transitional//EN/">");
out.println("<HTML>");
out.println("<HEAD><TITLE>AServlet</TITLE></HEAD>");
out.println("<BODY>");
out.print("Thisis");
out.print(this.getClass());
out.println(",usingtheGETmethod");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}


/***//**
*ThedoPostmethodoftheservlet.<br>
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstopost.
*
*@paramrequesttherequestsendbytheclienttotheserver
*@paramresponsetheresponsesendbytheservertotheclient
*@throwsServletExceptionifanerroroccurred
*@throwsIOExceptionifanerroroccurred
*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException
{

response.setContentType("text/html");
response.setCharacterEncoding("GBK");
PrintWriterout=response.getWriter();

request.setCharacterEncoding("GBK");
Stringname=request.getParameter("name");
Stringpwd=request.getParameter("password");
DBbasemyDb=newDBbase();
ResultSetrs=null;
intresult=0;

Stringsql="selectcount(*)ascountfromuserswhereusername='"+name+"'andpassword='"+pwd+"'";

try


{
rs=myDb.executeQuery(sql);
if(rs.next())


{
result=rs.getInt("count");
}
}
catch(SQLExceptionex)


{
ex.printStackTrace();

}

if(result>0)


{
out.println("合法用户");
}
else


{
out.println("非法用户");
}

}


/***//**
*Initializationoftheservlet.<br>
*
*@throwsServletExceptionifanerroroccure
*/

publicvoidinit()throwsServletException
{
//Putyourcodehere
}

}
Web表示层:

<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%>

<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">

<title>MyJSP'index.jsp'startingpage</title>

<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="Thisismypage">

<!--
<linkrel="stylesheet"type="text/css"href="styles.css">
-->
</head>

<body>
<FORMname="form1"method="POST"action="/servletTest/servlet/Hello">
<P> 用户名: <INPUTtype="text"name="name"maxlength="20"/></P>
<P> 密码 <INPUTtype="password"name="password"maxlength="20"/></P>
<P>
</P>
<P> <INPUTtype="Submit"name="button4"value="确定"/> <INPUTtype="Reset"name="button5"value="重置"></P>
<P>
</P>
<P>
</P>
</FORM>
</body>
</html>
看过一篇资料说,servlet能够与多个客户机连接,接受多个客户的输入,并将结果广播到多个客户机上,例如可以作为一个多人参与的游戏服务器,这点倒是让我挺吃惊的,不知道如何能够实现哪?如果是真的,那servlet是如何得知客户的详细信息的?难道可以象socket那样?不解。。。
下面给出一个简单的用户登陆功能,采用jsp/servelt/javaBean来实现MVC模式(即经典的模式2)。
模型层:


















































































控制层:



















































































































































Web表示层:












































看过一篇资料说,servlet能够与多个客户机连接,接受多个客户的输入,并将结果广播到多个客户机上,例如可以作为一个多人参与的游戏服务器,这点倒是让我挺吃惊的,不知道如何能够实现哪?如果是真的,那servlet是如何得知客户的详细信息的?难道可以象socket那样?不解。。。