资讯详情

18_2Servlet学习笔记

           Servlet学习笔记 

文章目录

  • 1 Web开发简介
    • 1.1 web开发介绍
    • 1.2 发展动态网页技术
    • 1.3 B/S与C/S的介绍
  • 2 Servlet简介
    • 2.1 为什么会出现?servlet?
    • 2.2 什么是servlet
    • 2.3 Servlet开发工具
    • 2.4 tomcat和servlet位于网络中
  • 3 IDEA新建Servlet项目
    • 3.1 建立web工程
    • 3.2 在src在目录下新建包
    • 3.3 开发一个Servlet
    • 3.4 在web.xml中添加Servlet映射
    • 3.5 部署到tomcat
    • 3.6 测试项目
    • 3.7 扩展:发布到webapp目录下
    • 3.8 IDEA发布后不在webapp目录
  • 4 Http协议
    • 4.1 什么是HTTP协议
    • 4.2 http请求
      • 4.2.1 http请求介绍
      • 4.2.2 请求行
      • 4.2.3 请求消息头
    • 4.3 http响应
      • 4.3.1 http响应介绍
      • 4.3.2 状态行
      • 4.3.3 响应消息头
      • 4.3.4 禁止缓存
      • 4.3.5 通用信息头
  • 5 Servlet
    • 5.1 开发Servlet有三种方法
    • 5.2 实现servlet接口
    • 5.3 实现GenericServlet接口
    • 5.4 继承HttpServlet
    • 5.5 Servlet生命周期
    • 5.6 Servlet细节
  • 6 HttpServletRequest
    • 6.1 获取客户机信息
    • 6.2 getMethod()
    • 6.3 getHeader()
    • 6.4 getHeaderNames()
    • 6.5 getParameter(String)
    • 6.6 getParameterNames()
    • 6.7 getParameterValues(String)
    • 6.8 setAttribute(key,value)
    • 6.9 getAttribute(key)
    • 6.10 getServletContext()
    • 6.11 getContextPath()
    • 6.12 getRequestDispatcher()
    • 6.13 getSession()
    • 6.14 getCookies()
  • 7 HttpServletResponse
    • 7.1 getWriter()
    • 7.2 getOutputStream()
    • 7.3 sendRedirect(String url)
    • 7.4 setHeader(String,String)
    • 7.5 setContentType(String)
    • 7.6 setCharacterEncoding(String)
  • 8 请求转发和重定向
    • 8.1 请求转发forword
    • 8.2 请求重定向sendRedirect
    • 8.3 请求转发与请求重定向的区别
  • 9 ServletConfig
  • 10 ServletContext
    • 10.1 为什么需要ServletContext
    • 10.2 解决之道ServletContext
    • 10.3 this.getServletContext()
    • 10.4 servletConfig.getServletContext()
    • 10.5 request.getServletContext()
    • 10.6 session.getServletContext()
    • 10.7 setAttribute(name,value)
    • 10.8 getAttribute(name)
    • 10.9 getRealPath(filepath)
    • 10.10 getResourceAsStream(filepath)
    • 10.11 getInitParameter(name)
    • 10.12 ServletContext小结
    • 10.13 ServletContext应用
    • 10.14 ServletContext注意事项
  • 11 Session
    • 11.1 什么是session
    • 11.2 request.getSession()
    • 11.3 setAttribute(name,value)
    • 11.4 getAttribute(name)
    • 11.5 removeAttribute("name")
    • 11.6 session.getServletContext()
    • 11.7 session.setMaxInactiveInterval(60)
    • 11.8 session.invalidate()
    • 11.9 session.getId()
    • 11.10 对session的说明
    • 11.11 session小结
    • 11.12 用户浏览器独家session
  • 12 Cookie
    • 12.1 为什么需要cookie
    • 12.2 解决之道cookie
    • 12.3 写入cookie
    • 12.4 读取cookie
    • 12.5 new Cookie(name,value)
    • 12.6 cookie.setValue(String)
    • 12.7 cookie.setMaxAge()
    • 12.8 response.addCookie(cookie)
    • 12.9 request.getCookies()
    • 12.10 cookie.getName()
    • 12.11 cookie.getValue(String)
    • 12.12 cookie.getMaxAge()
    • 12.13 cookie小结
    • 12.14 cookie vs session
  • 13 上传下载文件
    • 13.1 文件下载
    • 13.2 文件上传
  • 14 中文乱码处理专题
    • 14.1 表单form提交
    • 14.2 超链接
    • 14.3 sendRedirect()
    • 14.4 Response送乱码
    • 14.5 下载文件提示框乱码
  • 15 Servlet操作数据库
    • 15.1 分页技术算法
    • 15.2 页面 manager.jsp
    • 15.3 JDBC
    • 15.4 分页sql(oracle)
  • 16 Servlet开发项目
    • 16.1 用户管理系统框架图
    • 16.2 项目界面
    • 16.3 项目结构
    • 16.4 实现代码
  • 17 过滤器Filter
    • 17.1 Filter概述
      • 17.1.1 是什么
      • 17.1.2 有什么作用
      • 17.1.3 应用场景
    • 17.2 入门程序
    • 17.3 Filter生命周期
    • 17.4 Filter方法
      • 17.4.1 init()
      • 17.4.2 doFilter()
      • 17.4.3 destroy()
    • 17.5 FilterChain过滤链
    • 17.6 Filter-mapping中的子标签
      • 17.6.1 url-pattern
      • 17.6.2 servlet-name
      • 17.6.3 dispatcher
    • 17.7 FilterConfig
      • 17.7.1 getFilterName()
      • 17.7.2 getServletContext()
      • 17.7.3 getInitParameter(name)
      • 17.7.4 getInitParameterNames()
    • 17.8 全局统一错误页面
    • 17.9 应用案例
      • 17.9.1 需求
      • 17.9.2 技术分析
      • 17.9.3 流程图
      • 17.9.4 代码实现
  • 18 监听器Listener
    • 18.1 ServletRequestListener
      • 18.1.1 requestInitialized()
      • 18.1.2 requestDestroyed()
      • 18.1.3 代码实现
    • 18.2 ServletRequestAttributeListener
      • 18.2.1 attributeAdded()
      • 18.2.2 attributeRemoved()
      • 18.2.3 attributeReplaced()
      • 18.2.4 代码实现
    • 18.3 HttpSessionListener
      • 18.3.1 sessionCreated()
      • 18.3.2 sessionDestroyed()
      • 18.3.3 代码实现
    • 18.4 HttpSessionAttributeListener
      • 18.4.1 attributeAdded()
      • 18.4.2 attributeRemoved()
      • 18.4.3 attributeReplaced()
      • 18.4.4 代码实现
    • 18.5 ServletContextListener
      • 18.5.1 contextInitialized()
      • 14.5.2 contextDestroyed()
      • 18.5.3 代码实现
    • 18.6 ServletContextAttributeListener
      • 18.6.1 attributeAdded()
      • 18.6.2 attributeRemoved()
      • 18.6.3 attributeReplaced()
      • 18.6.4 代码实现
    • 18.7 HttpSessionBindingListener
      • 18.7.1 valueBound()
      • 18.7.2 valueUnbound()
      • 18.7.3 代码实现
    • 18.8 HttpSessionActivationListener
      • 18.8.1 sessionDidActivate()
      • 18.8.2 sessionWillPassivate()
      • 18.8.3 代码实现

1 Web开发简介

1.1 web开发介绍

Web,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源,即供浏览器访问的资源。

。Internet上供外界访问的Web资源分为:

​ 静态web资源(如html页面):指web页面中供人们浏览的数据始终是不变。

​ 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

。静态web资源开发技术

​ html

。常用动态web资源开发技术

​ JSP/Servlet、PHP、asp.net等 (Linux+tomcat+MySQL+jsp+servlet)

​ 在Java中,动态web资源开发技术统称为Javaweb,

​ 我们课程的重点也是教大家如何使用Java技术开发动态的web资源,即动态web页面。

1.2 动态网页技术的发展

​ 当www网初见江湖时,当时主要是html,由于html只支持静态的文字和图片,不能与用户进行交互,为了弥补这个不足,

陆续出现了下列网页技术:

​ (1) asp

​ 微软的产品

​ (2) php

​ (3) jsp

​ jsp = html+java片段+jsp语法+javascript

​ jsp优势:

​ 1.一次编写,到处运行

​ 2.良好的跨平台性 (linux或windows都行)

​ 3.多种开发工具支持

​ 4.强大的可伸缩性(jsp+javabean)的方式

​ jsp的不足:

​ 1.jsp产品的复杂度高

​ 2.jsp要求运行的机器配置要高,

​ 因为jsp是用class常驻内存的方式运行的,效率高,但是需要占用更多的内存

1.3 B/S与C/S的介绍

B/S: browser/server

C/S: Client/Sesver

image-20220131154411947

B/S的优势:

​ 1.开发成本低

​ 2.管理维护简单

​ 3.产品升级便利

​ 4.对用户的培训费用低

​ 5.用户使用方便,出现故障的概率小

B/S的不足:

​ 1.安全性不足 (别人能看到html代码)

​ 2.客户端不能随心变化,受浏览器的限制

2 Servlet简介

2.1 为什么会出现servlet?

需求:请你用现有的Java技术,开发一个动态网页,比如:可以让用户留言,其他人可以回复。

​ 用Java实现不了

解决方案:servlet 2000年 大行其道

​ sun公司就开发了servlet供开发人员使用。

2.2 什么是servlet

Servlet技术是在Java EE出现之前就存在了,在开发动态网页中,得到了广泛的应用,直到现在的Java EE项目中,

​ 也是非常重要的,同时jsp也是在servlet基础上发展起来的。因此,掌握好servlet太重要了。

​ Servlet(java服务器小程序)是用Java编写的服务器程序,它的特点:

​ 1.他是由服务器端(tomcat)调用和执行的

​ 2.他是用Java语言编写的 Servlet其实就是Java程序(Java类)

​ 3.他是按照Servlet规范开发的 该Java类要遵循Servlet开发规范

​ 4.功能强大,可以完成几乎所有的网站功能

​ 5.是学习JSP的基础

2.3 Servlet开发工具

1.常用的开发工具

普通的文本编辑器:notePad++,editplus

集成开发工具:jcreateor,jbuilder,eclipse,Idea

2.常用的web服务器

浏览器 Web服务器 数据库
所有浏览器 Tomcat Weblogic Jboss Websphere SQL2000 Oracle MySQL

2.4 tomcat和servlet在网络中的位置

3 IDEA新建Servlet项目

IDEA新建Servlet项目步骤:

3.1 建立web工程

​ 1.1 点击File–>New–>Project…

​ 1.2 在弹出的界面中,选择“Java Enterprise”,选择JDK版本,选择Tomcat版本,勾选“Web Application”,点击“Next”

​ 1.3 在接下来的界面中,填写项目名称,选择项目存放的路径,点击“Finish”

​ 1.4 生成的jsp_servlet_project项目结构

3.2 在src目录下新建包

​ 在src目录下新建包com.tangguanlin

3.3 开发一个Servlet

package com.tangguanlin;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** * 说明:第一个servlet工程 * 作者:汤观林 * 日期:2022年02月02日 17时 */
public class MyHttpServlet extends HttpServlet { 
        

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        
        resp.getWriter().println("hello,servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        
        doGet(req,resp);
    }
}

3.4 在web.xml中添加Servlet映射

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">

    <servlet>
        <servlet-name>MyHttpServlet</servlet-name>
        <servlet-class>com.tangguanlin.MyHttpServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyHttpServlet</servlet-name>
        <url-pattern>/MyHttpServlet</url-pattern>
    </servlet-mapping>

</web-app>

3.5 部署到tomcat

5.1 选择tomcat版本

5.2 添加要部署的项目,填写发布后的访问路径名jsp_servlet_project

5.3 点击"运行"图标,运行项目

3.6 测试项目

浏览器输入:http://localhost:8080/jsp_servlet_project/MyHttpServlet

3.7 扩展:发布到webapp目录下

1.点击“Project Structure”,选择左侧的Artifacts,输入部署后的项目名称,输出文件夹选择Tomcat的webapp目录,

​ 注意:webapp后面要加上项目名称

2.部署后,在webapp目录下,生成了jsp_servlet_project项目

3.8 IDEA发布后不在webapp目录

​ IDEA发布后,为什么不在webapp目录下

问题:将 tomcat 集成到IDEA中,并且在 tomcat 中部署了 web 项目,在IDEA中运行 tomcat,

​ 但发现IDEA使用 tomcat 部署的项目在 tomcat 安装目录下的 webapps 中无法找到,那么它到底在哪里呢?

结论:IDEA 使用 tomcat 部署项目后不会把编译后的项目复制到 tomcat 的 webapps 目录下,

​ 而是复制一份配置文件到指定目录下,让 tomcat 找到这个项目,

​ 也就是说每个项目都有属于自己的一份 tomcat 配置,互不干扰。

在IDEA安装目录下,

在C:\Users\Administrator.IntelliJIdea2019.3\system\tomcat目录下:

在C:\Users\Administrator.IntelliJIdea2019.3\system\tomcat\Tomcat_8_0_12_jsp_servlet_project_5\conf\Catalina\localhost目录下:

映射文件:jsp_servlet_project.xml

<Context path="/jsp_servlet_project" docBase="D:\05project\jsp_servlet_project\out\artifacts\jsp_servlet_project_war_exploded" />

其中,path 指虚拟目录名称;docBase 指IDEA使用 tomcat 部署项目的路径。

因此,整个项目的运行过程:

​ IDEA 复制一份 tomcat 的配置文件到指定目录中,

​ 之后启动 tomcat 安装目录下的 catalina.bat 文件,

​ tomcat读取配置文件,找到项目位置,然后就运行起来了。

特别说明:jsp_servlet_project.xml这个配置文件是IDEA的,不是Tomcat的,只有Idea才认识。

相当于是IDEA内部的一个映射转移,

如果关闭IDEA,想要项目在Tomcat中运行,

需要将项目拷贝到Webapp目录下,启动Tomcat,才能访问。

4 Http协议

4.1 什么是HTTP协议

1.HTTP协议:HyperText Transfer Protocol 超文本传输协议,是互联网上应用最为广泛的一种网络协议。

​ 是工作在TCP/IP协议基础之上的,所有的www文件都必须遵守这个标准。

​ 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

2.通过httpwatch插件来抓取http请求内容

3.http1.0短连接 http1.1 长连接 所谓长和短,是指持续时间的长度

​ http1.1 持续时间30秒 短连接是发完数据就断掉

4.http是TCP/IP协议的一个应用协议,http也是我们web开发的基础

4.2 http请求

4.2.1 http请求介绍

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。

一个完整的http请求包含了如下内容:

​ 一个请求行,若干消息头,以及实体内容。

​ 其中消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

如下所示:

GET /test/hello.html HTTP/1.1    请求行
Accept: */*
Referer: http://localhost:8080/test/abc.html
Accept-Language:zh-cn
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate
Host:localhost:8080
Connection:Keep-Alive     消息头
                          空格
                          消息内容

消息头格式 消息名:内容

特别说明:消息头并不是每一次请求内容都是一样的。有时候多,有时候少

如果Java发起的http请求,Referer是空的。可以防机器人不停的请求。

4.2.2 请求行

。请求行中的get称之为请求方式,请求方式有:

​ GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

​ 常用的有GET,POST

。get和post区别是程序员常常讨论的问题,总结区别如下:

​ 2.get提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),

​ 以?分隔URL和传输数据,多个参数用&连接,例如:

login.action?name=abc&password=kkk

​ post提交:把提交的数据放置在http包的包体中,比如:

POST /servlet/ParamsServlet HTTP/1.1
Host:
Content-Type:application/x-www-form-urlencoded
Content-Length:28

name=abc&password=xyz     消息内容

因此,get提交的数据会在地址栏中显示出来,而post提交,地址栏不会改变

​ 2.传输数据的大小:

​ 首先声明:http协议没有对传输的数据大小进行限制,http协议规范也没有对URL长度进行限制。

​ 而在实际开发中存在的限制主要有;

​ get: 特定浏览器和服务器对URL长度有限制。例如IE对URL长度的限制是2083字节(2K+35)。

​ 对于其他浏览器,如FireFox,理论上没有长度限制,其限制取决于操作系统的支持。

​ 因此get提交时,传输数据就会受到URL长度的限制。

​ post: 由于不是通过URL传输,理论上数据不受限。

​ 3.安全性:相对而言,post提交,安全高

4.2.3 请求消息头

#告诉服务器,我可以接收文本,网页,图片
Accept: text/html,application/xml;q=0.9,image/avif,image/webp,image/apng
#接收字符编码:ISO-8859-1
Accept-Charset:ISO-8859-1
#可以接收gzip 压缩后的数据
Accept-Encoding: gzip, deflate, br
#浏览器支持的语言:中文 英文
Accept-Language: zh-CN,zh;q=0.9
#保存连接,发完数据不关闭连接
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
#我要找的主机是谁
Host: localhost:8080
Origin: http://localhost:8080
#告诉服务器,我来自哪里 常用于防止盗链 Referer为空,代表不是本网站过来的,只有本网站请求才有值
Referer: http://localhost:8080/UserManager/loginJsp
#告诉服务器,我的浏览器的内核
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Mobile Safari/537.36
#cookie
Cookie:

Java中获取消息头信息:

String host = req.getHeader("Host"); //localhost:8080
out.println("host:"+host);
String UserAgent = req.getHeader("User-Agent"); //
out.println("User-Agent:"+UserAgent);

4.3 http响应

4.3.1 http响应介绍

一个http响应代表服务器向客户端回送的数据,它包括:

一个状态行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空格隔开。

举例:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html,charset=utf-8;charset=ISO-8859-1
Content-Length: 168
Date: Thu, 03 Feb 2022 07:59:17 GMT

4.3.2 状态行

​ 格式: http版本号 状态码 原因叙述

​ 比如: HTTP/1.1 200 ok

​ 状态码用于表示服务器对请求的处理结果,它是一个3位数的十进制数。

​ 响应状态码分为5类,如下所示:

状态码 含义
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 200 表示成功接收请求并已完成整个处理过程,常用200
300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307
400~499 404 客户端的请求有错误,常用404
500~599 500 服务器出现错误,常用500

Java端改写http响应信息:

//重定向
resp.setStatus(302);
resp.setHeader("Location","http://localhost:8080/jsp_servlet_project/MyHttpServlet");
//等价
resp.sendRedirect("/jsp_servlet_project/MyHttpServlet");

4.3.3 响应消息头

HTTP/1.1 302 Found
#告诉浏览器,我是Tomcat类型
Server: Apache-tomcat/1.1
#让浏览器重新定位到url去
Location: http://localhost:8080/jsp_servlet_project/MyHttpServlet
#内容的格式 text/html 编码是ISO-8859-1
Content-Type: text/html,charset=utf-8;charset=ISO-8859-1
#告诉浏览器,我使用了gzip
Content-Encoding:gzip
#告诉浏览器,回送的数据大小80字节
Content-Length: 0
#支持中文
Content-Language:zh-cn
#过多久,刷新到百度
Refresh:1;url=http://www.baidu.com
#告诉浏览器,有文件需要下载
Content-Disposition:attachment;filename=aaa.zip
#cookie信息
Set-Cookie:SS=Q0=5Lb_nQ;path=/search
#指定不要缓存
Expires:-1
#指定不要缓存
Cache-Control:no-cache
#指定不要缓存
Pragma:no-cache
#保存连接,发完数据不关闭连接
Connection: keep-alive
#返回送时间
Date: Thu, 03 Feb 2022 08:57:11 GMT
//定时刷新网页
resp.setHeader("Refresh","5;url=http://www.baidu.com");

4.3.4 禁止缓存

提出问题:

​ 我们的浏览器在默认的情况下,会缓存我们的页面,这样就会出现一个小问题:

​ 如果我们的用户习惯把光标停在地址栏,然后回车去取页面,就会默认从cache中取数据。

第1次:

第2次:

(1)股票,基金系统,有些系统对及时性要求很高,要求我们不缓存页面?

package com.tangguanlin;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
/** * 说明: 页面不缓存 * 作者:汤观林 * 日期:2022年02月03日 18时 */
public class NoCacheServlet extends HttpServlet { 
        

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        

        resp.setDateHeader("Expires",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Pragma","no-cache");

        PrintWriter out = resp.getWriter();
        out.println("hello world"+new Date());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        
        doGet(req,resp);
    }
}

运行结果:

(2)有些系统要求网页缓存一定时间,比如缓存一个小时

//指定缓存时间
resp.setDateHeader("Expires",System.currentTimeMillis()+3600*1000);

4.3.5 通用信息头

通用信息头指既能用于请求,又能用于响应的一些消息头。

#保存连接,发完数据不关闭连接
Connection: keep-alive
#返回送时间
Date: Thu, 03 Feb 2022 08:57:11 GMT

5 Servlet

5.1 开发Servlet有三种方法

a.实现servlet接口

b.继承GenericServlet

c.继承HttpServlet

使用eclipse开发servlet非常容易,但是,它隐藏了太多的细节。
为了让大家可以学到Servlet的底层机制和运行原理,我们先用记事本开发,
然后使用eclipse开发。
#补充:如果使用javac去编译一个java文件,则需要带命令参数
javac -d . MyFirstServlet.java

5.2 实现servlet接口

实现servlet接口来编写一个servlet

​ 介绍servlet的生命周期,该servlet完成一个非常简单的功能,向浏览器回送hello,world!

步骤:

1.建立一个web应用hspWeb1

2.在hspWeb1下建立 WEB-INF/web.xml(可以从别的地方拷贝)

3.在hspWeb1下建立 WEB-INF/classes,我们的Servlet就要在这个目录开发

4.开发MyFirstServlet.java

package com.tangguanlin;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyFirstServlet implements Servlet{ 
        
	
	//得到ServletConfig对象
	public ServletConfig getServletConfig(){ 
        
	
         return null;	
	}
	
	//该函数用于初始化servlet,就是把该servlet装载到内存中
	//该函数只会调用一次
	public void init(ServletConfig config){ 
        
		
	}
	
	//该函数是服务函数
	//我们的业务逻辑代码就是写在这里
	//该函数每次都会调用
	public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException{ 
        
		System.out.println("hello,world");
		res.getWriter().println("hello world");  //向页面输出hello world
	}
	
	//该函数是得到servlet配置信息
	public String getServletInfo(){ 
        
		
		return null;
	}
	
	//销毁该Servlet,从内存中清除
	//该函数只会调用一次
	public void destroy(){ 
        
		
	}
}

5.根据Servlet规范,我们还需要在web.xml中部署Servlet

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true">

     <!--根据servlet规范,需要将servlet部署到web.xml文件-->
	 <servlet>  
	    <!--servlet名称 是该servlet取个名字,名字可以自定义,默认就使用该servlet的名字-->
		<servlet-name>MyFirstServlet</servlet-name>  
		<!--指明该servlet放在哪个包下-->
		<servlet-class>com.tangguanlin.MyFirstServlet</servlet-class>  
	</servlet> 
	
	<!--servlet的映射-->
	<servlet-mapping>  
	     <!--这个servlet的名字,要和上面的servlet名字一样-->
		<servlet-name>MyFirstServlet</servlet-name>  
		<!--是将来访问servlet的请求路径,默认命名规范:就是该Servlet的名字-->
		<url-pattern>/MyFirstServlet</url-pattern>  
	</servlet-mapping>
    
</web-app>

6.测试

http://localhost:8080/hspWeb1/MyFirstServlet

5.3 实现GenericServlet接口

​ 实现GenericServlet接口,了解即可。

5.4 继承HttpServlet

使用继承HttpServlet的方法开发Servlet

​ 1.在软件公司,90%是通过该方法开发

​ 2.举例说明,还是显示 hello world

步骤:

1.建立一个web应用hspWeb1

2.在hspWeb1下建立 WEB-INF/web.xml(可以从别的地方拷贝)

3.在hspWeb1下建立 WEB-INF/classes,我们的Servlet就要在这个目录开发

4.开发MyHttpServlet.java

package com.tangguanlin;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class MyHttpServlet extends HttpServlet{ 
        
	
	//在HttpServlet中,设计者对get提交和post提交 分别处理
	//其实,doGet和doPost底层都是调用了Servlet的service()方法
	protected void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ 
        
		res.getWriter().println("I am httpServlet doGet");
	}
	
	protected void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ 
        
		res.getWriter().println("I am httpServlet doPost");
	}
}

5.根据Servlet规范,我们还需要在web.xml中部署Servlet

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true">

	 <servlet>  
		<servlet-name>MyHttpServlet</servlet-name>  
		<servlet-class>com.tangguanlin.MyHttpServlet</servlet-class>  
	</servlet> 
	<servlet-mapping>  
		<servlet-name>MyHttpServlet</servlet-name>  
		<url-pattern>/MyHttpServlet
        标签: 1208tj2连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台