- 浏览: 414281 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xiang37:
wwwang89 写道这位大哥,你好!很感谢你分享的文章,写的 ...
iPhone调用java的webService -
wwwang89:
这位大哥,你好!很感谢你分享的文章,写的很好,适合我们新手学习 ...
iPhone调用java的webService -
QQ371496669:
能否具体讲解一下为什么StringBuilder的长度会不一样 ...
StringBuilder与StringBuffer相比为什么不是线程安全的 -
Sky_257:
请问 能用abap查询sap服务器的配置、会话、队列、spo ...
使用JCo远程调用SAP系统函数 -
xiang37:
vebasan 写道此句代码的单词有错(标红色的):prop. ...
最简单的EJB示例
在现实工作中很少用servlet的,至少对于码农是这样!
其实只要是个系统,只要上个项目;都会涉及到servlet。当然jsp就是一个servlet等等
其实我们知道得最多的还是在搭建一个框架系统时,会常用到servlet做过滤。比如.do、.action、.jsf、.faces等等
也一直知道一个事情,就是应用程序启动的时候,可以调用一些远程的数据来初始化系统。很多庞大的框架就有这样的需求。下面写出自己的代码,
以前也只知道servlet可以extends httpServlet来实现一个servlet。
今天才知道一般情况下,我们有两种途径实现;还有一种就是extends GenericServlet。只不过httpServlet更为方法的识别http协议所提供的多种请求类型,而httpServlet本身就是从GenericServlet extends而来。
当然我们知道只要继承了servlet接口的类,自己封装好了方法都是可以用的。
<servlet> <servlet-class>com.xiva.servlet.HelloWorldServlet</servlet-class> <servlet-name>hello</servlet-name> <load-on-startup>#</load-on-startup> <init-param> <param-name>name</param-name> <param-value>xiva</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
package com.xiva.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class HelloWorldServlet extends GenericServlet{ /** * */ private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // ServletContext context = this.getServletContext(); Enumeration<String> enume = this.getInitParameterNames(); while(enume.hasMoreElements()){ System.out.println(enume.nextElement()); } String name = this.getInitParameter("name"); PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println("<html><head><title>Hello</title></head>"); out.println("<body><h>Hello World</h>"); out.println(name+"<br/>"); out.println(request.getRemoteAddr()+"<br/>"); out.println(request.getRemoteHost()+"<br/>"); out.println(request.getServerName()+"<br/>"); out.println(request.getServerName()+"<br/>"); out.println("</body></html>"); } public void init(){ System.out.println("Xiva Start"); } }
需要注意的是servlet的单线程模式,现在已经 deprecated。
还有一点就是GenericServlet是implements ServletConfig接口的,但是我们在使用下面两个方法
getInitParameterNames() getInitParameter(String name)
时,需要使用GenericServlet中的方法,而不是先获取ServletConfig,再从ServletConfig中获取初始化的参数名和参数值了。
二 配置自己的监视器Listener
首先是web.xml的配置
<listener> <listener-class>com.xiva.servlet.listener.HttpListenerDemo</listener-class> </listener>
其次是代码:
package com.xiva.servlet.listener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import com.xiva.OnlineCount; public class HttpListenerDemo implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent event) { System.out.println("welcome"); OnlineCount.raise(); } @Override public void sessionDestroyed(HttpSessionEvent event) { System.out.println("bye"); OnlineCount.reduce(); } }
监听器是从servlet上下文中接收通知事件的对象,在servlet2.3的规范中有四种监听器:
ServletContextListener ServletContextAttributesListener HttpSessionListener HttpSessionAttributesListener
熟悉Spring的朋友,可能就清楚其监听器ContextLoaderListener就是继承了ServletContextListener接口。
在网上得知还有一个监听器:
HttpSessionBindingListener
HttpSessionBindingListener这个接口有两个方法:
@Override public void valueBound(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } @Override public void valueUnbound(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub }
这两个方法什么时候调用呢?
在session做removeAttribute或者销毁时,调用valueUnbound
在session做setAttribute时,调用valueBound
了解jsf各组件中也有一个binging的属性,不知和这个binging监听器是否有关系,记得以后再研究!
三 配置自己的过滤器filter
package com.xiva.servlet.filter; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import com.xiva.exception.InitException; public class CharacterFilter implements Filter { private String coding; @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println(filterConfig.getFilterName()); Enumeration<?> names = filterConfig.getInitParameterNames(); String name = null; while(names.hasMoreElements()){ name = (String) names.nextElement(); //从filter的参数中设置coding if("encoding".equals(name)){ coding = filterConfig.getInitParameter(name); } } if(coding == null){ throw new InitException("请初始化编码"); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub //从资源文件中读取编码的设置 this.setEncoding(); if(coding == null){ //如果初始化配置出错,则采取页面的编码方式 coding = request.getCharacterEncoding(); } request.setCharacterEncoding(coding); System.out.println("code"); //提交到下一个filter chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } public String getCoding() { return coding; } public void setCoding(String coding) { this.coding = coding; } private void setEncoding() throws IOException{ Properties prop = new Properties(); InputStream iStream = CharacterFilter.class.getClassLoader().getResourceAsStream("web.propertites"); prop.load(iStream); String encoding = (String) prop.get("encoding"); this.setCoding(encoding); } }
还在持续学习中,继续更新。
发表评论
-
Tesseract-OCR的简单使用与训练
2018-06-06 19:45 2700参照: https://www.cnblogs.com/c ... -
JNA与动态链接库交互之使用结构体与结构体数组
2016-10-13 17:54 2050Java调用C/C++动态链接库函数,当传 ... -
ElasticSearch1.7.3 报错Root type mapping not empty after parsing!
2015-12-16 23:02 1292熟悉Lucene也比较久了 ... -
TopN问题的算法实现
2015-05-11 00:15 1486TopN指的是从已经存在的数组中,找出最大(或最小)的前n ... -
NIO之Socket通信
2015-04-11 15:18 0Server端 package com.xiva.nio; ... -
阻塞与非阻塞通讯
2015-03-14 13:18 664在一个阻塞C/S系统中,服务器要为每一个客户连接开启一个线程阻 ... -
[续]Java调用DLL视频解帧,并保存第一关键帧到JPG格式文件
2014-05-15 00:59 1393本篇文章的前一篇是采用FFmpeg解帧,并保持到JPG格式 ... -
Jconsole连接之JVM设置
2014-05-13 03:06 818Jconsole连接之JVM设置 -Xmx256m ... -
Lucene4.x SmartChineseAnalyzer添加扩展词
2013-11-30 23:21 1592之前有一点研究,现在奉上比较完整的代码,可根据项目 ... -
Java ORC
2013-05-22 14:09 0http://blog.csdn.net/lonelyli ... -
OSCache的对action响应的配置
2013-05-08 23:13 992对action响应的配置其实也不是很特别,这里主要提到的是 ... -
Java PING一个IP地址 isReachable
2013-05-08 17:38 1872Java1.5可以替换很古老Runtime的PING方法 ... -
Java后台返回easyUI的comboxTree数据
2013-05-04 10:08 1645easyUI的实现,其中包括一次加载完毕和动态树: ... -
利用JDBC生成数据库表对应的Class
2013-05-01 19:26 1134简单的实现了Hibernate工具自动生成Class文件的 ... -
HttpClient4示例
2013-04-30 01:27 2097之前做过一个3版本HttpClient简单示例的示例,最 ... -
http client
2013-04-24 17:57 0import java.io.IOException; i ... -
Java6新特性之动态生成Class,并加载
2013-04-24 23:56 990利用JavaCompiler对文件进行动态编译,JDK1. ... -
利用JNA对文件进行监听之观察者模式
2013-04-25 00:01 1430JNA为第三方的JNI的一个实现包。里面实现了很多wind ... -
Lucene4全文索引示例
2013-04-30 02:20 1511Lucene4.2.1示例,之前也做过3.6的示例。3.6 ... -
改进后的归并排序,对大文件归并排序
2013-04-25 00:05 1082针对大文件,一次无法全部读入内存,可以采用将内容保存到文件 ...
相关推荐
基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍...
刚刚接触java时做的日志管理系统,做的很简单,适合初学着 servlet servlet servlet servlet servlet日志管理系统 servlet servlet servlet servlet servlet日志管理系统 servlet servlet servlet servlet servlet...
jsp+servlet+ajax实现的简单网上订餐系统
基于Servlet的商品购物网站
Java学生课程成绩-教师信息管理系统,Servlet+Mysql+Jsp+Tomcat,优秀毕业设计,计算机必看! Java学生课程成绩-教师信息管理系统,Servlet+Mysql+Jsp+Tomcat,优秀毕业设计,计算机必看! Java学生课程成绩-教师...
基于 Servlet 开发的房屋发布系统基于 Servlet 开发的房屋发布系统 基于 Servlet 开发的房屋发布系统基于 Servlet 开发的房屋发布系统 基于 Servlet 开发的房屋发布系统基于 Servlet 开发的房屋发布系统 基于 ...
这个项目用的servlet,mvc写的小型商品购物系统,有好看的前端界面,购物和查看功能
是一个基本java学习Jsp+Servlet的初始系统,使用MVC设计模式
对servlet的跳转有很多的运用。 系统包括: 人员招募 培训与开发 薪酬与福利 考勤与绩效 人事档案 系统设置; 可以放心使用,修改数据库密码请到com.hrm.config里修改;如果你工程名用的不是HRManagement,请到...
会议管理系统项目servlet+jdbc+oracle的实现 会议管理系统项目servlet+jdbc+oracle的实现 会议管理系统项目servlet+jdbc+oracle的实现 会议管理系统项目servlet+jdbc+oracle的实现 会议管理系统项目servlet+jdbc+...
JSP+SERVLET+MYSQL航空订票系统 成功 blest 失败 faild 修改 amend 航班 flight 预定 destine 确认 affirm 查看 examine 购物 shopping 退票 reced 制定 establish 安排 arrange 时间 time 设置 intercalate 购买 ...
基于java编写的学生信息管理系统,实现学生信息的管理及增删改查操作,满足课题实践要求。通过项目的学习,可以了解servlet的原理功能实践,收获巨大,更好的帮助学习与工作。
基于servlet+jsp 的文章管理系统基于servlet+jsp 的文章管理系统 基于servlet+jsp 的文章管理系统基于servlet+jsp 的文章管理系统 基于servlet+jsp 的文章管理系统基于servlet+jsp 的文章管理系统 基于servlet+jsp ...
mvc练手项目 三层结构 学生管理系统 jsp servletmvc 练手项目 三层结构 学生管理系统 jsp servlet
这是一个用servlet编写的简单的用户管理系统
基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情控制系统 基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情控制系统 基于Java Servlet实现的灾情控制系统基于Java Servlet实现的灾情...
纯Servlet实现用户管理系统(入门实例,深刻认识Servlet)
学生信息管理系统 Element-ui+Servlet+Mybatis 前端用到了vue框架,Element-ui...这是我做的第一个JavaWeb系统,还有很多不足和需要修改的地方,如果有发现不足和应该修改的地方,还请告知。 还在学习中,欢迎私信交流
servlet jsp 权限管理系统
Jsp-Servlet-JavaBean企业事务管理系统 类似于新闻发布系统 本资源是课堂老师分享的资源