一、Servlet简介
1、什么是Servlet?
这可能是每一个初学者都首先需要知晓的,Servlet是运行在服务端的Java小程序,也是son公司提出的一款规范(接口),用来处理客户端请求和响应给浏览器的动态资源。但Servlet实质就是Java代码通过Java的API动态想客户端输出内容。
Servlet规范:
- Servlet技术
- filter技术--过滤器
- listener技术--监听器
2、快速入门Servlet
实现步骤:
- 创建Servlet实现类
- 覆盖尚未实现的方法--service方法
- 在web.xml中进行Servlet配置
但在实际开发中,我们不会去实现Servlet类,因为覆盖的方法太多了,一般采用类去继承HttpServlet
实现步骤:
- 创建类继承HttpServlet类
- 重写doGet和doPost
- 在web.xml中进行Servlet配置
二、Servlet的API(生命周期)
1、Servlet接口中的方法
1)init(ServletConfig config)
何时执行:当Servlet对象创建时执行
ServletConfig:代表的是Servlet对象的配置信息
2)Servlet(ServletRequest request,ServletResponse response)
何时执行:每次请求时都会执行
ServletRequest:代表请求 将请求的信息封装成ServletRequest
ServletResponse:代表响应 ServletRequest封装的时候再创建一个ServletResponse对象
3)destroy()
何时执行:Servlet销毁时执行
2、HttpServlet类的方法
- init()
- doGet(HttpServletRequest request,HttpServletResponse response)
- doPost(HttpServletRequest request,HttpServletResponse response)
- destroy()
3、Servlet的生命周期(面试题)
1)Servlet何时创建:默认是第一次访问的时候创建对象
2)Servlet何时销毁:当服务器关闭的时候Servlet就销毁了
3)每次访问都必然执行的方法:service(ServletRequest request,ServletResponse response)方法
总结:启动于开天辟地,毁灭于世界消失 当服务器启动时Servlet就执行了,只有关闭了服务器Servlet才会销毁
三、ServletContext方法
ServletContext:上下文,代表当前的web应用,可以保存数据,共享数据
创建一个ServletContext对象
ServletContext context = this.getServletContext();
存入数据
//将一个数据保存到ServletContext中,String是存入数据的名字,Object代表存入的数据
ServletContext.setAttribute(String a,Object b)
//例:
context.setAttribute(“name”,username);
取出数据
//用来获取ServletContext中的数据,在获取之前需要先去存储数据才可以
Object getAttribute(String name)
//取出数据 通过存入数据的名字取出
String username =(String) context.getAttribute(“name”)
删除数据
//用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做
void removeAttribute(String name)
解决Servlet输出乱码问题:
第一种:
HttpServletResPonse.setContentType(“text/html”); 告诉网页是html
HttpServletResPonse.setCharacterEncoding(“utf-8”); 告诉网页是UTF-8编码
第二种:
HttpServletResPonse.setContentType(“text/html;charset=UTF-8”);
ServletContext获取资源相关的方法:
getRealPath(“/index.jsp”); 这个方法得到的是有盘符的路径:F/XXX/XXX/XX/
语法: String path = this.getServletContext().getRealPath(“/index.jsp”);
获取资源路径后,再创建输入流对象:
语法:InputStream input = this. getServletContext().getResourceAsStream(“/index.jsp”);
获取当前路径下所有资源的路径:
语法:set<String> paths = this.getServletContext().getResourcePaths(“/WEB-INF”);
四、Servlet配置
1、基本配置
<!-- 注册servlet-->
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.along.servlet.ServletDemo</servlet-class>
</servlet>
<!-- 一个servlet对应一个Mapping:映射-->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<!-- 跳转路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
其中url-pattern的配置方式:
1)完全匹配:访问的资源与配置的资源完全相同才能访问到
<url-pattern>/hello</url-pattern>
2)目录匹配 格式:/虚拟的目录../ (代表任意)
//这种表示在指定目录下任何路径都可以访问到
<url-pattern>/hello/*</url-pattern>
//这种表示所有路径都可访问到
<url-pattern>*</url-pattern>
3)扩展名匹配:*.扩展名
<url-pattern>*.do</url-pattern>
2、服务器启动实例化Servlet配置
Servlet的何时创建:默认第一次访问时创建
为什么是默认?
当在Servlet配置中加上一个配置<load-on-startup>Servlet对象即可在服务器启动时就创建
//数值越小优先值越高
<load-on-startup>0</load-on-startup>
3、缺省Servlet
可以将url-pattern配置一个/,代表该Servlet是缺省的Servlet
什么是缺省的Servlet?
当你访问资源地址所有的Servlet都不匹配时,缺省的Servlet负责处理
其实,web应用中所有的资源的响应都是Servlet负责,包括静态资源
4、欢迎页面
欢迎文件列表,这样是第一个找1.html文件,如果没有,依次往下找;
<welcome-file-list>
<!-- 如果第一个1.html没有找到则找2.html依次循环-->
<welcome-file>1.html</welcome-file>
<welcome-file>2.html</welcome-file>
<welcome-file>3.jsp</welcome-file>
<welcome-file>4.html</welcome-file>
<welcome-file>5.html</welcome-file>
</welcome-file-list>