- 浏览: 433082 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 2808参照: https://www.cnblogs.com/c ... -
JNA与动态链接库交互之使用结构体与结构体数组
2016-10-13 17:54 2251Java调用C/C++动态链接库函数,当传 ... -
ElasticSearch1.7.3 报错Root type mapping not empty after parsing!
2015-12-16 23:02 1383熟悉Lucene也比较久了 ... -
TopN问题的算法实现
2015-05-11 00:15 1555TopN指的是从已经存在的数组中,找出最大(或最小)的前n ... -
NIO之Socket通信
2015-04-11 15:18 0Server端 package com.xiva.nio; ... -
阻塞与非阻塞通讯
2015-03-14 13:18 774在一个阻塞C/S系统中,服务器要为每一个客户连接开启一个线程阻 ... -
[续]Java调用DLL视频解帧,并保存第一关键帧到JPG格式文件
2014-05-15 00:59 1462本篇文章的前一篇是采用FFmpeg解帧,并保持到JPG格式 ... -
Jconsole连接之JVM设置
2014-05-13 03:06 885Jconsole连接之JVM设置 -Xmx256m ... -
Lucene4.x SmartChineseAnalyzer添加扩展词
2013-11-30 23:21 1676之前有一点研究,现在奉上比较完整的代码,可根据项目 ... -
Java ORC
2013-05-22 14:09 0http://blog.csdn.net/lonelyli ... -
OSCache的对action响应的配置
2013-05-08 23:13 1060对action响应的配置其实也不是很特别,这里主要提到的是 ... -
Java PING一个IP地址 isReachable
2013-05-08 17:38 1976Java1.5可以替换很古老Runtime的PING方法 ... -
Java后台返回easyUI的comboxTree数据
2013-05-04 10:08 1724easyUI的实现,其中包括一次加载完毕和动态树: ... -
利用JDBC生成数据库表对应的Class
2013-05-01 19:26 1193简单的实现了Hibernate工具自动生成Class文件的 ... -
HttpClient4示例
2013-04-30 01:27 2156之前做过一个3版本HttpClient简单示例的示例,最 ... -
http client
2013-04-24 17:57 0import java.io.IOException; i ... -
Java6新特性之动态生成Class,并加载
2013-04-24 23:56 1074利用JavaCompiler对文件进行动态编译,JDK1. ... -
利用JNA对文件进行监听之观察者模式
2013-04-25 00:01 1526JNA为第三方的JNI的一个实现包。里面实现了很多wind ... -
Lucene4全文索引示例
2013-04-30 02:20 1577Lucene4.2.1示例,之前也做过3.6的示例。3.6 ... -
改进后的归并排序,对大文件归并排序
2013-04-25 00:05 1151针对大文件,一次无法全部读入内存,可以采用将内容保存到文件 ...
相关推荐
本项目是一个基于JavaEE技术的网盘系统,完全使用Servlet进行开发,没有依赖任何后端框架。Servlet是Java Web开发中的核心组件,它用于处理HTTP请求,提供动态内容。在这个项目中,Servlet被用来构建服务器端的业务...
二、课设简介我的课设想法因为自己已经大三了,也不年轻了,技术也学得很广泛也很烂(物联网专业也算得上是一个万金油专业),综合自己学过的技术和对自己专业的认知,当时萌生了做一个很普通的适合物联网三层架构...
【标题】"smbms静态资源(超市管理系统)"指的是一...理解这个系统涉及到对Java Web开发、前端开发以及超市业务流程的综合认知。开发者需要关注如何有效地整合这些静态资源,以创建一个高效、用户友好的超市管理界面。
这个系统涵盖了Java编程语言的基础知识、SQL数据库管理和数据操作以及用户界面设计等多个核心领域。下面将详细阐述其中涉及的主要知识点: 1. **Java基础**:作为系统的后端语言,Java提供了面向对象的编程模型,...
《Java项目:实验教学管理系统源码解析》 Java项目中的实验教学管理系统源码是一份珍贵的学习资源,它为我们...通过逐个剖析这些文件和目录,开发者可以逐步构建起对整个系统运作机制的认知,从而提升自己的编程能力。
这个学生管理系统是一个很好的实践平台,可以帮助初学者深入理解JavaEE开发流程,包括后端逻辑处理、数据库操作以及前端展示,同时也能提升对MVC模式和Web应用开发的整体认知。通过实际操作,你可以进一步巩固Java...
【标题】中的“基于SSH的车间信息管理系统源码”表明这是一个使用SSH(Spring、Struts、Hibernate)技术栈开发的车间...通过深入研究这个系统,可以提升对Java Web开发的整体认知,为今后的实际工作打下坚实的基础。
我的课设想法:因为自己已经大三了,也不年轻了,技术也学得很广泛也很烂(物联网专业也算得上是一个万金油专业),综合自己学过的技术和对自己专业的认知,当时萌生了做一个很普通的适合物联网三层架构思想的一个小...
3. **MVC模式**:网上超市系统很可能采用了Model-View-Controller架构,学习如何用JSP作为视图层,Servlet作为控制器,以及如何组织模型类。 4. **数据库设计**:涉及商品信息、用户信息、购物车、订单等表的设计,...
7. **数据库连接与JDBC**:虽然题目中没有明确提到,但很多JAVA Web应用都会涉及到数据库操作,学习如何使用JDBC进行数据库连接和查询是必要的。 通过实践这个简单的JAVA Web应用,你可以逐步建立起对JAVA Web开发...
本教程“一个很好的JSP教案”是为大专、高职等层次的学生或初学者设计的,旨在帮助他们掌握JSP的基础知识和实际应用。通过这份教案,学习者可以深入理解JSP的工作原理,以及如何在实际项目中运用这些知识。 ### JSP...
虽然实际工作经验不多,但作者拥有四年的军事生活经历,培养了自己的自信心、职业精神和扎实的学术基础知识。 五、个人素质 作者具有良好的个人素质,包括自信心、职业精神、自律、守时、诚实、负责任等。作者还...
本项目虽然没有明确提到使用完整的J2EE框架,但其核心组件(如Servlet和JSP)是J2EE的一部分。 4. Tomcat:Tomcat是一款开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages的相关规范。在本项目中,...
【Java面试题集最全版开发入门.pdf】涵盖了多个Java及相关技术领域的面试知识点,包括技巧篇、智力篇、Java篇、JSP篇、Servlet篇、应用服务器篇、J2EE和MVC篇、设计模式篇、Hibernate性能优化篇以及数据库篇。...
对于初学者来说,这是一本很好的入门书籍,能帮助他们快速建立起对Java编程的整体认知。 《Java开发实战经典》则由李兴华编写,这本书更注重实践与案例,旨在提升读者的实战能力。书中不仅覆盖了Java语言的基本知识...
- **示例回答**:“我希望在未来几年内成为一名高级软件工程师,并逐步承担更多的技术和管理职责。我计划通过参与更多的项目来提升我的技术水平,同时也希望能够带领团队一起成长。” #### 二、知识、经验和专业...
- 系统可以发布问卷调查,收集用户对于某些社会公共常识的认知情况。 - 通过对调查结果的分析,可以了解公众的需求和反馈,进而优化科普内容。 5. **公共知识分类管理**: - 对科普内容进行分类管理,便于用户...
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页...
《J2EE企业及测试案例(设计框架应用开发)》是一个综合性的学习资源,主要针对J2EE平台上的企业级应用程序开发和测试。...通过深入学习,你可以构建起对J2EE开发的全面认知,并有能力参与企业级项目的开发和测试工作。
综上所述,"overview-frame.htm" 文件很可能包含了以上这些方面的详细概述,帮助开发者建立起对Java架构的整体认知,无论是初学者还是有经验的开发者,都能从中受益。学习并理解这些知识点,将有助于提升编程技能,...