JavaWeb——Servlet

Servlet:

Java类必须符合一定的规范

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

 

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


Servlet要想使用,必须配置
Serlvet2.5:web.xml
Servle3.0: @WebServlet


Serlvet2.5:web.xml:

项目的根目录:WebContent 、src

<a href="WelcomeServlet">所在的jsp是在 WebContent目录中,因此 发出的请求WelcomeServlet  是去请求项目的根目录。

Servlet流程:
请求 -><url-pattern> -> 根据<servlet-mapping>中的<servlet-name> 去匹配  <servlet> 中的<servlet-name>,然后寻找到<servlet-class>,求中将请求交由该<servlet-class>执行。

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
		<a href="WelcomeServlet">WelcomeServlet</a><br/>
		<form action="/WelcomeServlet" method="post">
			<input type="submit" >
		</form>
</body>
</html>

WelcomeServlet

package b1;


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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 {
		//System.out.println("doPost...");
		this.doGet(req, resp);
	}
	
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
  		<servlet-name>WelcomeServlet</servlet-name>
  		<servlet-class>b1.WelcomeServlet</servlet-class>
  </servlet>
  
  
  <servlet-mapping>
  		<servlet-name>WelcomeServlet</servlet-name>
  		<url-pattern>/WelcomeServlet</url-pattern>
  </servlet-mapping>

</web-app>

2个/:
jsp:/  localhost:8888
web.xml: /   http://localhost:8888/项目名/

1.回顾纯手工方法创建第一个Servlet

步骤:

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

2.借助于Eclipse快速生成Servlet


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

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

3.   /

项目根目录:WebContent、src(所有的构建路径)
例如:
WebContent中有一个文件index.jsp
src中有一个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:8888/Servlet25Project/
  • jsp中的/: 服务器根路径——————http://localhost:8888/

构建路径、WebContent:根目录

4.Servlet生命周期:5个阶段 

  • 加载
  • 初始化: init()  ,该方法会在 Servlet被加载并实例化的以后 执行
  • 服务  :service() ->doGet()  doPost
  • 销毁  :destroy(),  Servlet被系统回收时执行
  • 卸载

init():

                 a.默认第一次访问 Servlet时会被执行 (只执行这一次
                 b.可以修改为 Tomcat启动时自动执行
                     i.Servlet2.5:  web.xml
                          <servlet>
                                        ...
                               <load-on-startup>1</load-on-startup>
                            </servlet>
                         其中的“1”代表第一个。
                    ii.Servlet3.0
                        @WebServlet( value="/WelcomeServlet" ,loadOnStartup=1  )


service()

->doGet()  doPost :调用几次,则执行几次

destroy()

关闭tomcat服务时,执行一次

package org.lanqiao.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WelcomeServlet extends HttpServlet{
	
	@Override
	public void init() throws ServletException {
		System.out.println("init...");
		//获取当前Servlet的初始化参数
		String value = super.getInitParameter("servletparamname") ;
		System.out.println("当前Servlet的参数servletparamname的值是:"+value);
		//获取当前Web容器的初始化参数
		
		ServletContext servletContext = super.getServletContext() ;
		String globalValue = servletContext.getInitParameter("globalParam") ;
		System.out.println("当前Web容器的 参数globalValue的值是:"+globalValue);
		
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy....");
	}
	
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("service的具体实现(doGet...doPost..)...");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//System.out.println("doPost...");
		this.doGet(req, resp);
	}
	
}


5 Servlet API :

由两个软件包组成: 对应于HTTP协议的软件包、对应于除了HTTP协议以外的其他软件包
即Servlet  API可以适用于 任何 通信协议。 
我们学习的Servlet,是位于javax.servlet.http包中的类和接口,是基础HTTP协议。

6.Servlet继承关系

ServletConfig:接口 

  • ServletContext getServletContext():获取Servlet上下文对象   application
  • String  getInitParameter(String name):在当前Servlet范围内,获取名为name的参数值(初始化参数)

     a.ServletContext中的常见方法(application):

  • getContextPath():相对路径
  • getRealPath():绝对路径
  • setAttribute() 、getAttribute()
  • String getInitParameter(String name);在当前Web容器范围内,获取名为name的参数值(初始化参数)

Servlet3.0方式 给当前Servlet设置初始值:
@WebServlet( .... , initParams= {@WebInitParam(name="serveltparaname30",value="servletparavalue30")   }   )
注意,此注解只 隶属于某一个具体的Servlet ,因此无法为 整个web容器设置初始化参数 (如果要通过3.0方式设置 web容器的初始化参数,仍然需要在web.xml中设置)

HttpServletRequest中的方法:(同request),例如setAttrite()、getCookies()、getMethod()
HttpServletResponse中的方法:同response

Servlet使用层面:

注1:Eclipse中在src创建一个Servlet,然后重写doGet()  doPost()就可以  (doGet() doPost()只需要编写一个)。

注2:接口类空实现:实现类只需要重写需要的方法,不使用的不需要重写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet 是 JavaEE 规范中的一部分,是处理 Web 请求的组件。Servlet 运行在服务器端,能够接收客户端发来的请求,并给客户端响应结果。下面我们来看看 Servlet 的基本概念和使用方法。 ## 一、Servlet 的基本概念 ### 1.1 Servlet 的生命周期 Servlet 的生命周期包含以下三个阶段: - 初始化阶段(init):当 Servlet 实例化后,Web 容器会调用其 init() 方法进行初始化操作。在此阶段,Servlet 可以执行一些初始化操作,例如读取配置信息、建立数据库连接等。 - 请求处理阶段(service):当客户端发来请求时,Web 容器会创建一个线程调用 Servlet 的 service() 方法处理请求。在此阶段,Servlet 可以获取请求参数、处理请求并生成响应数据。 - 销毁阶段(destroy):当 Web 应用停止或 Servlet 被卸载时,Web 容器会调用 Servlet 的 destroy() 方法进行清理工作。在此阶段,Servlet 可以释放资源、关闭数据库连接等。 ### 1.2 Servlet 的配置 在使用 Servlet 时,需要在 web.xml 文件中进行配置。以下是一个 Servlet 的基本配置: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 其中,servlet-name 表示 Servlet 的名称,servlet-class 表示 Servlet 的类名,url-pattern 表示请求的 URL 匹配规则。 ## 二、Servlet 的使用方法 ### 2.1 编写 Servlet 编写 Servlet 有两种方法:一种是继承 HttpServlet 类,另一种是实现 Servlet 接口。这里以继承 HttpServlet 类为例: ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 GET 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } } ``` 在 Servlet 中,doGet() 方法用于处理 GET 请求,doPost() 方法用于处理 POST 请求。通过调用 HttpServletResponse 对象的 getWriter() 方法可以向客户端返回响应数据。 ### 2.2 部署 Servlet 将编写好的 Servlet 部署到 Web 容器中,有两种方法:一种是将 Servlet 类打成 war 包放到 Web 容器的 webapps 目录下,另一种是通过 Eclipse 等开发工具将 Servlet 部署到 Web 容器中。部署完成后,可以通过访问 Servlet 的 URL 来测试 Servlet 是否正常工作。 ## 三、总结 本文介绍了 Servlet 的基本概念和使用方法。Servlet 是 Java Web 开发中非常重要的组件,掌握 Servlet 的使用方法对于 Java Web 开发人员来说是必不可少的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值