最近开始学习structs 和hibernate,陆续将心得放上来。structs 用的版本是1。2
首先,留意到的是org.apache.structs.action.RequestProcessor类,其中真正包含了控制器在处理servlet请求时的控制逻辑。ActionServlet就是通过调用RequestProcessor对象的process()方法,来请求客户端请求。
其中的proessPreprocess()方法,默认不执行任何操作,开发人员可以在这里进行一些相关的操作,并且扩展RequestProcessor类。比如,可以拒绝非法IP请求,这时重写proessPreprocess()方法,如下:
package kuozhan;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
import org.apache.struts.config.ForwardConfig;
import org.apache.commons.logging.Log;
public class MyRequestProcessor extends RequestProcessor {
public MyRequestProcessor() {}
protected boolean processPreprocess( HttpServletRequest request,
HttpServletResponse response ){
boolean continueProcessing = true;
// Get the name of the remote host and log it
String remoteHost = request.getRemoteHost( );
log.info( "Request from host: " + remoteHost );
// Make sure the host is from one that you expect
if (( remoteHost == null || !remoteHost.startsWith( "127."))){
// Not the localhost, so don't allow the host to access the site
continueProcessing = false;
try{
response.sendRedirect( error.jsp");
}catch( Exception ex ){
log.error("Problem sending redirect from processPreprocess()") ;
}
}
return continueProcessing;
}
}
上面将凡是不是从本地计算机发出的请求,看作错误处理,并记录在日志上。
注意扩展requestprocessor类时,最后要在struct-config.xml中加入<controller>元素,如下
<controller processorClass="kuozhan.example"/>