一个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++;
}
}
...全文
258 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() 不会因为你重写了就改变执行顺序的
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

81,111

社区成员

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

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