分享

MVC构架(3)

 wangxuqin 2010-10-07
JSP设计模式
JSP设计模式包括两个:JSP+JavaBean设计模式和MVC设计模式。
模式1:JSP+JavaBean模式
在JSP+JavaBean模式中JSP页面肚子响应请求并处理结果返回客户,所有的数据库操作通过
JavaBean来实现。
大量地使用这种模式,常会导致在JSP页面中嵌入大量的Java代码,当需要处理的商业逻辑
非常复杂时,这种情况变得很糟糕。大量的Java代码使得JSP页面变得非常臃肿。前端页面
设计人员稍有不慎,就有可能破坏关系到商业逻辑的代码。
这种情况在大型项目中经常出现,造成了代码开发和维护的困难,同时会导致项目管理的
困难。因此这种模式只适用于中小规模的项目。
模式2:MVC模式
MVC模式即"Model-View-Controller"模式。在这种模式中,通过JSP技术来表现页面,通过
Servlet技术来完成大量的商务处理工作,实现了用户的商业逻辑。
这种模式中,Servlet用来处理请求的商务,充当了控制器的角色,负责响应客户对业务逻
辑的请求,并根据用户的请求行为决定将哪个JSP页面发送给客户。JSP页面处于表现层,也
就是视图的角色。JavaBean则负责数据的处理,也就是模式的角色。
这种模式在开发大型项目时表现出的优势尤其突出。具有更为清晰的逻辑划分,能够有效的
区分不同的开发者,避免彼此间的互相影响,充分发挥每个人的特长。
 
MVC在JSP中的实现模型
目前,MVC在JSP中有两种实现模型:基于Bean的MVC模型和基于Struts的MVC模型。
基于Bean的模型
Bean可以利用JavaBean实现,也可以利用EJB实现,分别构成的系统是
JavaBean(M)+JSP(V)+Servlet(C)
EJB(M)+JSP(V)+Servlet(C)
 
MVC模型案例
用户首先请求页面login.html,login.html会要求用户输入用户名和密码。输入的用户名和密码
会POST到validate.jsp,validate.jsp使用“bean:mypackage.validate”来验证用户名和密码
是否正确。如果验证没有通过,则显示error.jsp页面,显示错误信息。如果验证通过,则转到
“servlet:mypackage.forky” mypackage.forky根据用户名转到不同的页面。如果用户名为teacher
否则转到student.jsp文件。
 
验证录入表单login.html
程序名称:login.html
<HTML><BODY>
<FORM METHOD="POST" ACTION="validate.jsp">
用户姓名:<INPUT TYPE="TEXT"     NAME="username"><BR>
用户密码:<INPUT TYPE="PASSWORD" NAME="password"><BR>
<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="确定">
</FORM>
</BODY></HTML>
 
当用户输入验证信息,提交的时候,调用同一目录下的validate.jsp文件处理相应的信息。
程序名称:validate.jsp
<%!
   boolean isnotlogin = false;
%>
<%
   String username = request.getParameter("username");
   String password = request.getParameter("password");
   
   if(username==null || password==null)
   {
      response.sendRedirect("error.jsp?errmsg=非法进入该页");
      return;
   }
%>
 
<jsp:useBean id="validatebean" scope="page" class="mypackage.validate"/>
<jsp:setProperty name="validatebean" property="username" param="username"/>
<jsp:setProperty name="validatebean" property="password" param="password"/>
</jsp:useBean>
<%
   isnotlogin = validatebean.uservalidate();
   if(!isnotlogin)
   {
      response.sendRedirect("error.jsp?errmsg=用户名口令错误!");
      return;
   }
   else
   {
      session.setAttribute("username",username);
%>
      <jsp:forward page="forky">
      <jsp:param name="username" value="<%=username%>"/>
      </jsp:forward>
<%
   }
%>
程序首先判断输入是否为空,然后将信息传递给JavaBean程序validate进行处理,根据
处理的结构,如果用户信息正确;转到Servlet程序forky处理。JavaBean程序validate。
程序名称:validate.java
package mypackage;
public class validate
{
   final String user1="teacher";
   final String password1="teacher";
   final String user2="student"
   final String password1="student";
   private String username="";
   private String pwd = "";
   public void setUsername(String username)
   {
      this.username = username;
   }
 
   public String getUsername()
   {
      return this.username;
   }
   
   public void setPwd(Stirng pwd)
   {
      this.pwd = pwd;
   }
 
   public String getPwd()
   {
      return this.pwd;
   }
   
   public boolean uservalidate()
   {
      boolean temp = false;
      if(username.equals(user1)&&pwd.equals(password1))
      {
         temp = true;
      }
      else if(username.equals(user2)&&pwd.equals(password2))
      {
         temp = true;
      }
      else
      {
         temp = false
      }
      
      return temp;
   }
}
 
在JavaBean程序中,利用方法uservalidate处理传递的用户信息,如果正确,返回true,反之,
返回flase:
程序名称:
package mypackage
import javax.servlet.*;
import javax.servlet.http.*;
public class forky extends HttpServlet
{
   protected void doPost(HttpServletRequest request,HttpServletResponse response response)
                         throws ServletException,IOException
   {
      HttpSession session = request.getSession(false);
      if(session==null)
      {
         response.sendRedirect("error.jsp?errmsg=会话已经过期了!");
         return;
      }
      String username1 = (String)sessin.getAttribute("username");   
      String username2 = request.getParameter("username");
      /*如果session没有过期,usernaem1的值和username2的应该是相等的*/
      if(!username1.equals(username2))
      {
         response.sendRedirect("error.jsp?errormsg=会话已经过期!");
         return;
      }
      
      response.setContentType("text/html;charset=GBK");
      PrintWriter out = response.getWriter();
      request.setAttribute("username",username2);
      if(username2.equals("teacher"))
      {
         getServletConfig().getServletContext().setRequestDispatcher("/techer.jsp").forward(request,response);
      }
      else
      {
         getServletConfig().getServletContext().getRequestDispatcher("/student.jsp").forward(request,response);
      }
   } 
}
Servlet的功能是控制。程序中,如果用户名是老师,则将当前页面转移到teacher.jsp页面上,如果用户名是学生
如果用户名是学生,则将当前页面转移到student.jsp页面上。配置Servlett的运行路径。
程序名称:web.xml
<servlet>
   <servlet-name>hello4</servlet-name>
   <servlet-class>mypackage</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>hello4</servlet-name>
   <!-- using http://localhost:8080/forky to access this servlet -->
   <url-pattern>/forky</url-pattern>
</servlet-mapping>
配置程序,通过HTTP方式访问程序。
单击提交按钮,如果用户和密码都是teacher,则验证信息正确,转到teacher页面。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多