图7-6文章编辑页面
这个页面的代码是非常简单,主要就是一个form表单。注意3个字段:command、title、content。当点击“发布文章”按钮后,这三个字段的内容都会以请求的方式转发到Controller类。(Controller.do的请求会转到controller类,在web.xml文件中有配置)
Controller类接受JSP页面发来的请求,并做出相应的处理,代码如下:
package cn.net.nit.mvcDemo.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.net.nit.mvcDemo.bean.ArticlePublish;
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
public Controller() {super();}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
// 在Servlet中并没有直接处理所提交的请求,而是把请求的处理推后到ArticlePublish类中,
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取JSP页面传入的操作参数,根据参数决定执行哪些操作,跳转到哪个页面。
String commond = request.getParameter("commond");
if (commond.equals("publish")) {
// 获取JSP页面表单的内容
String title = request.getParameter("title");
String content = request.getParameter("content");
// 如果出现中文乱码,要进行转码
title = new String(title.getBytes("iso-8859-1"), "utf-8");
content = new String(content.getBytes("iso-8859-1"), "utf-8");
// 调用发布文章的方法,保存文章
ArticlePublish ap = new ArticlePublish();
boolean flag = ap.publish(title, content);
// 将需要显示的内容放在request里面,
request.setAttribute("title", title);
request.setAttribute("content", content);
// 跳转到文章显示页面
RequestDispatcher dispatcher = null;
if (flag == true)
dispatche= getServletContext().getRequestDispatcher(
"/show.jsp");
else
dispatcher=getServletContext().getRequestDispatcher(
"/wrong.jsp");
dispatcher.forward(request, response);
} else {
System.out.println("其他操作!!!");
}
}
}
从以上代码中,容易发现,Controller类把参数接收下来后,只是做了个编码转换,最终的业务处理还是交给ArticlePublish类来负责,最后把要显示的结果保存在请求中,并再次转发。显然Controller类相当于一个请求分发器,起控制作用。
业务处理类ArticlePublish处理Controller转发过来的请求,代码如下:
package cn.net.nit.mvcDemo.bean;
public class ArticlePublish {
public boolean publish(String title, String content) {
if (title.equals("")) {
return false;
}
System.out.println("title = " + title);
System.out.println("content = " + content);
System.out.println("相关的处理过程,把数据保存到数据库等...");
return true;
}
/**
*
其他的业务方法
*/
public void otherMethods() {
//省略....
}
}
首先说明一点,这个业务类不真正涉及数据库的操作,为了方便起见,用打印语句来模拟代替,关于操作数据库的技术,如JDBC技术等,在后面的章节会提到。在ArticlePublish 类有处理业务的方法,所有的业务都是交给业务类处理的,M层在MVC模式中是核心。
显示最后的结果,如图7-7所示
图7-7结果显示页面
该显示页面为show.jsp,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
文章显示
文章标题:<%=request.getAttribute("title") %>
文章内容:<%=request.getAttribute("content") %>
7.4本章小结
通过本章的学习,使读者对Servlet和JSP之间的关系以及MVC设计模式有更深刻的理解,使读者熟练掌握MVC的运用。
本文深入探讨了MVC设计模式的基本思想,详细解释了模型、视图和控制器各自的角色及相互间的关系。并通过具体案例展示了如何在实际项目中运用MVC模式。

1524

被折叠的 条评论
为什么被折叠?



