第三次课
正确的代码顺序(见注释)
// first declare package
package io.github.medioqrity;
// second import native packages
import java.util.*;
import java.io.*;
// third import Java EE packages
import javax.servlet.*;
import javax.servlet.http.*;
// 3rd party packages
import org.apache.struts.action.*;
// your packages
import io.github.medioqrity.somepackage;
// your classes
public class HelloServlet extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// ...
}
}
其中HttpServlet
是适配器类,这样就不用像这样把所有接口方法都实现了:
public class SampleServlet implements Servlet {
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
// ...
}
@Override
public void service(...) {
// ...
}
}
要记住init()
方法的参数,考试要考。
当然,在HttpServlet中,从private ServletConfig ...
到public void init()
都已经被写好了。
初始化数据库连接的话,在public void init()
中进行初始化,不要覆盖public void init(ServletConfig config)
。否则不要忘记super.init()
使用public void service()
分发各种请求:
public class SampleServlet extends HttpServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest hreq = (HttpServletRequest) req;
HttpServletResponse hres = (HttpServletResponse) res;
method = res.getMethod();
if ("GET".equals(method)) {
doGet(hreq, hres);
} else if ("POST".equals(method)) {
doPost(hreq, hres);
}
}
}
还是不太清楚public void service()
与default void service()
的区别
关于为什么不要使用out.close();
注意PrintWriter out = response.getWriter()
,显然这个PrintWriter
并不是你创建的:它只是一个引用。
所以自然应该是HttpServletResponse类会负责将它关闭。
Tomcat应用程序发布
- tomcat manager
- 待补充
websocket & sse
- websocket -> 双工
- sse -> 服务器单向往客户端
websocket + sse = 服务器端到客户端
使用Annotation