java框架001——servlet

一、servlet定义

一种独立于操作系统和网络传输协议服务器端的Java应用程序
作用:用来拓展服务器的功能,可以生成动态的web页面

即:
1、Serviet是JavaEE规范之一。规范就是接口
2、Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
3、Servlet是运行在服务器上的一个 java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载 ;(没有main方法)

二、Servlet工作原理

在这里插入图片描述

三、Servlet容器

Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器。
目前最流行的Servlet容器软件包括:
-Tomcat
-Resin
-J2EE服务器(如Weblogic)中也提供了内置的Servlet容器

四、Servlet编程——Servlet编程API、Servlet接口、HttpServlet

4.1、Servlet编程API(中文说明文档

在这里插入图片描述

五、附:统一资源定位符 URL

5.1、URL 的一般形式

由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。
URL 的一般形式是:(主机部分可以是IP地址或者域名,如果是域名的话,域名最终会被域名服务器解析成IP地址)
在这里插入图片描述

六、第一个Servlet

6.1、使用直接实现servlet方式

通过实现Servlet接口创建一个Servlet步骤:
1、编写一个类实现Servlet接口(API Specifications)
2、通过Service()方法处理请求并响应数据,完成Hello World!
3、通过web.xml注册Servlet,并配置servlet的访问地址
4、运行测试
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HelloWorld.java

package com.dgut.javaweb;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloWorld implements Servlet {

	@Override
	public void destroy() {
		return;
	}

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

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

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		return;
	}

	/* service方法是运行业务逻辑的地方 */
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		res.getWriter().println("Hello World!(com.dgut.javaweb.HelloWorld)");
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
	id="WebApp_ID" version="4.0">
  <display-name>javaweb001</display-name>
  
  <!-- 使用servlet标签,向servlet容器注册servlet -->
  <servlet>
  	<servlet-name>helloWorld</servlet-name><!-- 给指定的servlet取名 -->
  	<servlet-class>com.dgut.javaweb.HelloWorld</servlet-class>
  </servlet>
  
  <!-- 使用servlet-mapping标签,将上面注册的servlet和url关联,客户端用户访问url的时候就可以知道访问的是那个servlet -->
  <servlet-mapping>
  	<servlet-name>helloWorld</servlet-name>
  	<url-pattern>/hello</url-pattern><!-- 当前运用根目录下的hello,即“/”表示根目录http://localhost:8080/javaweb001 -->
  </servlet-mapping>
</web-app>

hello.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="hello">Hello World默认当前html和javaweb001同级</a><!-- 这种写法默认当前html和javaweb001同级 -->
	<br>
	<!-- html中的"/"表示当前tomcat的根目录http://localhost:8080 -->
	<a href="/hello">Hello World错误写法</a><!-- 错误写法 -->
	<br>
	<a href="/javaweb001/hello">Hello World正确写法</a><!-- 正确写法 -->
</body>
</html>

运行结果
在这里插入图片描述

6.1.1、xml和.html文件中的“/”的区别说明

在这里插入图片描述
在这里插入图片描述

6.1.2、Servlet映射的细节

  • 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
  • 在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:
    1、一种格式是*.扩展名
    2、另一种格式是以正斜杠(/)开头并以/*结尾。
    在这里插入图片描述
6.1.2.1、*.do例子

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.1.2.2、/*例子(可用于权限控制,或者登录没有权限时跳转到指定页面)

在这里插入图片描述
在这里插入图片描述

七、servlet的常用方法

7.1、servlet的生命周期方法

Servlet生命周期分为三个阶段:初始化阶段、响应客户请求阶段、终止阶段,其具体操作如下图所示:
在这里插入图片描述

7.1.1、void init(ServletConfig config),只在初始化时调用一次,即一个servlet实例只有一个

对servlet初始化,当容器创建servlet实例的时候,初始化一些配置

7.1.2、void service(ServletRequest req, ServletResponse res)

响应客户请求,实现业务逻辑

7.1.3、void destroy()

销毁一个servlet实例:资源释放、服务停止等操作时调用
在这里插入图片描述

7.2、servlet的其他方法

7.2.1、String getServletInfo()

返回一个字符串,包含作者,版本等,对于实际编程没有太大的实际意义

7.2.2、ServletConfig getServletConfig()

返回一个ServletConfig对象

  • 1、 Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外部的资源,所以,Serlvet引擎需要将表示Servlet容器的对象传递给Servlet。
  • 2、另外,在web.xml文件中为某个Servlet设置的名称和初始化参数等信息也需要传递给该Servlet。

I、 Servlet引擎将代表Servlet容器的对象(ServletContext)Servlet的配置参数信息,一并封装到一个称为ServletConfig的对象中,并在初始化Servlet实例对象时传递给该Servlet。
II、ServletConfig接口则用于定义ServletConfig对象需要对外提供的方法,以便在Servlet程序中可以调用这些方法来获取有关信息。

ServletConfig 对象不需要我们自己创建,容器会帮我们创建,调用init()方法时将ServletConfig 对象回传给我们,我们只需要接收即可,可以使用getServletConfig()方法返回ServletConfig 对象,或定义一个全局ServletConfig变量,在init方法中接收回传的ServletConfig 对象即可。

作用:
1、获取servlet的别名servlet-name
servletConfig.getServletName();
2、获取初始化参数init-param
servletConfig.getInitParameter(“param1”);
Enumeration names = servletConfig.getInitParameterNames();
3、获取servletContext对象
servletConfig.getServletContext();

在这里插入图片描述
如果重写了init方法一定要调用初始的init方法
在这里插入图片描述

7.2.3、ServletConfig 对象的String getInitParameter(String name)方法

获取servlet配置指定参数对应的值

在这里插入图片描述
使用下面语句可以获取上面图片中的参数

System.out.println(servletConfig.getInitParameter("param1"));
System.out.println(servletConfig.getInitParameter("param2"));

7.2.4、ServletConfig 对象的String getServletName()方法

获取servlet名称

System.out.println(servletConfig.getServletName());

7.2.5、ServletConfig 对象的Enumeration getInitParameterNames()方法

获取servlet配置的所有参数的名

Enumeration<String> names = servletConfig.getInitParameterNames();
while (names.hasMoreElements()) {
	System.out.println(names.nextElement());
}

上述方法的使用:
在这里插入图片描述

7.2.6、ServletConfig 对象的ServletContext 的 getServletContext()方法

ServletContext对象:

  • 特点:上下文环境对象:对应整个web应用的。一个web应用`只能有一个
  • ServletContext的生命周期:
    诞生:web部署到服务器。启动服务器,此时上下文环境对象创建。只要是tomcat服务器不关闭,上下文环境对象一直存在。
    销毁:关闭服务器或者是从web服务器上卸载该程序的时候,该对象销毁。

Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用servletConfig.getServletContext()方法可以返回ServletContext对象的引用。
由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为application 对象(Web应用程序对象,四个域对象之一)。

作为域对象的使用:

  • 域:存取数据的操作访问,本质上是一个map结构:存数据,取数据。
  • 域的作用范围:作用范围是,在整个web应用程序当中。
ServletContext接口(API Specifications-getInitParameter(String name)	//获取context-name初始化name对应的value
	-getInitParameterNames()		//获取context-name初始化的所有name
	-getContextPath()				//拼接url时经常使用
	-getRealPath()					//获取资源的真实地址
	-属性操作方法
		。getAttribute(String name)getAttributeNames()setAttribute(String name, Object object)removeAttribute(String name)

在上面项目的基础上继续进行下面的操作
在这里插入图片描述
在这里插入图片描述
运行结果
在这里插入图片描述

八、servlet配置

8.1、<load-on-startup></load-on-startup>的使用

正数会提前加载,越小越先加载,-1不会提前加载
在这里插入图片描述
结果入下:
在这里插入图片描述

8.2、同一个servlet可以映射到多个访问URL

在这里插入图片描述
在这里插入图片描述

九、请求和响应

请求与响应
ServletRequest
ServletResponse
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

十、HttpServlet

在这里插入图片描述

10.1、HttpServletRequest 简介

。Servlet API 中定义的 ServletRequest 接口类用于封装请求消息。
。HttpServletRequest 是专用于HTTP协议的ServletRequest 子接口,它用于封装 HTTP 请求消息。
。在 service() 方法内部调用 HttpServletRequest 对象的各种方法来获取请求消息。

10.2、HttpServletRequest类的常用方法

getRequestURI()				获取请求的资源路径
getRequestURL()				获取请求的统一资源定位符(绝对路径)
getRemoteHost()				获取客户端的ip地址
getHeader()					获取请求头
getParameter( )				获取请求的参数
getParameterValues()		获取请求的参数(多个值的时候使用)
getMethod()					获取请求的方式GET或POST
setAttribute(key, value);	设置域数据
getAttribute(key);			获取域数据
getRequestDispatcher( )		获取请求转发对象

10.3、HttpServletResponse简介

。Servlet API中定义的ServletResponse接口类用于创建响应消息。
。HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息。

10.4、HttpServlet登录例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值