J2EE-18 MVC和struts框架

将猜数游戏改成符合MVC设计模式的程序

模型
NumberGuessBean

控制器
预处理请求数据
调用模型对象
根据模型的状态选择视图

在视图里面只访问模型的读函数,访问模型的数据

将jsp拆分成三个JSP

创建模型

实现
NumberGuessBean
用来给控制器调用

创建控制器

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import num.NumberGuessBean;

public class NumberGuessServlet extends HttpServlet{
	public void service(HttpServletRequest request,
	HttpServetResponse response)throws ServletException,IOException{
		NumberGuessBean bean = null;
		HttpSession session = request.getSession();
		Object o = session.getAttribute("bean");
		//bean对象是存在session中的,因为猜数是有状态的连接
		if(o == null){
			bean = new NumberGuessBean();
			session.setAttribute("bean",bean);
		}else{
			bean = (NumberGuessBean) o; 
		}

		String guess = request.getParameter("guess");
		//根据模型的状态选择不同的视图来渲染数据
		if( !(guess==null || guess.length===0 )){
			bean.setGuess(guess);
		}
		if(bean.getSuccess()){
			request.getRequestDispatcher("/success.jsp").forward(request,response);
		}
		else if(bean.getNumGuesses() == 0){
			request.getRequestDispatcher("/welcome.jsp").forward(request,response);
		}
		else{
  			request.getRequestDispatcher("/guess.jsp").forward(request,response);
		}
	}
}

拆分JSP

以success为例

<h1>Congratulaton! You have made 5 times</h1>
<h2>Do you want to play again?<h2>

5作为动态数据有三中填写方式

1.
<jsp:useBean id="bean"  class="num.NumberGuessBean" scope="session">
<%=bean.getNumGuesses() %>

2.jsp动作
<jsp:getProperty name="bean" property="numGuesses"/>

3.
<jsp:useBean id="bean"  class="num.NumberGuessBean" scope="session">
${bean.numGuesses}

JSP语法复习:

<%@  %>
<%=  %>
<%!  %>
<%--  --%>
<%   %>

jsp动作:
<jsp:useBean />
<jsp:getProperty />
<jsp:setProperty />
<jsp:forward />
<jsp:include />

struts框架

两个控制器
前端控制器
后端控制器复用

前端控制器不调用模型
所以可以复用

struts 1

1.3的版本

ActionServlet

所有的后端控制器都要继承Action
控制类继承Action 覆盖 execute函数
前端控制器调用后端控制器的execute函数


execute函数
execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

From里面是模型所需的数据

这里的设计存在缺陷 req 和 res 不需要
原因:客户的数据都在ActionForm中,不需要req再进行获取

ActionForm
封装输入数据和返回值
类里定义reset() 复原数据
validate() 验证 对输入域中的数据的合法性进行验证

部署servlet组件
java的包的命名是又大到小,与域名相反

在这里插入图片描述

在这里插入图片描述

作业:

1.看Struts 1 里的
ActionForward类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值