JSP+servlet+Javabean:MVCモードを使用して、簡単な計算機を実現する

14139 ワード

まずMVCモードは,モデル(model)+ビュー(view)+制御(control)であることを知った.
モデルレイヤでは、操作オブジェクトのパッケージです.Javaコード:Cal.javaと書いてあります
package Bean;

public class Cal {
    private double num1;
    private double num2;
    private String sign;
    private double result;

    public void setNum1(double num1){
        this.num1 = num1;
    }

    public void setNum2(double num2){
        this.num2 = num2;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public void setResult(double result) {
        this.result = result;
    }

    public double getNum1() {
        return num1;
    }

    public double getNum2() {
        return num2;
    }

    public double getResult() {
        return result;
    }

    public double add(double num1, double num2){
        return num1 + num2;
    }

    public double sub(double num1, double num2){
        return num1 - num2;
    }

    public double mul(double num1, double num2){
        return num1 * num2;
    }

    public double div(double num1, double num2){
        return num1 / num2;
    }

    public String getSign() {
        return sign;
    }


}


ビューレイヤでは、jspコード:index.jspと書きます.
"Bean.Cal" %>--%>

"Bean.Cal" %>
"java.io.PrintWriter" %>
"com.sun.org.apache.xpath.internal.operations.String" %>

92407
  Date: 2018/9/6
  Time: 15:49
  To change this template use File | Settings | File Templates.
--%>
"text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>SimpleCalculatertitle>
  head>
  <body>
  <div align="center">
    <form action="/CalServlet"   method="post"><input name="num1" type="text" value=${requestScope.cal.num1} >
      <div name="radio">

          
              set    , servlet POST             ,          ,     。
              .sign            Cal.java     
                       ,       ,     checked  ,       。      ,      
              --%>

              <input type="radio" class="r" name="sign" value="1" ${requestScope.cal.sign == "1"?"checked":""}>+
              <input type="radio" class="r" name="sign" value="2" ${requestScope.cal.sign == "2"?"checked":""}>-
              <input type="radio" class="r" name="sign" value="3" ${requestScope.cal.sign == "3"?"checked":""}>*
              <input type="radio" class="r" name="sign" value="4" ${requestScope.cal.sign == "4"?"checked":""}>/
      div><input name="num2" placeholder=" " type="text" value=${requestScope.cal.num2} ><br>
      <input type="submit" ><br><input name="result" type="text" readonly value=${requestScope.cal.result} >
    form>

  div>
  body>
html>

ビューレイヤのinputで値を取得するときに、EL式を使用しました.El式は、request.getParameter()と同様の機能を持つデータベースで取得された値をフロントページに表示するためによく使用されますが、後者はバックグラウンドで値を取得するためによく使用されます.EL式が値を取得できない場合は何も表示されず、request.getParameter()にnullが表示されます.
補足:
「EL式の表現形式は簡単で、対応する役割ドメインの中でオブジェクトです.属性はその値を得ることができますが、その内部では、属性のgetterメソッドがデフォルトで呼び出されていることを知っておく必要があります.その呼び出し形式を使用するには、まず、あなたが使用する値がパッケージ化されたときに対応するgetterメソッドがあることを保証します」
コントロール層にはservlet:Calservlet.javaと書かれています
package Servlter;
import Bean.Cal;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//  servlet3.0    ,     xml ,  @           .xml      
@WebServlet(name = "CalServlet", urlPatterns = "/CalServlet")
public class CalServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cal cal = new Cal();
        cal.setNum1(new Double(request.getParameter("num1")));
        cal.setNum2(new Double(request.getParameter("num2")));
        cal.setSign(request.getParameter("sign"));

        switch(cal.getSign().charAt(0)){
//.charAt(0)    ,      (cal.getSign()      ) ,     ,0        ,       ,     0。   
            case '1':cal.setResult(cal.add  (cal.getNum1(),cal.getNum2()));break;
            case '2':cal.setResult(cal.sub  (cal.getNum1(),cal.getNum2()));break;
            case '3':cal.setResult(cal.mul  (cal.getNum1(),cal.getNum2()));break;
            case '4':cal.setResult(cal.div  (cal.getNum1(),cal.getNum2()));
        }
//          new     cal   setAttribute()        request   ,       ,  new       
        request.setAttribute("cal", cal);
//                        ,        ,       
        request.getRequestDispatcher("index.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}