package nepalon.simplestruts;
/** *//**
* <p>Title: MVC framework</p>
* <p>Description: Controller<p>
* <p>Copyright: R2003</p>
* @author Nepalon
* @version 1.0
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import nepalon.simplestruts.ArticleCommand;
public class Controller extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void destroy() {}
/** *//** 用于处理HTTP的GET和POST请求的函数
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request,HttpServletResponse response)
throws ServletException, java.io.IOException
{
//代码(1)通过if来实现对不同请求的分发
String page="/showallarticle.jsp";
if(request.getParameter("command").equals("showarticle"))
{
ArticleCommand command = new ArticleCommand();
page = command.getAllArticle (request, response);
}
//代码(2)
dispatch(request, response, page);
//dispatch(request, response, "/showallarticle.jsp");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException
{
processRequest(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException
{
processRequest(request, response);
}
/** *//** 一个实现了分发者模式的函数
* @param request servlet request
* @param response servlet response
*/
protected void dispatch(HttpServletRequest request,
HttpServletResponse response,
String page)
throws javax.servlet.ServletException, java.io.IOException
{
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
/**
Dispatcher分为两种,如果从ServletContext获得的Dispatcher的话,需要是绝对路经的,不能是相对路经
有三种方法可以得到Request Dispatcher对象。 +J5\ M'Z!
*{,[ \F>
1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。 :kwzbzs"c
3*\jm5A1G
2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。 dPE9A30O8{
^&e<Z"*Rh
3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定
*/