servlet基本使用
servlet概述
就是一个java类,是javweb的规范之一,也是三大组件之一(serlvet,listener,filter)
作用:负责接收用户的请求以及做出响应。(之前是由doXxx.jsp)
快速入门:
实现servlet接口 不常用
继承HttpServlet抽象类 doGet doPost
完成servlet文件的编写后必须要实现配置
例如客户端发出登录请求,或者输出注册请求,这些请求都应该有servlet来完成处理!servlet需要我们自己来编写,每个servlet必须实现javax.servlet.Servlet接口。
web.xml中进行配置
只要修改了web.xml最好重新发布并启动tomcat;
代码展示:
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/xxx.do</url-pattern>
</servlet-mapping>
如何获取name?
<servlet> <servlet-name>DemoServlet</servlet-name>
<!-- 全路径类名 com.zking.servlet.DemoServlet-->
<servlet-class>com.zking.servlet.DemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DemoServlet</servlet-name> <url-pattern>/dologin.do</url-pattern> </servlet-mapping>

servlet的作用是处理请求步骤:
-
接收请求数据
-
处理请求
-
完成响应
实现servlet的方式:
通常会继承HttpServlet类来完成我们的Servlet。
代码展示:
public interface Servlet{
public void init(servletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
public String getServletInfo();
public void destory();
}
- Servlet执行原理:
- (1)当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- (2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
- (3)如果有,则在找到对应的<servlet-class>全类名
- (4)tomcat会将字节码文件加载进内存,并且创建其对象
- (5)调用其方法
内置对象与servlet的对应关系:
JSP九大内置对象 Servlet
pageContext :null
request :HttpServletRequest(常用)
session :HttpSession(通过request.getSession())(常用)
application :ServletContext(this.getServletContext())
response :HttpServletResponse
out :PrintWriter(resp.getWriter())(常用)
page :this
config :ServletConfig(获取Servlet初始化参数的值)
exception :Exception
1、如何获取Servlet内置对象?
servlet中2个重要对象
ServletConfig配置对象
ServletContext全局对象
如何在serlvet中获取到当前项目的绝对路径?
这里的绝对路径指的是基于项目的根目录而不是基于磁盘。
String path = this.getServletConfig().getServletContext().getContextPath(); /项目名称 path+"/index.jsp"
2、如何设置编码的问题?
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletConfig
1、简介
当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig对象,即传入一些配置信息给Servlet。
2、生命周期
应用一加载则创建,应用停止则被销毁;
3、常用方法
返回值 方法名 说明 String getInitParameter(String name) 根据参数名称获取参数的值 Enumeratin<String> getInitParameterNames() 根据所有参数名称的枚举 String getSevletName() 获取servlet的名称 ServletContext getServletContext() 获取servletContext对象 4、ServletConfig的配置方式
在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
<param-name>:代表初始化参数的key。
<param-value>: 代表初始化参数的value。
ServletContext
1、概述:ServletContext对象是一个应用上下文对象,也是一个域对象。表示Servlet应用程序,每个web应用程序都只有一个ServletContext对象。
2、常用方法
返回值 方法名 说明 void setAttribute(String name,Object value) 向域对象中存储数据 Object getAttribute(String name) 通过名称获取域对象中的数据 void removeAttribute(String name) 通过名称移除域对象中的数据 Enumeration<String> getAttributeNames() 获取域对象中所有数据的名称 String getSevletContextName() 获取servletContext的名称 String getContextPath() 获取当前应用的访问虚拟目录 String getServletInfo() 获取服务器名称和版本信息 String getInitParameter(String name) 根据名称获取全局配置的值 Enumeration<String> getInitParameters() 获取全局配置的所有名称 String getRealPath(String path) 根据虚拟目录获取应用部署额磁盘绝对路径 3、ServletContext配置方式
ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签: <param-name>: 代表全局初始化参数的key。 <param-value>: 代表全局初始化参数的value。
注意事项:在Servlet规范中,一共有4个域对象。其他三个是:request请求域,PageContext页面域,session会话域。ServletContext就是其中的一个。是web应用中最大的作用域,也叫application应用域,可以实现整个应用之间的数据共享!(全局的初始化参数)
Filter过滤器
Filter过滤器的使用

1.什么是过滤器? Filter过滤器它是JavaWEB三大组件之一(Servlet应用程序、Listener监听器、Filter过滤器) Filter过滤器它是JavaEE的规范,也就是接口。 Filter过滤器它的作用:拦截请求,过滤响应 它会在一组资源(jsp,servlet,.css,.html等)的前面执行
2.过滤器使用场景
自动登录 统一设置编码格式 访问权限控制 敏感字符过滤等
3.如何编写过滤器? a.自定义类实现Filter接口,重写接口中的抽象方法(3个) b.在web.xml中进行配置
<filter> <filter-name>DemoFilter</filter-name> <filter-class>com.zking.filter.DemoFilter</filter-class> </filter> <filter-mapping> <filter-name>DemoFilter</filter-name> <url-pattern>/as.do</url-pattern> </filter-mapping>4、如何拦截的内容?
<url-pattern>/a.jsp</url-pattern>://拦截a.jsp页面 <url-pattern>/*.jsp</url-pattern>//拦截jsp页面 <url-pattern>/*.do</url-pattern>//拦截全部do页面 <url-pattern>/*</url-pattern>//针对所有加载页面注意事项:
4.1、常用配置项:
urlPatterns 以指定资源匹配。
例如"/index.jsp" 以目录匹配。例如"/servlet/" 以后缀名匹配,例如".jsp" 通配符,拦截所有web资源。"/"
4.2、URL通配符:
① 所有界面
②.后缀 [*.do] 匹配所有后缀为do的界面
4.3、多个过滤器的执行顺序 过滤器的执行顺序和url-pattern标签匹配的精确程度无关,只和他们的filter-mapping标签在web.xml文件中的顺序有关,靠上的配置的先执行。
5、Filter生命周期
- 构造器:Filter的构造器在服务器启动时调用。 构造器只会调用一次,说明Filter也是单例多线程的。
- init():在构造器被调用后,紧接着被调用。作用:用来初始化Filter。
- doFilter():每一次拦截请求时都会调用。
- destroy方法在项目停止时调用,用来在对象被销毁前做一些收尾工作。
代码展示:
该类要称为过滤器类 实现Filter接口 继承HttpFilterpublic class FilterDemo implements Filter{ @Override public void destroy() { System.out.println("过滤器被销毁了~~~~~~"); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { //小日本 所设的关卡 System.out.println("来了老弟~~~放我过去!!!!!!!!!!"); System.out.println("放行 start"); //没有什么要求 我直接放你过去 arg2.doFilter(arg0, arg1); System.out.println("放行 end"); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("过滤器被初始化了~~~"); }
Listener监听器
1、第三种Servlet程序: 监听Servlet Listener
2、主要功能是负责监听Web的各种操作,当相关的事件触发后将产生事件,并对事件进行处理。
监听器分为3种:
- application监听器
- session监听器
- request监听器
application监听器 servlet---ServletContext
实现:ServletContextListener (常用)
public class ListenerDemo1 implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("监听器被销毁"); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("监听器开始监听....."); //获取上下文对象 ServletContext ServletContext application = arg0.getServletContext(); application.setAttribute("count",new Integer(1)); } }3、HttpSessionBindingEvent事件方法: .getSession() //取得session .getName() //取得属性的名称 .getValue() //取得属性的内容
4、ServletContextEvent事件方法: .getServletContext() //取得ServletContext对象,即上下文
.getServletRequest() //取得ServletRequest对象
ServletContext配置方式:
ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签: <param-name>: 代表全局初始化参数的key。 <param-value>: 代表全局初始化参数的value。
案例:监听在线人数
public class AppListrener implements ServletContextListener,HttpSessionListener { ServletContext app=null; //容器销毁时调用 public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub System.out.println("容器销毁了"); } //容器初始化时调用 public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub System.out.println("容器初始化了"); app=sce.getServletContext(); Integer count=0; app.setAttribute("cut", count); System.out.println(count+"___"); } //session创建时调用 public void sessionCreated(HttpSessionEvent arg0) { // TODO Auto-generated method stub System.out.println("session创建时调用"); Integer count=(Integer)app.getAttribute("cut"); if(count==null){ count=0; } count++; System.out.println("创建时:"+count); app.setAttribute("cut", count); } //session销毁时调用 public void sessionDestroyed(HttpSessionEvent arg0) { // TODO Auto-generated method stub System.out.println("session销毁时调用"); Integer count=(Integer)app.getAttribute("cut"); if(count==null){ count=0; } count--; System.out.println("注销时:"+count); app.setAttribute("cut", count); }web.xml配置
<listener> <listener-class>com.servlet.AppListrener</listener-class> </listener>实现思路:创建一个会话就+1,销毁了会话则-1(在会话被创建时,往全局变量中+1;会话被关闭时,全局变量-1)服务器停止则移除 count;
本文介绍了JavaWeb中的Servlet、Filter和Listener三大核心组件。Servlet用于接收和响应用户请求,Filter实现请求拦截和响应过滤,Listener监听Web应用程序的各种事件。详细讲解了它们的实现方式、生命周期、配置方法及应用场景,包括编码设置、获取ServletContext路径、监听器实现在线人数统计等关键知识点。
339

被折叠的 条评论
为什么被折叠?



