📄 controlservlet.java
字号:
package cn.netjava.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import cn.netjava.action.Action;
import cn.netjava.factory.ActionFactory;
/**
* 系统控制器实现
*/
public class ControlServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
request.setCharacterEncoding("GB18030");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
// 1.解析请求中的命令名
String actionName = getActionName(request);
// 2.根据请求的命令名调用工厂对象创建命令处理对象
// 根据请求的动作名,得到控制器servlet中配置的Action实现类名字
String actionClassName = this.getInitParameter(actionName);
Action action = ActionFactory.getIns().getAction(actionClassName);
// 3.调用命令对象处理请求和应答对象,返回目标路径名
String url = action.execute(request, response);
// 4.本控制器将请求和应答转发至目标路径名
if ( null != url) {
getServletContext().getRequestDispatcher(url).forward(request, response);
}
} catch (Exception e) {
request.getRequestDispatcher("/error.jsp").forward(request, response);
e.printStackTrace();
}
}
// 得到请求的命令名字:解析出*.netjava请求中*所指代的字符串,即动作名字
private String getActionName(HttpServletRequest request) {
String path = request.getServletPath();
return path.substring(1, path.lastIndexOf("."));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -