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的主要内容,如果未能解决你的问题,请参考以下文章