Servlet
Serlet:
动态的web开发技术,本质上就是一个类,运行在服务器端的一个java小程序
处理业务逻辑,生成动态web内容
1.编写servlet步骤:
1.编写一个类
a.继承HttpServlet
b.重写doGet()或者doPost()方法
2.编写配置文件
a.注册servlet
b.绑定路径
3.访问
http://主机:端口号/项目名/路径
2.接收参数:
格式:key=value
String value = request.getParameter("key")
例:http://localhost/yisen/hello?username=tom
request.getParameter("username")
3.回写内容:
使用respone方法
response.getWriter().print("success");
处理响应数据中文乱码
response.setContentType("text/html;charset=utf-8");//建议放在第一行
4.Servlet体系结构:
Servlet:接口
|
GenericServlet:抽象类
|
HttpServlet:抽象类
|
自定义servlet
Servlet常用方法:
void init(ServletConfig config):初始化
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
void destory():销毁
ServletConfig getServletConfig():获取当前servlet的配置对象
GenericServlet常用方法:
除了service方法没有实现,其他都实现了
空参的init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
HttpServlet常用方法:
service做了实现,把参数强制转换,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应的doXxx()方法
掌握:doget() doPost()
Servlet生命周期:
void init(ServletConfig config):初始化
* 初始化方法
* 执行者:服务器
* 执行次数:1次
* 执行时机:默认第一次访问时
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
* 服务方法
* 执行者:服务器
* 执行次数:请求一次执行一次
* 执行时机:请求来的时候
* @param servletRequest
* @param servletResponse
void destory():销毁
* 销毁
* 执行者:服务器
* 执行次数:只执行一次
* 执行时机:当servlet被移除时或服务器正常关闭时
package Servlet2; import javax.servlet.*; import java.io.IOException; public class LifeServlet implements Servlet { /** * 初始化方法 * 执行者:服务器 * 执行次数:1次 * 执行时机:默认第一次访问时 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化操作!"); } /** * 服务方法 * 执行者:服务器 * 执行次数:请求一次执行一次 * 执行时机:请求来的时候 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("服务方法!"); } /** * 销毁 * 执行者:服务器 * 执行次数:只执行一次 * 执行时机:当servlet被移除时或服务器正常关闭时 */ @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } }
servlet是单实例多线程
默认第一次访问时,服务器创建servlet,并调用init实现初始化操作,并调用一次service方法
每当请求来的时候,服务器创建一个线程调用servlce方法执行自己的业务逻辑
当servlet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁
5.url-pattern的配置:
方式1:完全匹配 必须以"/"开始 例:/hello /a/b/c
方式2:目录匹配 必须以"/"开始 以" * "结束 例:/a/* /*
方式3:后缀名匹配: 以" * "开始 以字符结尾 例:*.jsp *.do *.action
优先级:完全匹配>目录匹配>后缀名匹配
6.load-on-startup
作用:用来修改servlet初始化时机
取值:正整数 值越大优先级越低
当我们的配置文件里没有指定配置的话,会查找tomcat的web.xml
若请求我们自己的项目处理不了,tomcat的默认servlet会帮我们处理信息
7.路径写法:
相对路径:
当前路径 ./ 或 什么都不写
绝对路径:
带主机和协议的绝对路径(访问站外资源)
http://www.yisen.com/xxx
http://localhost:8080/yisen/hello
不带主机和协议的绝对路径(常用)
/yisen/hello
8.ServletContext
上下文(全局管理者)、一个项目的引用,代表了当前项目
当项目启动时,服务器为每一个web项目创建一个servletcontext对象
当项目被移除时或服务器关闭时servletcontext销毁
作用:
1.获取全局的初始化参数
2.共享资源(xxxAttribute)
3.获取文件资源
4.其他操作
获取全局管理者:
方式1:getServletConfig().getServletContext()
方式2:getServletContext()
常用方法:
1.了解
String getInitParameterName(String key):通过名称获取指定的参数值
String getInitParameterNames():获取所有的参数名称
在根标签下有一个context-param子标签用来存放初始化参数
<context-param>
<param-name></param-name>
<param-value></param-value>
</context-param>
2.xxxAttribute
setAttribute(String key,Object value); //设置值
Object getAttribute(String key); //获取值
removeAttribute(String key); //移除值
3.文件资源
String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
getRealPath("/") 项目部署路径
InputStream getResourceAsStream(String path):以流的形式返回一个文件
4.获取文件的mime类型 大类型/小类型
String getMimeType(String 文件名称)
9.ServletConfig:(了解):
servlet配置对象
ServletConfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象传递给servlet,由servlet的getServletConfig方法获取
作用:
1.获取当前servlet的名称
2.获取当前的servlet的初始化参数
3.获取全局管理者ServletContext
方法:
getServletContext():获取全局管理者
String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
String getInitParameterName(String key):通过名称获取指定的参数值
String getInitParameterNames():获取所有的参数名称
初始化参数时放在web.xml文件
servlet标签下子标签 init-param
10.域对象:
当成map集合
常用方法:
xxxAttribute()
ServletContext创建和销毁:
当项目启动时,服务器为每一个web项目创建一个servletcontext对象
当项目被移除时或服务器关闭时servletcontext销毁
存放:
共享的数据
11.获取文件路径:
通过类加载器获取文件:2.txt放在classes路径下
类.class.getClassLoader().getResource("2.txt").getPath()