Servlet是运行在Web服务器(容器)中的特殊JAVA类,用来处理用户的HTTP请求
开发一个Servlet程序的步骤
实现Servlet接口
- init(ServletConfig):用来初始化Servlet类的方法,在整个生命周期中只会被执行一次
- service(SErvletRequest, ServletResponse):用来处理用户的请求,用户每次请求都会调用
- destroy():销毁方法,当该servlet被从容器中移除,或关闭容器之前该方法被调用
- getServletConfig(),getServletInfo()
继承GenericServlet类
- 该类实现了Servlet接口和ServletConfig接口
继承HttpServlet类:在开发中通常会采用这种
- 该类是继承自GenericServlet
如何把一个Servlet映射为对外可以访问的路径
1.基于XML配置的方式
在web.xml文件中通过如下的标签实现
<servlet>
<servlet-name>别名</servlet-name>
<servlet-calss>自定义类的包名+包类</servlet-class>
<init-param>
<param-name>参数名称</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>要和前面的某个注册中的别名相同</servlet-name>
<url-pattern>/映射路径</url-pattern>
</servlet-mapping>
2.基于注解的方式:Servlet3.0后才支持的
- @WebServlet():
- urlPatterns/value属性:
- 用来指定对外映射的路径,该值是字符数组类型,每个值必须以"/"反斜杠开头,作用和XMl配置中的url-pattern相同
- urlPatterns/value属性:
- initParams属性:用来设置为该servlet配置初始化参数,作用 和xml中的init-param标签类似
- name属性:作用是指定该servlet类的别名,和xml中的servlet-name标签作用类似
- loadOnStartup属性:用来设置创建servlet对象的实际,值越小优先级越高,如果是复数表示当用户第一次请求时被创建
掌握Servlet的生命周期(重要)
- 当用户请求该servlet,由容器来查找该对应的servlet,如果存在,则直接执行service方法,如果不存在则创建servlet类的对象,并执行init()方法来初始化,接着执行service方法
- 当servlet对象被从容器中移除或销毁,或关闭容器都会执行destroy方法来完成销毁工作。
- 在整个生命周期中init方法只会被执行一次,servlet是单实例的(只创建一次)
ServletConfig接口
用来获取为某个Servlet类配置的初始化参数:
getInitParameter(String):
getInitParamterNames():
获取上下文对象:
getServletContext()
ServletContext接口:
表示上下文对象,在每个web应用中只有一个该上下文对象。该上下文对象对于当前web中的所有servlet都是可用的,而且是同一个对象
该对象有三方面作用:
- 1.设置上下文初始化参数,在web.xml中同时使用
参数名称
参数值
getInitParameter(String paramName):获取定义名称的参数值
getInitParameterNames():获取所有参数名称 - 2.用来表示一个域对象,可以在上下文中存在key->value的对象
setAttribute(String name, Object value):在上下文域中设置名称及值
getAttribute(String name):获取对应名称上存储的值
getAttributeNames():获取所有上下文域中存储的名称
removeAttribute(String name):把某个名称的值从上下文中移除掉 - 3.用来访问资源
getRealPath(String path):
getResourceAsStream(String path)
HttpServletRequest和HttpServletResponse中的部分方法:
获取表单中的参数:request.getParameter(String paramName)
设置请求所用的编码:request.setCharacterEncoding(String encoding):
获取客户端IP地址:getRemoteAddr()
设置响应的头信息:response.setContentType():
获取向客户端输出的字符流对象:PrintWriter response.getWriter():
获取向客户端输出的字节流对象:ServletOutputStream response.getOutputStream()