javaweb经典
A. 关于讲web方面的好书推荐
介绍几本比较经典的。
第一本:《java从入门到精通》(第3版)
【内容介绍】《JAVA核心技术卷2:高级特征》是Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、XML、网络、数据库编程、高级Swing、高级 AWT、JavaBean构件、安全、分布式对象、脚本、编译与注解处理等,同时涉及本地化、国际化以及Java SE 6的内容。《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。
【推荐理由】本书是经典的《Java核心技术,卷II:高级特性》的最新修订版,涵盖了Java SE6平台的高级用户界面程序设计和企业特性。与第1卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了JavaSE6。并且对新内容都作了重点标注。书中所有的示例程序都进行了详细的设计,用来演示最新的编程技术。并展示针对专业开发者在现实中所碰到的典型问题的最佳解决方案。本书包含有关StAXAPI、JDBC 4、编译器API、脚本框架、闪屏和托盘API以及其他许多JavaSE6改进特性的新章节。本书聚焦于Java语言中更高级的特性,包括下列内容:流与文件、网络、数据库编程、XML、JNDI与LDAP、国际化、高级GUI组件、Java2D、JavaBeans、安全、RMI与Web服务、高级AWT、注解、本地方法。
供参考。
B. ssh框架代码及数据库
SSH框架代码及数据库相关配置简述
一、SSH框架简介
SSH框架是一种经典的Java Web开发架构,由Struts2、Spring3和Hibernate3三个开源框架集成而成。Struts2负责Web层的请求处理和视图跳转;Spring3作为容器管理Java对象,并提供依赖注入等AOP特性;Hibernate3则负责数据持久化,与数据库进行交互。
二、Struts2配置
在SSH框架中,Struts2的配置文件struts.xml用于定义Action、Result等Web层组件。您提供的struts.xml配置已经涵盖了基本设置,包括:
- 常量配置:如编码集、浏览器缓存、配置文件自动加载、开发模式等。
- 包配置:定义了myDefault和user两个包,其中user包继承自myDefault包。
- Action配置:在user包中,使用通配符*UserAction定义了多个Action,这些Action的类名在Spring中定义,方法名由请求参数决定。
- Result配置:定义了成功和输入错误的跳转页面。
三、Spring3配置
虽然您没有提供Spring的配置文件,但通常Spring的配置文件会用于定义Java对象的Bean,以及这些Bean之间的依赖关系。在SSH框架中,Spring还负责将Action对象实例化,这通过struts.objectFactory常量配置为spring实现。
四、Hibernate3配置
Hibernate的配置通常包括数据库连接信息、实体类映射、事务管理等。这些信息通常配置在hibernate.cfg.xml或Spring的配置文件中。在SSH框架中,Hibernate负责将Java对象持久化到数据库中,以及从数据库中检索Java对象。
- 数据库连接信息:包括数据库URL、用户名、密码等。
- 实体类映射:定义Java类与数据库表之间的映射关系。
- 事务管理:配置事务管理器,以及哪些操作需要在事务中执行。
五、数据库
在SSH框架中,数据库是数据持久化的存储介质。开发者需要根据业务需求设计数据库表结构,并创建相应的SQL脚本来初始化数据库。此外,还需要配置数据库连接池以提高数据库访问性能。
六、总结
SSH框架是一个功能强大的Java Web开发架构,它通过集成Struts2、Spring3和Hibernate3三个开源框架,实现了Web层的请求处理、业务逻辑的处理和数据持久化等功能。在实际开发中,开发者需要根据业务需求配置相应的框架和数据库,以实现完整的Web应用。由于篇幅限制,本文仅对SSH框架的配置进行了简要介绍,并未涵盖所有细节。如需更深入了解,请查阅相关框架的官方文档或教程。
C. 使用Java实现Comet风格的Web应用(一)
开始
在本文中 我将展示如何使用各种不同的 Java 技术构建一些简单的 Comet 风格的 Web 应用程序 读者对 Java Servlet Ajax 和 JavaScript 应该有一定的了解 我们将考察 Tomcat 和 Jetty 中一些支持 Comet 的特性 因此需要使用这两个产品的最新版本 本文使用 Tomcat 和 Jetty 另外还需要一个支持 Java 或更高版本的 JDK 本文使用 JDK 此外还需要看看 Jetty 的预发布版 因为它实现了 Servlet 规范 我们将在本文中研究该规范
理解 Comet
您可能已经听说过 Comet 因为它最近受到了一定的关注 Comet 有时也称反向 Ajax 或服务器端推技术(server side push) 其思想很简单 将数据直接从服务器推到浏览器 而不必等到浏览器请求数据 听起来简单 但是如果熟悉 Web 应用程序 尤其是 HTTP 协议 那么您就会知道 这绝不简单 实现 Comet 风格的 Web 应用程序 同时保证在浏览器和服务器上的可伸缩性 这只是在最近几年才成为可能 在本文的后面 我们将看看一些流行的 Java Web 服务器如何支持可伸缩的 Comet 架构 但首先我们来看看为什么要创建 Comet 应用程序 以及用于实现它们的常见设计模式
使用 Comet 的动机
HTTP 协议的成功毋庸置疑 它是 Internet 上大部分信息交换的基础 然而 它也有一些局限性 特别是 它是无状态 单向的协议 请求被发送到 Web 服务器 服务器处理请求并发回一个响应 — 仅此而已 请求必须由客户机发出 而服务器则只能在对请求的响应中发送数据 这至少会影响很多类型的 Web 应用程序的实用性 典型的例子就是聊天程序 另外还有一些例子 例如比赛的比分 股票行情或电子邮件程序
HTTP 的这些局限性也是它取得一定成功的原因 请求/响应周期使它成为了经典的模型 即每个连接使用一个线程 只要能够快速为请求提供服务 这种方法就有巨大的可伸缩性 每秒钟可以处理大量的请求 只需使用少量的服务器就可以处理很大数量的用户 对于很多经典的 Web 应用程序 例如内容管理系统 搜索应用程序和电子商务站点等等而言 这非常适合 在以上任何一种 Web 应用程序中 服务器提供用户请求的数据 然后关闭连接 并释放那个线程 使之可以为其他请求服务 如果提供初始数据之后仍可能存在交互 那么将连接保持为打开状态 因此线程就不能释放出来 服务器也就不能为很多用户服务
但是 如果想在对请求做出响应并发送初始数据之后 仍然保持与用户的交互呢?在 Web 早期 这一点常使用 meta 刷新实现 这将自动指示浏览器在指定秒数之后重新装载页面 从而支持简陋的轮询(polling) 这不仅是一种糟糕的用户体验 而且通常效率非常低下 如果没有新的数据要显示在页面上呢?这时不得不重新呈现同样的页面 如果对页面的更改很少 并且页面的大部分没有变化呢?同样 不管是否有必要 都得重新请求和获取页面上的一切内容
Ajax 的发明和流行改变了上述状况 现在 服务器可以异步通信 因此不必重新请求整个页面 现在可以进行增量式的更新 只需使用 XMLHttpRequest 轮询服务器 这项技术通常被称作 Comet 这项技术存在一些变体 每种变体具有不同的性能和可伸缩性 我们来看看这些不同风格的 Comet
Comet 风格
Ajax 的出现使 Comet 成为可能 HTTP 的单向性质可以有效地加以规避 实际上有一些不同的方法可以绕过这一点 您可能已经猜到 支持 Comet 的最容易的方式是轮询(poll) 使用 XMLHttpRequest 向服务器发出调用 返回后 等待一段固定的时间(通常使用 JavaScript 的 setTimeout 函数) 然后再次调用 这是一项非常常见的技术 例如 大多数 webmail 应用程序就是通过这种技术在电子邮件到达时显示电子邮件的
这项技术有优点也有缺点 在这种情况下 您期望快速返回响应 就像任何其他 Ajax 请求一样 在请求之间必须有一段暂停 否则 连续不断的请求会冲垮服务器 并且这种情况下显然不具有可伸缩性 这段暂停使应用程序产生一个延时 暂停的时间越长 服务器上的新数据就需要越多的时间才能到达客户机 如果缩短暂停时间 又将重新面临冲垮服务器的风险 但是另一方面 这显然是最简单的实现 Comet 的方式
现在应该指出 很多人认为轮询并不属于 Comet 相反 他们认为 Comet 是对轮询的局限性的一个解决方案 最常见的 真正的 Comet 技术是轮询的一种变体 即长轮询(long polling) 轮询与长轮询之间的主要区别在于服务器花多长的时间作出响应 长轮询通常将连接保持一段较长的时间 — 通常是数秒钟 但是也可能是一分钟甚至更长 当服务器上发生某个事件时 响应被发送并随即关闭 轮询立即重新开始
长轮询相对于一般轮询的优点在于 数据一旦可用 便立即从服务器发送到客户机 请求可能等待较长的时间 期间没有任何数据返回 但是一旦有了新的数据 它将立即被发送到客户机 因此没有延时 如果您使用过基于 Web 的聊天程序 或者声称 实时 的任何程序 那么它很可能就是使用了这种技术
长轮询有一种变体 这是第三种风格的 Comet 这通常被称为流(streaming) 按照这种风格 服务器将数据推回客户机 但是不关闭连接 连接将一直保持开启 直到过期 并导致重新发出请求 XMLHttpRequest 规范表明 可以检查 readyState 的值是否为 或 Receiving(而不是 或 Loaded) 并获取正从服务器 流出 的数据 和长轮询一样 这种方式也没有延时 当服务器上的数据就绪时 该数据被发送到客户机 这种方式的另一个优点是可以大大减少发送到服务器的请求 从而避免了与设置服务器连接相关的开销和延时 不幸的是 XMLHttpRequest 在不同的浏览器中有很多不同的实现 这项技术只能在较新版本的 Mozilla Firefox 中可靠地使用 对于 Internet Explorer 或 Safari 仍需使用长轮询
至此 您可能会想 长轮询和流都有一个很大的问题 请求需要在服务器上存在一段较长的时间 这打破了每个请求使用一个线程的模型 因为用于一个请求的线程一直没有被释放 更糟糕的是 除非要发回数据 否则该线程一直处于空闲状态 这显然不具有可伸缩性 幸运的是 现代 Java Web 服务器有很多方式可以解决这个问题
Java 中的 Comet
现在有很多 Web 服务器是用 Java 构建的 一个原因是 Java 有一个丰富的本地线程模型 因此实现典型的每个连接一个线程的模型便非常简单 该模型对于 Comet 不大适用 但是 Java 对此同样有解决的办法 为了有效地处理 Comet 需要非阻塞 IO Java 通过它的 NIO 库提供非阻塞 IO 两种最流行的开源服务器 Apache Tomcat 和 Jetty 都利用 NIO 增加非阻塞 IO 从而支持 Comet 然而 这两种服务器中的实现却各不相同 我们来看看 Tomcat 和 Jetty 对 Comet 的支持
Tomcat 和 Comet
对于 Apache Tomcat 要使用 Comet 主要需要做两件事 首先 需要对 Tomcat 的配置文件 server XML 稍作修改 默认情况下启用的是更典型的同步 IO 连接器 现在只需将它切换成异步版本 如清单 所示
清单 修改 Tomcat 的 server xml <! ThisistheusualConnector mentitoutandaddtheNIOone ><! ConnectorURIEncoding= utf connectionTimeout= port= protocol= HTTP/ redirectPort= / ><ConnectorconnectionTimeout= port= protocol= apache coyote redirectPort= />
Servlet 这显然是 Tomcat 特有的一个接口 清单 显示了一个这样的例子
lishixin/Article/program/Java/hx/201311/26770
D. 有没有适合java初学者的小项目,综合性比较强的,web后端,推荐几个,面试用
1、注册登录系统,几乎每个网站都会有这个模块,是初学者不可绕过项目,的一定要了然于心,无论是servlet+jdbc实现,还是struts2+hibernate实现都要滚瓜烂熟
2、网上商城,里面包含两个经典的模块,购物车和在线支付,这个项目是初学者第一个项目的不二之选
3、在线相册系统,涉及到文件的上传下载,这考验你对JavaIO的熟悉程度,也是很不错的选择
4、其外,你还可以做一下图书管理系统,就是模仿图书馆的管理系统,也很考验人
最后:只要你遵循MVC的设计理念,搞懂各层之间的传值方法,面试就不会慌