一、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>
最后修改:2020 年 12 月 12 日 03 : 08 PM
博主大大是用个人资金和时间在更新,感觉对您有帮助请点点赞助救救孩子吧~