javaweb开发核心之玩转Servlet4.0-xdclass

2020年9月29日03:08:25 by ddhhdd

Servlet是JavaServlet的简称,用Java编写的运行在Web服务器或应用服务器上的程序,具有独立与平台和协议的特性,主要功能在于交互式地浏览和生成动态Web内容。

作用:接收用户通过浏览器传来的表单数据,或者读取数据库信息返回给浏览器看,创建动态网页(发起请求,响应内容

package javax.servlet
public interface Servlet {
}

有两个常见的子类:HttpServletGenericServlet

javaWeb Servlet文档:https://tomcat.apache.org/tomcat-9.0-doc/servletapi/index.html

学习javaWeb更多的是学习里面的类和对象怎么用(即上面文档,多做笔记)

Servlet HelloWorld 程序

  1. 创建class,继承HttpServlet
  2. 重写doGet()方法,返回HTML内容

  • UserServlet
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>hello,dawson.学习javaWeb中...</div>");
    }
}
  • 配置web.xml
<servlet>
    <servlet-name>userServlet</servlet-name>
    <servlet-class>com.ddhhdd.web.UserServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>userServlet</servlet-name>
    <url-pattern>/userServlet</url-pattern>
</servlet-mapping>
  • 启动Tomcat进行访问

Servlet里面的doGet和doPost

doGet()方法

  • http用Get方式提交的请求,普通的查询就会进入到此方法

doPost()方法

  • http用post方式提交的请求就会进入到此方法

还有其他的doHead()doDelete()等方法,都是根据http提交的Method来区分;

  • Servlet访问URL使用路径映射(注意:一定要加/开头
    • url-pattern:以/开头,可用/xx/yy来区分模块,*是通配符,最好用模块区分

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();
}
  • Servlet接口里面有5个方法,其中三个生命周期方法和两个普通方法
    • 实例化 -> 使用构造方法创建对象
    • 初始化 -> 执行init()方法:Servlet的生命周期中,仅执行一次init方法,它是服务器装入Servlet时执行的,即第一次访问这个Servlet才执行
    • 服务 -> 执行service()方法:service方法是Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service方法就要被调用
    • 销毁 -> 执行destroy()方法:destroy方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法

新版Servlet3.0-5.0和旧版配置的区别

旧版Servlet,在xml里面配置servlet-class和url-pattern,比较不方便;新版Servlet3.0+支持注解的方式

@WebServlet(name = "userServlet", urlPatterns = {"/user1","/user2","/test"})
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 响应内容
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter printWriter = resp.getWriter();
        printWriter.write("<div>hello,dawson.学习javaWeb中...</div>");
    }
}

自己测试访问userServlet报404错误,未解决(这个只是个名字name of the Servlet,2020年10月3日00:47:14-ddh);访问/user1等则可成功(array of URL patterns to which this Filter applies则会被拦截)

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    //servlet名称,若不指定,则为Servlet的完整类名
    String name() default "";

    //路径映射,配置多个,需要/开头
    String[] value() default {};

    //路径映射,支持配置多个,需要/开头
    String[] urlPatterns() default {};

    //标记容器是否在启动应用时就加载Servlet,默认或数值为负数时表示第一次请求Servlet时再加载;0或正数表示启动应用就加载
    int loadOnStartup() default -1;

    //配置初始参数
    WebInitParam[] initParams() default {};

    //是否⽀支持异步操作模式
    boolean asyncSupported() default false;
}
posted @ 2020-09-28 20:46  ddhhdd  阅读(160)  评论(0)    收藏  举报