一个sevlet的例子,调试跟踪的时候出了问题

qwa 2017-12-04 09:46:28
我记得看到的资料都说,调用servlet的时候,会进入HttpServlet中,然后用public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException来判断method方法,然后根据方法调用doGet和doPost,但是我在跟踪调试的时候,却发现,竟然是先进入doGet或者doPost,然后才进入Service,并且在 Service的if语句中就跳出了,并进入了NoBodyResponse的setHeader,不知道怎么回事。请高手给解释解释。是不是配置有问题?我用的的是idea16 + maven
if (!(req instanceof HttpServletRequest &&
res instanceof HttpServletResponse)) {
throw new ServletException("non-HTTP request or response");
}

以下是我的代码
/**
* Created by ShenLiang on 2017/11/30.
*/
package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class FirstServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private int serial = 0;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.log("序号:"+serial + "======doGet");
serial++;
execute(req,resp);
}

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.log("序号:"+serial + "======doPost");
serial++;
execute(req,resp);
}

private void execute(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");

String requestURI = req.getRequestURI();

String method = req.getMethod();

String param = req.getParameter("param");
resp.setContentType("text/html");

PrintWriter out = resp.getWriter();

//输出到客户端浏览器
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" 以 " + method + " 方式访问该页面。取到的 param 参数为:" + param + "<br/>");

out.println(" <form action='" + requestURI + "' method='get'><input type='text' name='param' value=''><input type='submit' value='以 GET 方式访问 RequestServlet'></form>");
out.println(" <form action='" + requestURI + "' method='post'><input type='text' name='param' value=''><input type='submit' value='以 POST 方式访问 RequestServlet'></form>");

// 由客户端浏览器读取该文档的更新时间
out.println(" <script>document.write('本页面最后更新时间:' + document.lastModified + '<br />'); </script>");
out.println(" <script>document.write('本页面URL:' + location + '<br/>' ); </script>");

out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

@Override
protected long getLastModified(HttpServletRequest req) {
this.log("序号:" + serial + "======getLastModified");
serial++;
return 1;
}

@Override
public void init() throws ServletException {
this.log("序号:"+serial + "======init()");
serial++;
}

@Override
public void destroy() {
this.log("序号:" + serial + "======destroy()");
serial++;
}
}
...全文
266 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwa 2017-12-04
  • 打赏
  • 举报
回复
奇怪的是,我重写service方法后,倒是正常了,不明其因
qwa 2017-12-04
  • 打赏
  • 举报
回复
引用 1 楼 yanghaimingg 的回复:
没看到你重写的service方法,默认调用的是httpServlet的service方法,由它负责调用你写的servlet的doget或者dopost方法
我没有重写service方法,但我在调试的时候,进入的是HttpServlet的,结果却是doGet和doPost在先,不知道是怎么回事。
mtian2020 2017-12-04
  • 打赏
  • 举报
回复
没看到你重写的service方法,默认调用的是httpServlet的service方法,由它负责调用你写的servlet的doget或者dopost方法
自由自在_Yu 2017-12-04
  • 打赏
  • 举报
回复
引用 3 楼 qwa 的回复:
奇怪的是,我重写service方法后,倒是正常了,不明其因
你不重写,执行的是父类HttpServlet类中的service()方法,重写的话就是执行当前类的service() 不会因为你重写了就改变执行顺序的
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在当前的大学生活场景中,众多学生倾向于待在寝室,借助外卖服务解决日常饮食需求,却往往忽略了健康的早餐摄入和必要的体育锻炼。为了修正这种生活方式,我们研发了一款名为“校园外卖的微信小程序”的应用,其核心目标在于鼓励学生离开寝室,深度融入校园生活。这款微信小程序的推,根植于对改善大学生生活习惯的深切关注。我们明确意识到,虽然外卖服务带来了极大的便利,但长期依赖可能对学生的身体健康造成负面影响,而缺乏体育锻炼同样可能引发一系列健康隐患。基于此,我们确立了一个双重目标,即设计一款既能提供高效便捷服务,又能激发学生参与活动的应用程序。 小程序的设计理念将校园视为中心,致力于提供丰富的服务选项。它不仅涵盖了传统的外卖订餐服务,还特别突了本地化特色和健康饮食理念,例如,与校内食堂建立合作关系,积极推广营养早餐,使学生能够在享受便捷服务的同时,确保摄入健康食品。我们创新性地引入了“走步积分”系统,旨在鼓励学生在取餐或用餐后进行适度步行,通过积累的积分可以兑换优惠券或参与校园组织的各类活动。除此之外,小程序还整合了校园内的体育活动资讯,例如健身房开放时段、体育课程报名信息等,旨在提升学生参与体育活动的热情。 : 1. **外卖服务**:作为小程序的核心功能之一,它支持用户在线订购校内外各式美食,通过与校内食堂的紧密合作,确保提供安全且营养均衡的餐品。 2. **校园服务**:该小程序专注于服务大学校园环境,关注学生群体的特定需求,如健康饮食推广、运动激励机制等,同时提供详尽的校园活动信息。 3. **小程序应用**:作为微信平台上的轻量级应用,用户无需下载安装即可便捷使用,符合移动互联网时...

81,108

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧