1.为解决分布异构问题,提出了中间件(middleware)的概念,属于可复用软件的范畴。
2.中间件=平台+通信,中间件是基于分布式处理的软件,最突出的特点是其网络通信功能
3.中间件分为6类:终端仿真/屏幕转换、数据访问中间件(UDA)、远程过程调用(RPC)中间件、消息中间件(MOM)、交易中间件(TPM)、对象中间件。
4.启动weblogic:在IE输入:http://localhost:7001/,如果看见欢迎页面,则说明启动成功。配置weblogic则是:http://localhost:7001/console
5.IIS、Apache等都是默认占用80端口
6. <session-config>
<session-timeout>30</session-timeout>
</session-config>
设置session失效时间:web.xml
7.Servlet被客户端发出的第一次请求激活,处理完请求后继续在后台运行以等待新的请求,每个请求将生成一个新的线程,而不是一个完整的进程。
8.Java的synchronized使用方法总结
把synchronized当作函数修饰符时,示例代码如下:
1. Public synchronized void method(){
2. //….
3. }
这也就是同步方法,那这时synchronized锁定的是哪个对象呢?他锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,他们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却能够任意调用这个被加了 synchronized关键字的方法。
9.DTD编码符号:< <>>& & " "
10.关于XML的处理:一般有两个W3C中的DOM和SAX,其中DOM应用较为广泛
<?xml version="1.0" encoding="UTF-8"?>
<publication>
<book>
<Title>The Mythical Man-month</Title>
<Writer>Frederick P. Brooks Jr.</Writer>
<PublishDate>1975-03-12</PublishDate>
</book>
<book>
<Title>Think In Java</Title>
<Writer>Bruce Eckel</Writer>
<PublishDate>1999-04-01</PublishDate>
</book>
</publication>
useDomPrintElement.java的代码如下所示:
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class useDomPrintElements{
public static void main(String[] args){
try{
//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM
DocumentBuilder builder = factory.newDocumentBuilder();
//Document接口描述了对应于整个XML文件的文档树
Document document = builder.parse( new File("publication.xml") );
//获得根元素的子节点列表
Element element = document.getDocumentElement();
NodeList nodelist = element.getChildNodes();
//如果预知根元素的名称,也可以使用下边的方法获取根元素的子节点列表
//NodeList nodelist = document.getElementsByTagName("publication");
//用递归方法实现DOM文档的遍历
GetElement(nodelist);
}catch(Exception e){
e.printStackTrace();
}
}
public static void GetElement(NodeList nodelist){
Node cnode;
String str;
if(nodelist.getLength() == 0){
// 该节点没有子节点
return;
}
for(int i=0;i<nodelist.getLength();i++){
cnode = nodelist.item(i);
if(cnode.getNodeType() == Node.ELEMENT_NODE){
//打印节点名称
System.out.println(cnode.getNodeName());
//递归调用GetElement
GetElement(cnode.getChildNodes());
}
else if(cnode.getNodeType() == Node.TEXT_NODE){
str = cnode.getNodeValue().trim();
// 当该对象不为空时显示信息
if(str.length()>0)
System.out.println(" "+str);
}
}
}
}
11.添加xml节点
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
public class useDomEditElements{
public static void main(String[] args){
Text textMsg;
try{
//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( new File("publication.xml") );
// 获得根对象
Element root = document.getDocumentElement();
// 在DOM文档中增加一个Element节点
Element book = document.createElement("book");
//在DOM文档中增加一个Element节点
Element title = document.createElement("Title");
//在DOM文档中增加一个Text节点
textMsg=document.createTextNode("Applied Cryptography");
title.appendChild(textMsg);
//把title节点转化为book的子节点
book.appendChild(title);
Element author = document.createElement("Author");
textMsg=document.createTextNode("Bruce Schneier");
author.appendChild(textMsg);
//把author节点转化为book的子节点
book.appendChild(author);
Element date = document.createElement("publishDate");
textMsg=document.createTextNode("1994-02-23");
date.appendChild(textMsg);
//把date节点转化为book的子节点
book.appendChild(date);
//把book节点转化为root的子节点
root.appendChild(book);
//类TransformerFactory实现获得将DOM文档转化为XML文件的转换器
TransformerFactory tfactory = TransformerFactory.newInstance();
//类Transformer实现转化API
Transformer transformer = tfactory.newTransformer();
// 将DOM对象转化为DOMSource类对象,该对象表现为转化
//成别的表达形式的信息容器
DOMSource source = new DOMSource(document);
// 获得一个StreamResult类对象,该对象是DOM文档转化成的其他形式的
//文档的容器
StreamResult result = new StreamResult(new File("publication.xml"));
// 调用API,将DOM文档转化成XML文件
transformer.transform(source,result);
}catch(Exception e){
e.printStackTrace();
}
}
}
12.SAX在JSP中的运用
<%
//定义XML文档的保存位置
String filepath="D:\\book.xml";
Element root,book;
List books;
//使用StringBuffer类保存书的HTML格式,显得代码清晰,易于修改
StringBuffer bookInfo=new StringBuffer();
try{
//实例化一个SAXBuilder类,来操作XML文档
SAXBuilder sb = new SAXBuilder();
//从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
Document doc = sb.build(new FileInputStream(filepath));
root = doc.getRootElement(); //得到根元素
books = root.getChildren(); //得到根元素所有子元素的集合
for(int i=0;i<books.size();i++){
book=(Element)books.get(i); //得到一本书的信息
bookInfo.append("<tr>");
bookInfo.append("<td>"+book.getChildText("name")+"</td>");
bookInfo.append("<td>"+book.getChildText("author")+"</td>");
bookInfo.append("<td>"+book.getChildText("publishDate")+"</td>");
bookInfo.append("<td>"+book.getChildText("price")+"</td>");
bookInfo.append("</tr>");
}
}catch(Exception e){
out.println(e);
}
%>
添加XML
<%
String msg=""; //用一个msg变量保存提示信息,这样做的好处很多
String filepath="D:\\book.xml"; //XML文档的保存位置
Element root,book;
List books;
try{
//接收上传的参数
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String year=request.getParameter("year");
String month=request.getParameter("month");
String day=request.getParameter("day");
String price=request.getParameter("price");
String publishDate=year+"-"+month+"-"+day;
//把得到的书名、作者转换为汉字编码
bookname=new String(bookname.getBytes("8859_1"),"gb2312");
author=new String(author.getBytes("8859_1"),"gb2312");
//实例化一个SAXBuilder类,来操作XML文档
SAXBuilder sb = new SAXBuilder();
//从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
Document doc = sb.build(new FileInputStream(filepath));
root = doc.getRootElement(); //得到根元素
books = root.getChildren(); //得到根元素所有子元素的集合
Element newbook=new Element("book");
//加入一本新书
Element el=new Element("name");
el.setText(bookname);
newbook.addContent(el);
el=new Element("author");
el.setText(author);
newbook.addContent(el);
el=new Element("publishDate");
el.setText(publishDate);
newbook.addContent(el);
el=new Element("price");
el.setText(price);
newbook.addContent(el);
books.add(newbook);
//把修改的信息记入XML文档
String indent = " "; //定义生成的XML文档的格式
boolean newLines = true;
XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
outp.output(doc, new FileOutputStream(filepath));
msg="已经成功的添加了\""+bookname+"\"";
}catch(NullPointerException npe){
/*如果用户第一次访问这个文件,没有数据上传,则会抛出NullPointerException。
*这样做有些投机,实际应用中不建议这样用,可以使用
* if(request.getParameter("Submit")!=null){}进行判断有无数据提交*/
}catch(Exception e){
out.println(e);
}
%>
13.应用软件系统模型:以数据为中心的系统模型;以执行为中心的系统模型;面向对象的系统模型和基于总线的系统模型
14.SOA(面向服务的架构)不是一种语言,也不是一种具体的技术,而是一种软件系统的架构,它尝试给出在特定环境下推荐采用的一种架构
15.远程方法调用RMI是sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范,实现JAVA虚拟机通信的技术主要有套接字和JAVA消息服务(JMS)
16.运行RMI一般步骤:
(1)生成远程对象的本地代理和服务器实体
(2)启动RMI注册表
(3)运行rmid并指定策略文件
(4)运行用于注册激活对象的程序,也需要指定策略文件
(5)运行客户程序,也需要指定策略文件。
17.在IIOP上运行RMI明显优于激活对象之类的方法
18.javax.ejb.EnterpriseBean接口是所有EJB的基础接口
19.Session Bean接口:
setSessionContext、ejbCreate、ejbPassivate(将暂时不用的bean实例串行化写入到临时的存储空间)、ejbActivate(将串行化的bean重新导入内存)、ejbRemove
20.两种基本的Entity Bean:容器管理持久性(CMP)和Bean管理持久性的(BMP)
21.实体Bean中要串行化(解除与远程引用的关联)或激活(与远程引用关联)Bean时,因此需在Bean中定义ejbPassivate()和ejbActivate()方法会向这个Bean发出通知。
22.将CMP类Bean转化为BMP类Bean,主要修改ejbLoad()和ejbStore()方法,两方法需包括数据库的访问逻辑。另外可扩展相应的ejbCreate()、ejbRemove()、ejbFindByPrimaryKey(Integer primaryKey)等方法
23.消息驱动的EJB必须实现javax.ejb.MessageDrivenBean和javax.jms.MessageListener两个接口
24.JMS的COnnectionFactory(连接工厂)的初始上下文通过Java命名和目录接口(JNDI)创建。
25.消息Bean工作流程:
(1)受限确定连接工厂和队列
queueConnectionFactory=(QueueConnectionFactory)jndiContext.lookup("java:comp/env/jms/MyQueueConnectionFactory");
queue=(Queue)jndiContext.lookup("java:comp/env/jms/QueueName");
(2)船籍港ianduilie连接、会话和一个消息发送器
queueConnection=queueConnectionFactory.createQueueConnection();
queueSession=queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
message = queueSession.createTextMessage();
(3)把几个消息发送到队列
for (int i = 0; i < NUM_MSGS; i++)
{
message.setText("我是" + msgArray[i] );
System.out.println("Sending message: " +
message.getText());
queueSender.send(message);
}
26.OMG:对象管理组织; CORBA:公共对象请求代理体系结构
27.OMG IDL:用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言,大多数CORBA产品中都提供了IDL到相关编程语言的编译器
28.JNDI命名和目录接口用来简化对目录基础结构的访问,以前需要使用不同的API来访问不同的目录服务,如轻量级的目录访问协议LDAP(LightWeight Directory Access Protocol)或Sun的网络信息服务NIS
29.Web Service三大技术:XML、XSD、SOAP(简单对象访问协议):其中要将SOAP与SOA区分开来。面向服务的体系结构(Service-Oriented Architecture,SOA)
30.从Tomcat4.0开始,Tomcat不再使用系统的CLASSPATH
31.SOAP技术标准:WSDL(Web 服务定义语言)和UDDI(通用性描述、发现与集成),其中UDDI类似于注册来获取公司所提供的SOAP API业务接口
32.消息只应用于应用程序与组件之间的通信
33.JMS (1)异步:JMS提偶那个这将到达的消息发送给客户,客户不用发送请求消息
(2)可靠:JMS API确保消息传送一次而且只传送一次,可靠性差的应用程序可能会丢失消息或者重复接收消息
34.构建企业异构数据源集成系统时必须面对的几个主要问题:一构型、完整性、性能、语义冲突问题为异构数据集成中的共性问题,权限瓶颈、附加约束和集成内容的限定则属于企业异构数据集成的特性问题。
35.数据集成的三种模型:联邦式数据库系统模型、中间件模型和数据仓库模型
36.PKI(公开密钥基础设施)支持身份标识和认证、保密或隐私、数据完整性与不可否认等安全保障,是目前普遍认为最具实用性的方案。
37.OA ,办公自动化、CRM(Customer Relationship Management),即客户关系管理。SCM 供应链管理、ERP是Enterprise Resource Planning (企业资源计划)简称,ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件。
38.四种主要的开源Portal:Pluto、Liferay、eXo、Jetspeed
39.Portlet四种模式:View、edit、help、config
40.Velocity+Turbine能让Web应用程序真正按照MVC模式来开发。
41.OGSA(Open Grid Services Architecture)开往网格服务结构
42.JBPM:java businessprocessmanagement是一种基于J2EE、参考wfmc模型贵发难定义实现的轻量级工作流管理系统。
43.设计模式是不断发展和改进的设计方案的一种抽象,他反映了软件爱你设计人员为了提高软件重用性和灵活性而得到的一种设计结构
结构模式主要是针对系统或者应用程序的整体结构:架构模式指明的是系统级的结构属性,并且会对子系统的结构产生影响;而设计模式缺不会影响子系统的结构。
分享到:
相关推荐
**Java Redis 学习笔记概览** 在Java开发中,Redis作为一个高性能的键值存储系统,常被用于缓存、消息队列、分布式锁等多种场景。本笔记将深入探讨Java与Redis的集成以及如何利用Springboot框架进行高效操作。 1. ...
本篇文章将深入探讨“java后端学习笔记”中的关键知识点,包括消息队列(Message Queuing)服务如ActiveMQ和RabbitMQ、工作流引擎Activity、容器化技术Docker、分布式服务框架Dubbo、网络库Netty、RPC(Remote ...
JAVA学习笔记最新ppt版20 - JDBC 入门 在本章节中,我们将学习 JDBC 的基本概念和使用方法,以及如何使用 JDBC 连接数据库和进行数据操作。 一、 JDBC 简介 JDBC(Java Database Connectivity)是一种 Java API,...
Linux面试专题及答案+ActiveMQ消息中间件面试专题+Java基础面试题+MySQL性能优化的21个最佳实践+微服务面试专题及答案+深入理解java虚拟机+设计模式面试专题及答案+开源框架面试专题及答案+并发编程及答案+Spring...
本压缩包"Java后端学习笔记代码"显然是一个针对Java后端开发的学习资源集合,包含了作者在学习过程中编写的代码示例和笔记。以下是基于这个主题的详细知识点解析: 1. **Java基础**: 作为Java后端开发的起点,掌握...
java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java...
【Java SE学习笔记详解】 Java SE(Standard Edition)是Java平台的核心部分,它为开发桌面应用、服务器端应用以及中间件提供了基础。本笔记主要基于MLDN(Microsoft Learning Dynamic Network)李兴华老师的2009年...
Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...
**Java EE(J2EE)学习笔记概述** Java EE(以前称为J2EE)是Java平台上用于构建企业级分布式应用程序的框架。它提供了一个标准的、可扩展的平台,允许开发者构建多层架构的应用,包括Web应用、客户端应用以及...
本压缩包文件“《java学习》-Java 学习笔记.zip”包含了丰富的学习资源,帮助初学者和进阶者深入理解Java编程。 1. **Java基础知识** - **语法**:Java的基础语法包括变量、数据类型、运算符、流程控制语句(如if-...
现在java家族已经十分强大,每个分支都成为一门学问了,例如web前台开发用的applet,后台要用的servlet;做企业系统,EJB;消息中间件JMS;手机j2me开发手机、数字家电,这也是当初设计java的。
这份"Java架构方面面试及学习笔记.rar"资源包含了广泛的Java后端技术,有助于加深对Java架构的理解和提升相关技能。 1. **Java后端知识**:Java作为服务器端开发的主流语言,其后端知识涵盖了类加载机制、垃圾回收...
### JavaEE 学习笔记概览 #### 一、JavaEE 概念及发展历程 JavaEE(Java Platform, Enterprise Edition)是Sun Microsystems公司为简化企业级应用开发而提出的一套标准化平台,它提供了构建分布式系统的基本框架和...
综上所述,这个压缩包提供的资料全面覆盖了Java开发者从基础到高级的技能,包括Java语言、分布式服务、消息中间件、数据库优化、NoSQL以及Web服务器管理等多个方面。通过深入学习并掌握这些知识,不仅可以应对面试...
kafka消息中间件
在开始之前,首先需要澄清标题“java学习笔记”和描述“Java笔记前辈个人经验,以便于程序员得到更多的经验。能更好的学习Java,更深入的了解Java。”以及提供的部分内容,似乎并不直接关联。内容片段看起来像是一本...
【Java分布式高级架构师课程学习笔记】 在Java分布式高级架构师的学习过程中,涵盖了多个关键领域的技术,包括数据库的高可用方案、缓存系统、消息中间件以及分布式协调服务。以下是对这些主题的深入探讨: 1. **...
- **使用成熟的框架和中间件**:如Spring Cloud、Apache Kafka等,这些工具提供了处理分布式系统常见问题的解决方案。 - **实施微服务架构**:将应用分解为小的服务,每个服务都有自己的数据库和业务逻辑,通过API...