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
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连接器