1.控制器作用?
可以处理多个action。
代码:
1.controller层
package com.gxa.bj.controller;
import java.io.IOException;
import java.util.HashMap;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gxa.bj.action.IActionHandller;
import com.gxa.bj.util.XmlHelper;
public class DispaterController extends HttpServlet
{
private HashMap<String,IActionHandller> hashMap =new HashMap<String,IActionHandller>();
@Override
public void init() throws ServletException {
hashMap=XmlHelper.getData();
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String path = req.getRequestURI().toString();//获得路径
String actionName=path.substring(path.lastIndexOf("/")+1);//获得Action名字
Set<String> keySets= hashMap.keySet();//获得键名
IActionHandller actionHandler =null;//多态
for(String s:keySets)//
{
if(s.equals(actionName))//如果s等于获取的路径名
{
actionHandler=hashMap.get(s);// 这个多态就等于相应的键名对应的类
break;
}
}
if(actionHandler!=null)//如果不为空表示赋过值
{
String Handlerpath = actionHandler.handller(req, resp);//获取处理相应的Action所获取的路径
if(Handlerpath!=null)
{
req.getRequestDispatcher(Handlerpath).forward(req, resp);//跳到相应的路径
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req,resp);
}
}
2.处理请求的接口
package com.gxa.bj.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 定义了一个处理请求的接口
* @author Administrator
*
*/
public interface IActionHandller {
public String handller(HttpServletRequest req, HttpServletResponse resp);
}