MVC构架(3)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 22:21:41
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
用户姓名:
用户密码:
 当用户输入验证信息,提交的时候,调用同一目录下的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;   }%> <%   isnotlogin = validatebean.uservalidate();   if(!isnotlogin)   {      response.sendRedirect("error.jsp?errmsg=用户名口令错误!");      return;   }   else   {      session.setAttribute("username",username);%>                  <%   }%>程序首先判断输入是否为空,然后将信息传递给JavaBean程序validate进行处理,根据处理的结构,如果用户信息正确;转到Servlet程序forky处理。JavaBean程序validate。程序名称:validate.javapackage 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 mypackageimport 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   hello4   mypackage   hello4      /forky配置程序,通过HTTP方式访问程序。单击提交按钮,如果用户和密码都是teacher,则验证信息正确,转到teacher页面。