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 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- 计数排序(O(n+k)的排序算法,空间换时间)
计数排序就是利用空间换时间,时间复杂度O(n+k) n是元素个数,k是最大数的个数: 统计每个数比他小的有多少,比如比a[i]小的有x个,那么a[i]应该排在x+1的位置 代码: /* * @Auth ...
- 2016 湖南省省赛 Problem A: 2016
Problem A: 2016 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 296 Solved: 171 Description 给出正整数 n ...
- MD5加密(前端JS)
var password = $('#password').val();//获取密码框的值 var passwordMD5 = md5(password);//调用MD5,传入密码,返回MD5加密后的 ...
- The Speed 歌词
[ti:]The Speed [ar:]<QQ飞车> [al:]幻想 [by:]伴奏:My Soul [00:03.60]The Speed [00:07.06]<QQ飞车> ...
- 使用NPOI导出图片到EXCEL
1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...
- HDU3045 Picnic Cows (斜率DP优化)(数形结合)
转自PomeCat: "DP的斜率优化--对不必要的状态量进行抛弃,对不优的状态量进行搁置,使得在常数时间内找到最优解成为可能.斜率优化依靠的是数形结合的思想,通过将每个阶段和状态的答案反映 ...
- 使用wwise音效引擎的好处
用过一段时间的wwise,做以下几个具体功能的时候比较方便: 1.当策划需求一个声音需要随机播放多个随机音源的其中一个时,例如脚步声.普通攻击声,当这类声音一直播放的都是同一个音源的时候,人会产生听觉 ...
- 聊下 git 多账户问题
git 多账户问题 标签(空格分隔):git github gitlab git多账户 背景 git 多账号配置 ssh 多密钥对配置 背景 在使用 git 的时候我们都会面临多账户问题,比较常见的就 ...
- Python使用虚拟环境
这里想象一下需求,写一个项目使用的一系列1.0版本的插件,现在要新写一个项目,需要用这些插件的2.0版本,该怎么办?都更新成2.0版本?这样之前的项目都没法维护了 这时我们需要一个虚拟环境,Pytho ...
- alex python of day1
Print("hello word!")#打印hello word!向python世界发生第一声呐喊,仪式很重要 定义变量 name="Alex Li" nam ...