java web学习笔记 servlet
关于java web
web.xml中一般配置的都是与servlet先关的可以配置servlet filter listener context-param用来配置web应用的启动参数,可用通过ServletContext对象获取参数,然后作用与整个web应用的生命周期
Filter 接口的使用
- 创建Filter 类
- 在web.xml中配置Filter 或者直接使用注解
- 创建Filter必须实现javax.servlet.Filter接口,该接口中定义了三个方法
- void init(FilterConfig config)
- void destroy();
- void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain)
下面是一个日志Filter,这个Filter负责拦截所有的用户请求,并将请求的信息记录在日志中
package com.ws.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
@WebFilter(filterName="log",urlPatterns="/*")
public class LogFilter implements Filter {
private FilterConfig config;
public void init(FilterConfig config){
this.config=config;
}
public void destroy(){
this.config=null;
}
public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain)
throws IOException,ServletException
{
//下面代码用于对用户请求执行预处理
ServletContext context=this.config.getServletContext();
long before=System.currentTimeMillis();
System.out.println("开始过滤...");
HttpServletRequest hrequest=(HttpServletRequest)req;
System.out.println("Filter已经拦截到的用户请求的地址:"+hrequest.getServletPath());
//Filter 只是链式处理,请求依然放行到目的地址
chain.doFilter(req, rep);
//下面的代码用于对服务器响应后的处理
long after=System.currentTimeMillis();
System.out.println("过滤结束...");
System.out.println("请求被定为到"+hrequest.getRequestURI()+" 所花的时间为:"+(after-before)+"s");
}
}
Listener 接口
当web应用在web容器中运行时,会再web容器内发生各种事件,web应用启动,session开始,用户请求到达,响应用户请求,session结束,web应用关闭
- ServletContextListener:用于监听web应用的启动和关闭
ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变
- ServletRequestListener:用于监听用户请求
ServletRequestAttributeListener:用于监听request内范围属性的变化
- HttpSessionListener: 用于监听用户的session的开始和结束
HttpSessionAttributeListener:用于监听session范围内属性的变化
下面将创建一个获取数据库链接的Listener ,该Listener会再应用启动时获取数据库链接,并将获取的链接设为application内的属性
- 实现Listerner类
package com.ws.listener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class GetConnListener implements ServletContextListener {
//应用启动时触发
public void contextInitialized(ServletContextEvent sce){
try{
ServletContext application=sce.getServletContext();
String driver=application.getInitParameter("driver");
String url=application.getInitParameter("url");
String user=application.getInitParameter("user");
String pass=application.getInitParameter("pass");
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,pass);
application.setAttribute("conn", conn);
}
catch(Exception ex){
System.out.println("Listener 中获取数据库连接出现异常"+ex.getMessage());
}
}
//应用关闭时触发
public void contextDestroyed(ServletContextEvent sce){
ServletContext application=sce.getServletContext();
Connection conn=(Connection)application.getAttribute("conn");
if(conn!=null){
try{
conn.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
}
}
- 配置Listener
** 使用@WebListener
** 在web.xml配置
<listener>
<listener-class>com.ws.listener.GetConnListener</listener-class>
</listener>
还需要添加context-param参数设置
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/javaee</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>pass</param-name>
<param-value>123456</param-value>
</context-param>
使用ServletContextAttrbuteListener
需要实现如下三个方法
void attributeAdded(ServletContextAttributeEvent event);
void attributeRemoved(ServletContextAttributeEvent event);
void attributeReplaced(ServletContextAttributeEvent event);
ServletRequestListener接口与ServletContextListener接口类似 HttpSessionListern接口 initialize换成create
java web学习笔记 servlet的更多相关文章
- java web学习笔记-Servlet篇
Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...
- Java Web学习笔记-Servlet不是线程安全的
由于Servlet只会有一个实例,多个用户同时请求同一个Servlet时,Tomcat会派生出多条线程执行Servlet的代码,因此Servlet有线程不安全的隐患.如果设计不当,系统就会出现问题. ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- CodeForces - 846F Random Query(期望)
You are given an array a consisting of n positive integers. You pick two integer numbers l and r fro ...
- lynx---CentOS终端访问IP
1.官网 http://lynx.isc.org 2.稳定版本 http://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.8rel.2.ta ...
- 使用NPOI导出图片到EXCEL
1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...
- Mybatis主配置文件常见使用讲解
在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或 ...
- Linux系列教程(二十一)——Linux的bash基本功能
上篇博客我们介绍了什么是shell,以及编写shell脚本的两种执行方式.我们知道在敲命令的时候,有很多快捷键,比如tab键能补全命令,在比如为什么我们直接敲 ll 命令能显示目录的长格式,其实这是b ...
- HtmlImageGenerator乱码问题解决、html2image放linux上乱码问题解决
使用html2image-0.9.jar生成图片. 在本地window系统正常,放到服务器linux系统时候中文乱码问题.英文可以,中文乱码应该就是字体问题了. 一.首先需要在linux安装字体,si ...
- shell中条件判断语法与判断条件小结
1. IF条件判断语法: if Athen dosthelif B dosthelse dosthfi 2. 判断条件: 2.1 字符串判断 str1 = str2 当两个串有相同 ...
- 用JAVA中BufferedImage画出漂亮的验证码点击变化
如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...
- linux服务器使用yum安装nginx
一,安装nginx和php-fpm yum install nginx php-fpm 二, 找到nginx.conf find / -name nginx.conf 三,添加解析php配置 在ser ...
- 在没有DOM操作的日子里,我是怎么熬过来的(上)
前言 在我动笔写这篇文章的时候,我刚刚从我的项目中删除了最后一行JQuery代码.至于我为何要这么做,请听闰土娓娓道来.前几年我还在想,假如有一天,前端世界里不能再直接操作dom了,我该怎么办?没想到 ...