javaweb开发核心之玩转Servlet4.0
什么是Servlet 开发第一个动态网站
介绍Servlet 开发动态网站
什么是Servlet
创建第一个Servlet程序
- 步骤
- 创建calss,继承
HttpServlet
- 重写
doGet
方法,返回HTML内容 - 配置web.xml信息
- 启动tomcat,进行访问
- 源代码
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div>你好,世界</div>");
}
}
<servlet>
<servlet-name>userServlet</servlet-name>
<servlet-class>net.xdclass.web.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
Servlet里面的doPost-doGet和路径匹配讲解
doGet方法
- http用get方式提交的请求,普通的查询就会进入到此方法
doPost方法
- http用post方式提交的请求会进入到此方法
- postma工具
- 作用:专门用来模拟Http多种方式提交的工具,开发测试必备利器
- 安装包直接安装使用
- 选择post方式提交
- 还有其他的doHead、doDelete等,一样的都是根据http提交Method来区分
- Servlet访问URL使用路径映射(注意:一定要加
/
开头)
- url-pattern:以""开头,可以用/xxx/yy来区分模块,*是通配符,最好用模块区分,防止通配符都映射成但不同优先级导致问题
【原理面试题】Servlet生命周期知多少
讲解Servlet的生命周期
Servlet 接口里面有5个方法,其中三个生命周期方法和两个普通方法
- 实例化->使用构造方法创建对象
- 初始化->执行init方法:Servlet的生命期中,仅执行一次
init()
方法,它是在服务器装入Servlet时执行的,即第一次访问这个Servlet才执行 - 服务>执行service方法,service()方法是Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用
- 销毁->执行destroy方法,destroy()方法仅执行一次,即在服务器停止且卸装 Servlet时执行该方法
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws
ServletException, IOException;
String getServletInfo();
void destroy();
}
- 查看继承和实现关系XXXServlet->HttpServlet->GenericServlet->implements Servlet
- HttpServlet里面实现了service方法,里面会根据不同的http method调用不同的方法,所以我们自定义servlet只要重写对应的doXXX方法即可
新版Servlet3.0~5.0
新版Servlet和旧版Servlet配置的区别
旧版Servlet,在xml里面配置类目和路径,比较不方便
新版Servelt,也就是3.0之后,支持注解的方式
@WebServlet(name = "userServlet",urlPatterns = {"/user"})
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet");
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div> doGet 你好世界</div>");
}
}
配置项
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;