Java Servlet

Web 服务器 - Tomcat

1.本地选择 速度较慢

2.插件

<build> 
    <plugins>    
    <!--Tomcat 插件--> 
        <plugin>      
        <groupId>org.apache.tomcat.maven</groupId> 
<artifactId>tomcat7-maven-plugin</artifactId>   
<version>2.2</version>     
</plugin>
</plugins>
</build>

右键run maven进行启动

<configuration>
  <port>80</port>
  <path>/</path>
</configuration>

port修改端口 path/项目访问路径不用写

3.IDEA中创建 Maven Web项目

  1. 选择web项目骨架,创建项目 maven-archetype-webapp

  2. 删除pom.xml中多余的坐标

  3. 补齐缺失的目录结构 java和resources

Servlet

Servlet 是 Java提供的一门动态web资源开发技术

1. Servlet快速入门

1.1创建 web项目,导入 Servlet依赖坐标

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.1.0</version>
   <scope>provided</scope>
 </dependency>

1.2创建:定义一个类,实现 Servlet接口,并重写接口中所有方法,并在 service方法中输入一句话

public class ServletDemo1 implements Servlet {

public void service(){}

}

1.3问:启动 Tomcat,浏览器输入URL 访问该Servlet

2. Servlet 执行流程

2.1 Servlet 由谁创建?Servlet方法由谁调用?

Servlet由tomact里面的web服务器创建,Servlet方法由web服务器调用。

2.2服务器怎么知道Servlet中一定有service方法?

因为我们自定义的Servlet,类必须实现Servlet接口并复写其方法,而Servlet接口中有service方法

3. Servlet 生命周期

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:

1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象 init方法

(@WebServlet(urlPatterns = “/demo”,
loadOnStartup = 1)①负整数:第一次被访问时创建Servlet对象

②0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高)

2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。

4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

package com.nanci.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

    //servlet接口
@WebServlet(urlPatterns = "/demo2", loadOnStartup = 1)
public class ServletDemo2 implements Servlet {
    //初始默认被第一次访问只调用 1次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
    }
    //提供服务每一次service被访问时调用多次
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet hello world");
    }
    //销毁 在service销毁 内存释放 服务器关闭 释放资源1次 tomcat正常关闭才能调用
    @Override
    public void destroy() {
        System.out.println("destroy");
    }
    //获取ServletConfig对象
    @Override
    public String getServletInfo() {
        return null;
    }
    //获取Servlet信息
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

4. Servlet 体系结构

package com.nanci.web;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyHttpServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
     //根据请求方式不同分别处理
        HttpServletRequest request = (HttpServletRequest)req;
       String method = request.getMethod();
        //判断
        if("GET".equals(method)){
            //get
            doGet(req,res);
        }else if ("POST".equals(method)){
            //post
            doPost(req,res);
        }

    }

    protected void doPost(ServletRequest req, ServletResponse res) {
    }

    protected void doGet(ServletRequest req, ServletResponse res) {
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
package com.nanci.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebServlet("/demo5")
public class ServletDemo5 extends  MyHttpServlet{
    @Override
    protected void doGet(ServletRequest req, ServletResponse res) {
        super.doGet(req, res);
        System.out.println("get///");
    }

    @Override
    protected void doPost(ServletRequest req, ServletResponse res) {
        super.doPost(req, res);
        System.out.println("post///");
    } 
}

4.1 HttpServlet 使用步骤

①继承HttpServlet

②重写doGet和doPost方法

4.2 HttpServlet原理

获取请求方式,并根据不同的请求方式,调用不同的doXxx方法

5. Servlet urlPattern配置

5.1 Servlet 要想被访问,必须配置其访问路径(urlPattern)

一个Servlet,可以配置多个 urlPattern

5.2 urlPattern 配置规则

精确匹配(/user/selvlet) >目录匹配(/user/) >扩展名匹配(.do) >任意匹配(/ )

6. XML 配置方式编写 Servlet

Servlet 从3.0版本后开始支持使用注解配置,3.0版本前只支持 XML 配置文件的配置方式

6.1 编写 Servlet类

6.2 在 web.xml中配置该Servlet

<web-app>
  <servlet>
  <servlet-name>demo8</servlet-name>
  <servlet-class>com.nanci.web.ServletDemo8</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo8</servlet-name>
    <url-pattern>/demo8</url-pattern>
  </servlet-mapping>
</web-app>

麻烦没有用注解简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张南辞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值