Servlet基础(笔记)

0.纯手工写的第一个Servlet类(Eclipse工具)

  1. 编写一个类,继承HttpServlet
  2. 重写里面的doGet(),doPost()方法
  3. 编写web.xml里的Servlet映射关系

Servlet类---->WelcomeServlet

public class WelcomeServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	System.out.println("doget");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		this.doGet(req, resp);
	}
}

网页代码只有body部分:index.jsp

<body>
<a href="WelcomeServlet">WelcomeServlet</a>
<!--超链接默认get  -->
<!--表单默认get  -->
<form action="WelcomeServlet" method="post">
<input type="submit">
</form>
</body>

Web.xml添加的代码

  <servlet>
    	<servlet-name>WelcomeServlet</servlet-name>
    	<servlet-class>org.lianqiao.servlet.WelcomeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    	<servlet-name>WelcomeServlet</servlet-name>
    	<url-pattern>/WelcomeServlet</url-pattern>
  </servlet-mapping>

项目结构:在这里插入图片描述

01. Servlet流程(xml):

  • 请求-----> url-patting
  • url-patting根据 servlet-mapping 里的 servlet-name 去匹配 servlet 中的 servlet-name
  • 匹配成功,然后找到对应的 servlet-class,将请求交给servlet-class执行

servlet-name 一般用对应类名,一对之间要相同
url-patting里是 请求前加 /
在这里插入图片描述

02. Servlte类规范

Java类必须符合一定的 规范:

  • 必须继承 javax.servlet.http.HttpServlet
  • 重写其中的 doGet()或doPost()方法

doGet(): 接受 并处理 所有get提交方式的请求
doPost():接受 并处理 所有post提交方式的请求

1. / 符号的作用,项目根目录

  • 项目根目录WebConcent, src(所有的构建路径,构建路径可以是多个的,不止一个src,可以通过Sorce Folder新建)
    例如:
    Webconcent中有一个文件index.jsp(目录下直接有一个文件)
    ser中有一个Servlet.java
  • 如果:index.jsp中请求 <a href="abc">...</a> ,则 寻找范围:既会在src根目录中找 也会在WebContent根目录中找
  • 如果:index.jsp中请求<a href="a/abc"></a>,寻找范围:先在src或WebContent中找a目录,然后再在a目录中找abc
  • ** / 代表的功能 **:
  • web.xml中的 /:代表项目根路径 http://localhost:8080/Servlet2.5Project/
  • == jsp中的/==: 服务器根路径(返回上一级) http://localhost:8080/

2.自动生成Servlte

借助于Eclipse快速生成Servlet
直接新建Servlet即可!(继承、重写、web.xml 可以借助Eclipse自动生成)


一.Servlte2.5与Servlte3.0

  • Servlte2.5 要在web.xml中配置(自动生成的类在web.xml中已经配置好)
  • Servlet3.0不需要在web.xml中配置,但 需要在 Servlet类的定义处之上编写 注解@WebServlet(“url-pattern的值”)
  • Servlet3.0匹配流程:请求地址 与@WebServlet中的值 进行匹配,如果匹配成功 ,则说明 请求的就是该注解所对应的类

Servlet3.0:

@WebServlet("/WelcomeServlet")
public class WelcomeServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("3.0");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("3.0");
	}
}

在新建项目时,可以选择不同的Servlte版本,这样自动生成的Servlte类就会不同:
在这里插入图片描述

二. Servlet生命周期:五个阶段

Servlet接口(系统):

package javax.servlet;

public interface Servlet {
    void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;

    javax.servlet.ServletConfig getServletConfig();

    void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;

    java.lang.String getServletInfo();

    void destroy();
}

在这里插入图片描述

  1. 加载
  2. 初始化 :init() ,该方法会在Servlet被加载并实例化的以后执行
  3. 服务:service()–>doGet(),doPost()
  4. 销毁:destroy(), Servlet被系统回收时执行
  5. 卸载
    加载,卸载Servlet()容器自动处理
@WebServlet(value = "/Servlet1" ,loadOnStartup = 1)
//   默认 loadOnStartup 是-1
public class Servlet1 extends HttpServlet {
    @Override
//    初始化
    public void init() throws ServletException {
        System.out.println("-----------Servlet1初始化");
    }
//   销毁,点击Run里的关闭服务器,在Eclipse里要关闭Servers里的,不是console里的(直接停止程序)
    @Override
    public void destroy() {
        System.out.println("============销毁");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("----------------service()");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

注意:

  • init(): 只执行一次
  • service ->doGet(),doPost():调用几次,则执行几次
    public abstract void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;
  • destroy():关闭tomcat服务时,执行一次

init()

a. 默认第一次访问 Servlet时会被执行 (只执行这一次)
b. 可以修改为 Tomcat启动时自动执行, 默认 loadOnStartup 是-1
	i.Servlet2.5:  web.xml
		     <servlet>
			  ...
			 <load-on-startup>1</load-on-startup>
			 </servlet>
		其中的“1”代表一个比较数字。(应该是按照由小到大顺序初始化)
	ii.Servlet3.0
		@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1  )
		当有多个Servlet 时,顺序要不相同,几个Servlet初始化顺序,虽然没有发现相同时出现什么错误!(0,1,2,3....)
@WebServlet(value = "/WelcomeServlet" ,loadOnStartup = 0)
public class WelcomeServlet extends HttpServlet {
    public void init() throws ServletException {
        System.out.println("-----------WelcomeServlet初始化");
    }
}
@WebServlet(value = "/Servlet1" ,loadOnStartup = 1)
//   默认 loadOnStartup 是-1
public class Servlet1 extends HttpServlet {
    @Override
//    初始化
    public void init() throws ServletException {
        System.out.println("-----------Servlet1初始化");
    }
}

启动Tomcat(部分代码):

一月 17, 2020 1:42:11 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 85 ms
Connected to server
[2020-01-17 01:42:11,975] Artifact WebServlet:war exploded: Artifact is being deployed, please wait...
一月 17, 2020 1:42:12 下午 org.apache.catalina.deploy.WebXml setVersion
警告: Unknown version string [4.0]. Default version will be used.
-----------WelcomeServlet初始化
-----------Servlet1初始化
[2020-01-17 01:42:12,437] Artifact WebServlet:war exploded: Artifact is deployed successfully
[2020-01-17 01:42:12,437] Artifact WebServlet:war exploded: Deploy took 462 milliseconds
发布了22 篇原创文章 · 获赞 2 · 访问量 773

猜你喜欢

转载自blog.csdn.net/qq_43542795/article/details/103843943
今日推荐