MVC模式
MVC模式就是一整构架:模型+视图+控制器
模型就是java bean,视图是jsp页面,控制器是servlet
也就是说我们的servlet作为数据的处理程序,java bean只拿来当作一个对象存储数据,jsp负责显示
其实我们学过都知道,servlet也可以控制jsp页面(resp.getWriter()),但太混杂了,MVC模式便于管理和维护
例子
制作一个计算器,和书上的稍微有改动,我让输入框里的数不会消失了,具体方法见下面代码
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<jsp:useBean id="digitBean" class="com.ljq.Example_operation" scope="request"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算器</title>
<style>
.bg {
width: 500px;
height: 300px;
background-color: yellow;
margin: 100px auto;
}
</style>
</head>
<body>
<div class="bg">
<form action="op" method="post">
请输入两个数<input type="input" name="num1" value ="<%=request.getParameter("num1")==null?"":request.getParameter("num1") %>" ><input type="input" name="num2" value ="<%=request.getParameter("num2")==null?"":request.getParameter("num2") %>">
<br>
选择运算符: <select name = "op" >
<option value="+" selected>+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="submit" value="提交">
</form>
<p>
运算结果:
<jsp:getProperty name="digitBean" property="numberOne"/>
<jsp:getProperty name="digitBean" property="operator"/>
<jsp:getProperty name="digitBean" property="numberTwo"/> =
<jsp:getProperty name="digitBean" property="result"/>
</p>
</div>
</body>
</html>
Example_operation.java
package com.ljq;
public class Example_operation {
double numberOne,numberTwo,result;
String operator = "+";
public double getNumberOne() {
return numberOne;
}
public void setNumberOne(double numberOne) {
this.numberOne = numberOne;
}
public double getNumberTwo() {
return numberTwo;
}
public void setNumberTwo(double numberTwo) {
this.numberTwo = numberTwo;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
}
Servlet.java
package com.ljq;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//配置
@WebServlet("/op")
public class Servlet extends HttpServlet{
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
Example_operation bean = new Example_operation();
req.setAttribute("digitBean", bean);
String s1 = req.getParameter("num1");
String s2 = req.getParameter("num2");
String op = req.getParameter("op");
if (s1 == null || s2 == null)
{
return;
}
double numberOne = Double.parseDouble(s1);
double numberTwo = Double.parseDouble(s2);
double result = 0;
if (op.equals("+")) {
result = numberOne + numberTwo;
}
else if (op.equals("-")) {
result = numberOne - numberTwo;
}
else if (op.equals("*")) {
result = numberOne * numberTwo;
}
else if (op.equals("/")) {
result = numberOne / numberTwo;
}
bean.setNumberOne(numberOne);
bean.setNumberTwo(numberTwo);
bean.setOperator(op);
bean.setResult(result);
RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp");
dispatcher.forward(req, resp);
}
}
忘了生存web.xml了,所以用的注释的方式配置:@WebServlet(“/op”)
MVC:index.jsp会调用Servlet.java,Servlet.java会创建java bean并且放到request中,再转向到index.jsp页面显示结果
遇到的一小小问题
当第一次执行index.jsp界面时,我们发现bean中的属性值都没有,那么默认会显示0
ps:生产队的牛都没我勤快