java web001——servlet

Posted 江州益彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web001——servlet相关的知识,希望对你有一定的参考价值。

一、servlet定义

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

注意: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
Servlet接口(API Specifications)
通过Service方法完成Hello World!
通过web.xml注册Servlet
运行




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中也可以使用*通配符,但是只能有两种固定的格式:
一种格式是“*.扩展名”
另一种格式是以正斜杠(/)开头并以“/*”结尾。

*.do例子



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

七、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对象

Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外部的资源,所以,Serlvet引擎需要将表示Servlet容器的对象传递给Servlet。另外,在web.xml文件中为某个Servlet设置的名称和初始化参数等信息也需要传递给该Servlet。
Servlet引擎将代表Servlet容器的对象(ServletContext)和Servlet的配置参数信息一并封装到一个称为ServletConfig的对象中,并在初始化Servlet实例对象时传递给该Servlet。ServletConfig接口则用于定义ServletConfig对象需要对外提供的方法,以便在Servlet程序中可以调用这些方法来获取有关信息。

ServletConfig 对象不需要我们自己创建,容器会帮我们创建,调用init()方法时将ServletConfig 对象回传给我们,我们只需要接收即可。

ServletConfig 对象的ServletContext getServletContext()方法

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

ServletContext接口(API Specifications-getInitParameter(String name)getInitParameterNames()
	-getContextPath()//拼接url时经常使用
	-属性操作方法
		。getAttribute(String name)getAttributeNames()setAttribute(String name, Object object)removeAttribute(String name)

在上面项目的基础上继续进行下面的操作


运行结果

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

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


使用下面语句可以获取上面图片中的参数

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

ServletConfig 对象的String getServletName()方法

获取servlet名称

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

ServletConfig 对象的Enumeration getInitParameterNames()方法

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

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

上述方法的使用:

八、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、HttpServletResponse简介

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

10.3、HttpServlet登录例子






以上是关于java web001——servlet的主要内容,如果未能解决你的问题,请参考以下文章

servlet和filter的区别

servlet,filter,listener,intercepter区别

001_JavaWeb之Servlet的路径映射问题

filter与servlet

Java web中使用到的技术

JSP基础学习