Java的MVC模型是什么?

MVC模型是什么?

MVC模型是一种将Web服务器内的程序按照M(模型)、V(视图)、C(控制器)的角色进行分割的设计方法。
– 模型:负责应用程序中的数据存储和业务处理等处理逻辑,类似于系统的主体部分。模型不能执行输入输出和显示等处理。
– 视图:负责显示处理和输入输出处理等界面显示的部分。
– 控制器:负责应用程序的执行控制。它自己不执行显示或逻辑处理,而是根据输入请求,委托模型执行所需的逻辑,并将结果委托给视图进行显示。

作为开发者,系统被分为“M”、“V”、“C”三个部分,这样开发工作效率更高,各部分独立性强,减少了与其他组件的交互,降低了依赖性。

在Java中,模型被Java类(如Bean和Dao)代表,视图由JSP负责,控制器由Servlet负责。

MVC的处理流程

スクリーンショット 2023-01-08 13.22.28.png

示例代码

スクリーンショット 2023-01-08 15.16.30.png
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>登録画面</title>
</head>
<body>
  <h1>登録情報を入力してください</h1>
  <form action="/javaweb/register4" method="post">
  名前:<input type="text" name="name" size="10" /><br/>
  年齢:<input type="radio" name="age" value="child" />18歳未満 
        <input type="radio" name="age" value="adult" />18歳以上<br/>
  開発経験:<input type="checkbox" name="lang" value="Java" />Java 
        <input type="checkbox" name="lang" value="Python" />Python 
        <input type="checkbox" name="lang" value="JavaScript" />JavaScript<br/><br/>
  <input type="submit" value="送信" />
  </form>
</body>
</html>

这个Web浏览器会将通过输入表单和复选框获取的信息“name = ‘菅原’,age = adult,lang = Java,Lang = Python”作为请求发送到服务器。
目标地址是服务器。

 

import bean.RegisterBean;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet("/register4")
public class RegisterServlet4 extends HttpServlet {
  public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws IOException, ServletException {
    // リクエストの文字コードを指定
    req.setCharacterEncoding("utf-8");
    
    // 入力情報の取得
    String name = req.getParameter("name");
    String age = req.getParameter("age");
    String[] langs = req.getParameterValues("lang");
    res.setContentType("text/html;charset=utf-8");
    
    // JSPでも扱える様にBeanのオブジェクト作成
    RegisterBean rb = new RegisterBean();
    rb.setName(name);
    rb.setAge(age);
    rb.setLangs(langs);
    
    // Beanをリクエストに格納
    req.setAttribute("rb", rb);
    
    // register4.jspへフォワード
    RequestDispatcher rd = req.getRequestDispatcher("/register4.jsp");
    rd.forward(req, res);
  }
  public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws IOException, ServletException {
    doPost(req, res);
  }
}

从Web浏览器发送请求后,会执行Servlet内的doPost方法。该方法调用了setter方法,将从浏览器发送的信息“name = ‘菅原’,age = adult,lang = Java,Lang = Python”存储在Bean对象中。

在方法内部,RegisterBean类将成为下面Bean类的类。

package bean;

import java.io.Serializable;

public class RegisterBean implements Serializable{
  private String name;
  private String age;
  private String[] langs;

  public RegisterBean(){
  }
  
  public void setName(String name){
    this.name = name;
  }
  public void setAge(String age){
    this.age = age;
  }
  public void setLangs(String[] langs){
    this.langs = langs;
  }
  
  public String getName(){
    return name;
  }
  public String getAge(){
    return age;
  }
  public String[] getLangs(){
    return langs;
  }
  
  public String getJpnAge(){
    String jpnAge;
    if(age.equals("child")){
      jpnAge = "18歳未満";
    } else {
      jpnAge = "18以上";
    }
    return jpnAge;
  }
  public String getStrLangs(){
    String strLangs = "";
    for(int i = 0; i < langs.length; i++){
      strLangs = strLangs + langs[i] + " ";
    }
    return strLangs;
  }
}

将传递给Controller的值,使用”setAttribute方法”存储到请求中,并使用”forward(req, res)”方法将其转发到JSP页面。转发目标通过参数”/register4.jsp”进行指定,该参数被传递给”req.getRequestDispatcher”方法。

<%@page contentType="text/html;charset=utf-8" %>
<jsp:useBean id="rb" scope="request" class="bean.RegisterBean" />
<html>
  <head>
    <title>確認画面</title>
  </head>
<body>
  <h2>入力情報を確認して登録ボタンを押してください</h2>
  氏名:<strong><jsp:getProperty name="rb" property="name" /></strong><br/>
  年齢:<strong><%= rb.getJpnAge() %></strong><br/>
  開発経験:<strong><%= rb.getStrLangs() %></strong><br/><br/>
<input type="submit" value="登録" />
<input type="reset" value="戻る" />
</body>
</html>
スクリーンショット 2023-01-08 15.48.32.png

参考文献

 

广告
将在 10 秒后关闭
bannerAds