javaweb三大组件
servlet
概念
- Server applet:运行在服务器端的小程序
- Servlet是一个接口,定义了java类被浏览器访问的规则
- 实现servlet,复写方法
配置
web.xml
<!--配置Servlet -->
<servlet>
<servlet-name>hello_servlet</servlet-name>
<servlet-class>cn.web.servlet.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello_servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
注解
package com.web.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/hello_servlet")
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
filter
概念
- 过滤器拦截请求,完成一些特殊功能
- eg:登陆验证、统一编码处理、过滤敏感词汇等
配置
web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>filter</filter-name>
<filter-class>cn.web.filter.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
<!-- 拦截方式 -->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>
注解
package cn.web.filter;
import javax.servlet.*;
import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // configure the interception path
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// release
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
执行流程
- 过滤器
- 放行后的资源
- 过滤器放行后的代码
listener
监听机制
- 事件
- 事件源
- 监听器
- 注册监听
配置
web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- Listener -->
<listener>
<listener-class>cn.web.listener.ContextLoaderListener</listener-class>
</listener>
<!-- specifying initialization parameters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
</web-app>
注解
package cn.web.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;
@WebListener
public class ContextLoaderListener implements ServletContextListener {
/**
* 监听ServletContext对象创建的,服务器启动后自动创建ServletContext对象
* 服务器启动后自动调用该方法
* @param servletContextEvent
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
// get ServletContext object
ServletContext servletContext = servletContextEvent.getServletContext();
// load resource file
String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
// get real path
String realPath = servletContext.getRealPath(contextConfigLocation);
// load into memory
try {
FileInputStream fis = new FileInputStream(realPath);
System.out.println("fis:" + fis);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("ServletContext Initialized...");
}
/**
* 服务器关闭后ServletContext对象被销毁,服务器正常关闭调用该方法
* @param servletContextEvent
*/
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext Destroyed...");
}
}