JSP的开发模式

Session:用来记录会话的状态对象

ServletContext和application:用来封装应用程序的配置信息

 

JSP的开发模式——MVC设计模式

MVC(模型-视图-控制器)是20世纪80年代为Smalltalk-80编程语言发明的一种软件设计模式,它是一种分离业务逻辑与显示界面的设计方法。

MVC的模型(Model)部分负责管理程序的业务数据,视图(View)部分负责显示界面,控制器(Controller)部分则负责与用户进行交互(接受请求和选择响应视图)。

 

JSP规范给出了使用JSP页面构建Web应用程序的两个方案—JSP模式1和模式2。两个模式的区别在于处理的位置。

 

JSP模型1(JSP+JavaBean):JSP页面负责处理请求并将响应发送给客户端

JSP部分:既包含输出效果的html+css代码,又包含业务逻辑的Java代码

JavaBean部分:封装对数据库的操作代码和部分的业务逻辑代码

 

Model1的典型的交换过程:首先用户通过浏览器调用Web应用中的JSP页面,发送request请求,JSP页面接收到浏览器的请求后,通过调用JavaBean对象的方法从数据库中读取数据,然后JSP页面再把数据返回浏览器,最终在浏览器中显示相应的信息。

优点:非常适合小型Web项目的快速开发;对JavaWeb开发人员的技术要求不高。

弊端:Java和HTML柔和在一起,在Web项目开发的后期和维护阶段会造成很大的困难。

 

 

JSP模型2(MVC):模型2体系结构集成使用了Servlet和JSP页面,在该模型中,JSP页面用于表示层,并且Servlet负责处理各类任务。

Servlet作为一个控制器,负责处理请求并创建JSP页面所需的任何Bean。该控制器也负责确定将该请求传递到哪个JSP页面。JSP页面检索Servlet创建的对象,并提取动态内容插入在一个模板中。

Servlet部分:处理各种请求的分派

JavaBean部分:对数据库的操作

JSP部分:数据的最终显示

 

Model2交互过程:首先用户通过浏览器向Web应用中的Servlet发送请求,Servlet接收到请求后实例化JavaBean对象,调用JavaBean对象的方法,JavaBean对象返回从数据库中读取的数据,Servlet选择合适的JSP,并且把从数据库中读取的数据通过这个JSP进行显示,最后JSP页面把最终的结果返回给浏览器。

优点:业务逻辑和表示内容得到了很好的分离,这种开发方式适合多人合作开发大型的项目。

弊端:Web项目开发的难度加大了,对开发人员的技术要求也提高了。

 

Servlet作为一个控制器,负责处理请求并创建JSP页面所需的任何Bean,该控制器也负责确定将该请求传递到哪个JSP页面。JSP页面检索Servlet创建的对象,并提取动态内容插入在一个模板中。

 

在WEB应用中很难实现模型的“状态改变通知”事件,视图不能随着模型的改变而自动更新。在web应用中无法完全实现真正意义上的mvc模型,模式2只能算是mvc设计模式的一种变体,有人干脆将他称之为“webMVC”.

 

注意:在MVC设计模式中,View用来呈现数据处理结果,可以是JSP、XML、HTML;Model用来存储数据的状态,可利用JavaBean来实现;Controller负责协调应用程序的运行流程,可用Servlet来实现。运用这种模式可以将数据呈现方式和数据处理方式分离,提高了代码的利用率。这种模式也是最常用的基本开发模式之一

Servlet可以充当控制器角色,也可以实现控制器角色。

 

实例一:用模型一实现用户登录功能

 

login.jsp部分

       <%

           request.setCharacterEncoding("utf-8");

       %>

       <!-- 在当前的会话范围内,如果用户已经登入,应该转向到loginSuccess.jsp -->

       <%

           if (session.getAttribute("user") != null) {

       %>

       <jsp:forward page="loginSuccess.jsp"></jsp:forward>

       <%

           }

       %>

       <!-- 用户信息的验证,用户的账号和密码应该封装在loginFormBean对象中,有基本的语法格式的验证,用户的名字和密码是否正确,如果不正确,跳转到当前的页面中来  -->

       <jsp:useBean id="loginForm"class="com.csdn.beans.LoginFormBean"

           scope="page"></jsp:useBean>

       <jsp:setProperty property="*"name="loginForm" />

       <!-- 条件判定 -->

       <%

           if (

//基本语法格式的验证:用户名是不是空格或者密码长度是否在6-10个字符之间

              if (loginForm.validate()) {

                  //验证用户名和密码是否是合法的

                  DbUtil util = DbUtil.getInstance();

                  UserBean user = util.getUser(loginForm.getName());

                  if (user == null) {

                     loginForm.setErrorMsg("name", "用户名不存在");

                  } else {

                     if (user.validatePassord(loginForm.getPassword())) {

                         // 登入成功

                         session.setAttribute("user", user);

                         pageContext.forward("loginSuccess.jsp");

                     } else {

                         //用户名存在但是密码不对

                         loginForm.setErrorMsg("password", "密码错误!");

                     }

                  }

              }

           }

       %>

 

       <!-- 表单的显示 -->

       <form action="login.jsp"method="post">

           <table border="1px">

              <tr>

                  <td>

                     用户名

                  </td>

                  <td>

                     <input type="text"name="name" />

                  </td>

                  <td>

                     <%=loginForm.getErrorMsg("name") %>

                  </td>

              </tr>

              <tr>

                  <td>

                     密&nbsp;&nbsp;码

                  </td>

                  <td>

                     <input type="password"name="password" />

                  </td>

                  <td style="font-size:red;">

                     <%=loginForm.getErrorMsg("password") %>

                  </td>

              </tr>

              <tr>

                  <td>

                     <input type="submit"value="submit" name="submit"/>

                  </td>

                  <td>

                     <input type="reset"value="reset" name="reset"/>

                  </td>

                  <td></td>

              </tr>

           </table>

       </form>

 

loginSuccess.jsp部分

<%--

    显示用户详细信息

     --%>

     <jsp:useBean id="user"class="com.csdn.beans.UserBean" scope="session"></jsp:useBean>

     <jsp:getProperty property="name" name="user"/><br>

     <jsp:getProperty property="password" name="user"/><br>

     <jsp:getProperty property="email" name="user"/><br>

    <%--完成注销 --%>   

    <a href="login.jsp">注销用户</a>

 

DbUtil.java部分

    //存储从数据库中提取的用户信息

    private Hashtable users=new Hashtable();

   

    static DbUtil instance=new DbUtil();

   

    private DbUtil(){

       UserBean user1=new UserBean();

       user1.setName("张三");

       user1.setPassword("1234567");

       user1.setEmail("zhangsan@163.com");

      

       UserBean user2=new UserBean();

       user2.setName("里斯");

       user2.setPassword("1234567");

       user2.setEmail("lisi@163.com");

      

       UserBean user3=new UserBean();

       user3.setName("万古");

       user3.setPassword("1234567");

       user3.setEmail("wang@163.com");

      

       users.put(user1.getName(), user1);

       users.put(user2.getName(), user2);

       users.put(user3.getName(), user3);

          

    }

    public static DbUtil getInstance(){

       return instance;

    }

    public UserBean getUser(String name){

       UserBean user=(UserBean) users.get(name);

       return user;

    }

 

LoginFormBean.java部分

    private String name;

    private String password;

   

    //errors对象存储所有错误消息

    private Hashtable errors=new Hashtable();

   

    public StringgetName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

   

    //验证用户输入的密码是否有效,语法格式验证

    public boolean validate(){

       boolean allOk=true;

      

       if(name.trim().equals("")){

           errors.put("name", "输入的用户名不能为空,请输入你的用户名");

           allOk=false;

       }

       if(password.length()>10 || password.length()<6){

           errors.put("password","密码必须在6-10位之间,请重新输入");

           allOk=false;

       }

       return allOk;

    }

   

    public void setErrorMsg(String err,String errMsg){

       if(err!=null && errMsg!=null){

           errors.put(err, errMsg);

       }

    }

   

    public String getErrorMsg(String err){

       String errMsg=(String) errors.get(err);

       return(errMsg==null)? " " : errMsg;

    }

 

UserBean.java部分

private String name;

    private String password;

    private String email;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

    public String getEmail() {

       return email;

    }

    public void setEmail(String email) {

       this.email = email;

    }

   

    //验证方法

    public boolean validatePassord(String password){

       if(this.password.equals(password)){

           return true;

       }else{

           return false;

       }

    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值