MVC系列教材 (一)- 教程

MVC是一种分层的设计模式,本章节从Servlet和JSP的局限性谈起,慢慢引入MVC的概念。

步骤1:仅仅使用Servlet的短处
步骤2:仅仅使用JSP的短处
步骤3:结合Servlet和JSP
步骤4:MVC设计模式

步骤 1 : 仅仅使用Servlet的短处

在Servlet的章节中,使用了编辑Hero的Servlet
根据浏览器提交的id,通过HeroDAO找到对应的Hero,然后在Servlet中组织html显示出来。

可以看到这个Servlet不仅要准备数据,还要准备html。 尤其是准备html,可读性非常差,维护起来也很麻烦

package servlet;

  

import java.io.IOException;

  

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

  

import bean.Hero;

import dao.HeroDAO;

  

public class HeroEditServlet extends HttpServlet {

  

    protected void service(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

  

        int id = Integer.parseInt(request.getParameter("id"));

  

        Hero hero = new HeroDAO().get(id);

  

        StringBuffer format = new StringBuffer();

        response.setContentType("text/html; charset=UTF-8");

  

        format.append("<!DOCTYPE html>");

  

        format.append("<form action='updateHero' method='post'>");

        format.append("名字 : <input type='text' name='name' value='%s' > <br>");

        format.append("血量 : <input type='text' name='hp'  value='%f' > <br>");

        format.append("伤害: <input type='text' name='damage'  value='%d' > <br>");

        format.append("<input type='hidden' name='id' value='%d'>");

        format.append("<input type='submit' value='更新'>");

        format.append("</form>");

  

        String html = String.format(format.toString(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId());

  

        response.getWriter().write(html);

  

    }

}

步骤 2 : 仅仅使用JSP的短处

因为在Servlet中编写html有这样的短板,所以索性直接在JSP中开发编辑Hero这个功能

这时会发现,虽然编写html方便了,但是写java代码不如在Servlet中那么方便

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" import="java.util.*,bean.*,java.sql.*"%>

<%

    int id = Integer.parseInt(request.getParameter("id"));

    Hero hero = null;

    try {

        Class.forName("com.mysql.jdbc.Driver");

     

        Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",

                "root", "admin");

     

        Statement s = c.createStatement();

     

        String sql = "select * from hero where id = " + id;

     

        ResultSet rs = s.executeQuery(sql);

     

        if (rs.next()) {

            hero = new Hero();

            String name = rs.getString(2);

            float hp = rs.getFloat("hp");

            int damage = rs.getInt(4);

            hero.name = name;

            hero.hp = hp;

            hero.damage = damage;

            hero.id = id;

        }

     

        s.close();

     

        c.close();

     

    } catch (ClassNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

     

%>

<form action='updateHero' method='post'>

    名字 : <input type='text' name='name' value='<%=hero.getName()%>'> <br>

    血量 :<input type='text' name='hp' value='<%=hero.getHp()%>'> <br>

    伤害: <input type='text' name='damage' value='<%=hero.getDamage()%>'> <br>

    <input type='hidden' name='id' value='<%=hero.getId()%>'>

    <input type='submit' value='更新'>

</form>

步骤 3 : 结合Servlet和JSP

既然Servlet和JSP都有各自的优势和短板,那么为什么不结合起来扬长避短呢?
HeroEditServlet:只用来从数据库中查询Hero对象,然后跳转到JSP页面

request.setAttribute("hero", hero);


在request中设置hero

request.getRequestDispatcher("editHero.jsp").forward(request, response);


服务端跳转到editHero.jsp,因为是服务端跳转,都属于同一次请求,所以可以在editHero.jsp通过request取出来

editHero.jsp: 不做查询数据库的事情,直接获取从HeroEditServlet传过来的Hero对象,通过EL表达式把request中的hero显示出来

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import bean.Hero;

import dao.HeroDAO;

public class HeroEditServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        int id = Integer.parseInt(request.getParameter("id"));

        Hero hero = new HeroDAO().get(id);

        request.setAttribute("hero", hero);

        request.getRequestDispatcher("editHero.jsp").forward(request, response);

    }

}

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" import="java.util.*,bean.*,java.sql.*"%>

<form action='updateHero' method='post'>

    名字 : <input type='text' name='name' value='${hero.name}'> <br>

    血量 :<input type='text' name='hp' value='${hero.hp}'> <br>

    伤害: <input type='text' name='damage' value='${hero.damage}'> <br>

    <input type='hidden' name='id' value='${hero.id}'>

    <input type='submit' value='更新'>

</form>

步骤 4 : MVC设计模式

上述例子中结合Serlvet和JSP进行数据的显示,就是一种MVC的思想。

M 代表 模型(Model
V 代表 视图(View) 
C 代表 控制器(controller

模型是什么呢? 模型就是数据,就是dao,bean

视图是什么呢? 就是网页, JSP,用来展示模型中的数据

控制器是什么? 控制器用来把不同的数据,显示在不同的视图上。 在这个例子的,Servlet就是充当控制器的角色,把Hero对象,显示在JSP上。

控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上。

MVC设计模式


更多内容,点击了解: https://how2j.cn/k/mvc/mvc-tutorials/561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值