原因:
1,继承自httpservlet的servlet没有重写对于请求和响应的处理方法:doget或dopost等方法;默认调用父类的doget或dopost等方法;
2,父类httpservlet的doget或dopost等方法覆盖了你重写的doget或dopost等方法;
不管是1或2,父类httpservlet的doget或dopost等方法的默认实现是返回状态代码为405的http错误表示对于指定资源的请求方法不被允许。
解决方法:
1,子类重写doget或dopost等方法;
2,在你扩展的servlert中重写doget或dopost等方法来处理请求和响应时不要调用父类httpservlet的doget或dopost等方法,即去掉super.doget(request, response)和super.dopost(request, response);
值得注意的是
转发到另一个action并不会改变转发方式,也就是说,我在这个action里面的dopost方法转发给另一个action,另一个action必须在它的dopost方法里面接收
package com.xy.action;
import java.io.ioexception;
import java.text.simpledateformat;
import javax.servlet.requestdispatcher;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import com.xy.dao.itopicdao;
import com.xy.dao.impl.topicdaoimpl;
import com.xy.entity.topic;
public class postaction extends httpservlet
{
protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception
{
itopicdao itd = new topicdaoimpl();
string title = request.getparameter("title");
string content = request.getparameter("content");
string pt = new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new java.util.date());
string mt = new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new java.util.date());
int bid = integer.valueof(request.getparameter("boardid"));
int uid = integer.valueof(request.getparameter("uid"));
topic t = new topic();
t.settitle(title);
t.setboardid(bid);
t.setcontent(content);
t.setpublishtime(pt);
t.setmodifytime(mt);
t.setuid(uid);
itd.addtopic(t);
requestdispatcher dis = request.getrequestdispatcher("tolistaction");
dis.forward(request, response);
}
}
也就是说:相应在tolistaction这个action里面,必须重写dopost方法。