大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、 启用FastInfoset(快速信息集)
专注于为中小企业提供网站设计、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业武夷山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
webservice的性能实在是不敢恭维。曾经因为webservice吞吐量上不
去,对webservice进行了一些性能方面的优化,采用了FastInfoset,效果很明显,极端条件下的大数据量传输,性能提高60%,他可以减
少传输成本,序列化成本和xml解析成本。
Cxf提供了FastInfoset协商机制,实现类见org.apache.cxf.feature.FastInfosetFeature,在bus中启用如下配置:
cxf:featurescxf:fastinfoset force="false"//cxf:features
Force=false表示服务端和客户端第一次通信时会协商(通过检查标准的HTTP头的Accept字段,值为MIME类型的application/fastinfoset)是否启用FastInfoset支持,如果客户端不支持,则不启用快速信息集。
需要在pom中添加依赖:
dependency
groupIdcom.sun.xml.fastinfoset/groupId
artifactIdFastInfoset/artifactId
version1.2.9/version
typejar/type
scopecompile/scope
/dependency
FastInfoset参考:
client和service端都要配置
2、 启用gzip压缩支持
客户端和服务器端是否使用Gzip压缩,也是基于http协议协商的(检查请求
header 中是否有Accept-encoding:gzip)。但是这里需要仔细权衡下。对于小数据量,启用gzip压缩支持是吃力不讨好的行为,
数据量很小的时候,gzip压缩结果不明显,还浪费cpu。我们需要权衡数据大小,按照经验设置threshold为10*1024byte。
在bus中启用如下配置:
bean class="org.apache.cxf.transport.common.gzip.GZIPFeature "
property name="threshold"value10240/value/property
/bean
官方文档指定是是配置org.apache.cxf.transport.http.gzip.GZIPFeature,但是这个类会找不到,可能是官方文档年久失修,造成一些混乱。官方文档中也没提示指定threshold,请参考GZIPFeature源代码。
参考
3、 使用slf4j代替cxf默认日志组件
CXF 默认使用java.util.logging作为日志打印组件,其性能我就不过多评价,也不太便于我们做统一日志管理。目前系统使用的slf4j作为日志打印组件,替换如下:
在classpath中加入META-INF/cxf/org.apache.cxf.Logger文件,文件内容为
org.apache.cxf.common.logging.Slf4jLogger
4、 测试中启用日志
bus中加入cxf:logging/,请在测试环境中启用有助于debug
补充:
1、如何自定义返回码:
请求在service中处理遇到异
常后,会调用请求链中所有拦截器的handleFault方法,参考PhaseInterceptorChain#unwind,然后判断请求是否单向请
求,如果不是,则构建异常请求链,并构建异常message对象,调用异常请求链中的handleMessage 方法(参
考:AbstractFaultChainInitiatorObserver)
JAXWSMethodInvoker
转发soap请求到指定对象的方法,如果在请求处理失败,调用updateHeader方法,把请求时的soap
header放入返回header中。但是不同通过继承JAXWSMethodInvoker来实现清除异常时soap
header也返回给客户端的问题,因为JAXWSMethodInvoker没有采用注入的机制
(JaxWsServerFactoryBean#createInvoker)也没有chain.异常时,会由这些拦截器处理返回请求:
setup [ServerPolicyOutFaultInterceptor]
prepare-send [MessageSenderInterceptor, Soap11FaultOutInterceptor]
pre-stream [LoggingOutInterceptor, StaxOutInterceptor]
pre-protocol [WebFaultOutInterceptor]
write [SoapOutInterceptor]
拦截器初始化类OutFaultChainInitiatorObserver
我们可以在异常链中加入清理soap header的拦截器SoapHeaderOutFilterInterceptor,清理掉在系统异常时soapheader中有信息的问题。
返回错误状态码,在执行Soap11FaultOutInterceptor拦截器中被写死。
message.put(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
为了使返回数据中有错误码,需要在Soap11FaultOutInterceptor后面加入拦截器
2、在项目测试时遇到一个报错
invalid LOC header (bad
signature),这个问题是因为jar包损坏照成的,虽然构建路径中有这个jar,但是还是会出现loadClass失败,清理maven 本地仓
库目录的jar,修改pom(比如加上一空行)让m2e重新加载。
3、Cxf中有一个很不错的特性,支持javascript访问soap
webservice,客户端访问类似的请求,会生成
javascript 客户端,js编程时就可以使用此客户端提供的对象,启用此功能需要在引入
import resource="classpath:META-INF/cxf/cxf-extension-javascript-client.xml" /并且在依赖中加入:
dependency
groupIdorg.apache.cxf/groupId
artifactIdcxf-rt-javascript/artifactId
version2.4.1/version
typejar/type
scopecompile/scope
/dependency
对于Tomcat的处理耗时较长的问题主要有当时的并发量、session数、内存及内存的回收等几个方面造成的。出现问题之后就要进行分析了。
1.关于Tomcat的session数目
这个可以直接从Tomcat的web管理界面去查看即可
或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多
2.监视Tomcat的内存使用情况
使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等
JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进行内存抽样等,检查每个类的使用情况
3.打印类的加载情况及对象的回收情况
这个可以通过配置JVM的启动参数,打印这些信息(到屏幕(默认也会到catalina.log中)或者文件),具体参数如下:
-XX:+PrintGC:输出形式:[GC 118250K-113543K(130112K), 0.0094143 secs] [Full GC 121376K-10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K-781K(9088K), 0.0123035 secs] 118250K-113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K-8614K(9088K), 0.0000665 secs][Tenured: 112761K-10414K(121024K), 0.0433488 secs] 121376K-10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用,输出形式:11.851: [GC 98328K-93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用。输出形式:Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用。输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC: 打印GC前后的详细堆栈信息
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析
-verbose:class 监视加载的类的情况
-verbose:gc 在虚拟机发生内存回收时在输出设备显示信息
-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息
4.添加JMS远程监控
对于部署在局域网内其它机器上的Tomcat,可以打开JMX监控端口,局域网其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不支持),同样是在JVM启动参数中配置即可,配置如下:
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.71.38 设置JVM的JMS监控监听的IP地址,主要是为了防止错误的监听成127.0.0.1这个内网地址
-Dcom.sun.management.jmxremote.port=1090 设置JVM的JMS监控的端口
-Dcom.sun.management.jmxremote.ssl=false 设置JVM的JMS监控不实用SSL
-Dcom.sun.management.jmxremote.authenticate=false 设置JVM的JMS监控不需要认证
5.专业点的分析工具有
IBM ISA,JProfiler等,具体监控及分析方式去网上搜索即可。
单个Tomcat的处理性能是有限的,当并发量较大的时候,就需要有部署多套来进行负载均衡了。
集群的关键点有以下几点:
1.引入负载端
软负载可以使用nginx或者apache来进行,主要是使用一个分发的功能
参考:
(nginx负载)
(apache负载)
2.共享session处理
目前的处理方式有如下几种:
1).使用Tomcat本身的Session复制功能
参考(Session复制的配置)
方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率
2).使用第三方来存放共享Session
目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行Tomcat的Session管理
参考(使用MSM管理Tomcat集群session)
3).使用黏性session的策略
对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的session sticky策略,目前应用也比较多
参考:(tomcat session sticky)
nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译)
优点是处理效率高多了,缺点是强会话要求的场合不合适
3.小结
以上是实现集群的要点,其中1和2可以组合使用,具体场景具体分析吧~
Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。针对JVM的优化目前主要在两个方面:
1.内存调优
内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
其各项参数如下:
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
2.垃圾回收策略调优
垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100"
具体的垃圾回收策略及相应策略的各项参数如下:
串行收集器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:设置串行收集器
并行收集器(吞吐量优先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
并发收集器(响应时间优先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片
3.小结
在内存设置中需要做一下权衡
1)内存越大,一般情况下处理的效率也越高,但同时在做垃圾回收的时候所需要的时间也就越长,在这段时间内的处理效率是必然要受影响的。
2)在大多数的网络文章中都推荐 Xmx和Xms设置为一致,说是避免频繁的回收,这个在测试的时候没有看到明显的效果,内存的占用情况基本都是锯齿状的效果,所以这个还要根据实际情况来定。
Tomcat的Connector是Tomcat接收HTTP请求的关键模块,我们可以配置它来指定IO模式,以及处理通过这个Connector接受到的请求的处理线程数以及其它一些常用的HTTP策略。其主要配置参数如下:
1.指定使用NIO模型来接受HTTP请求
protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型来接受HTTP请求。默认是BlockingIO,配置为protocol="HTTP/1.1"
acceptorThreadCount="2" 使用NIO模型时接收线程的数目
2.指定使用线程池来处理HTTP请求
首先要配置一个线程池来处理请求(与Connector是平级的,多个Connector可以使用同一个线程池来处理请求)
executor maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/
connector executor="tomcatThreadPool" 指定使用的线程池
3.指定BlockingIO模式下的处理线程数目
maxThreads="150"//Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。
minSpareThreads="25"---Tomcat初始化时创建的线程数。默认值4。如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。Tomcat初始化时创建的线程数量也由此值设置。
maxSpareThreads="75"--一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。一旦创建的线程超过此数值,Tomcat会关闭不再需要的线程。线程数可以大致上用 “同时在线人数*每秒用户操作次数*系统平均操作时间” 来计算。
acceptCount="100"----指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。如果当前可用线程数为0,则将请求放入处理队列中。这个值限定了请求队列的大小,超过这个数值的请求将不予处理。
connectionTimeout="20000" --网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
4.其它常用设置
maxHttpHeaderSize="8192" http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。
disableUploadTimeout="true" 上传时是否使用超时机制
enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false
compression="on" 打开压缩功能
compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩
5.小结
关于Tomcat的Nio和ThreadPool,本身的引入就提高了处理的复杂性,所以对于效率的提高有多少,需要实际验证一下。
6.配置示例
connector redirectPort="8443"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
URIEncoding="UTF-8"
disableUploadTimeout="true"
enableLookups="false"
compression="on"
compressionMinSize="10240"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
...
最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!
方向很多 就一般Java方向而言(另外还有C++、C#等多种):
Unix/Linux操作系统
Unix开发环境
Unix操作系统概述、Unix文件系统、Unix的Kernel和Shell、远程登录的原理、用户管理命令、基本文件和目录操作命令、Unix操作系统的特殊字符、使用vi命令编辑文本文件、使用FTP进行文件传输、初始化文件及环境变量的配置、Shell脚本及crontab命令。
熟练掌握Sun Solaris Unix系统基本操作命令,能够胜任Unix/Linux系统下的Java程序开发和管理工作。
Java SE开发
Java语言基础
Java SE 6.0核心语法归纳讲解,包括Java语言的特点、环境的配置、开发基本命令、类的定义技巧、方法调用过程、对象生成原理与内存分布、标识符、关键字和数据类型、运算符和表达式、Java商业运算要点、流程控制语句、Java数组和链表等算法和数据结构;同时掌握Eclipse开发工具的使用。
熟练掌握Java核心语法
Java面向对象编程
囊括了Java面向对象的精髓,包括面向对象三大特性——封装、继承与多态,各种修饰符在面向对象思想下的综合运用,抽象类的特点和使用技巧,面向接口编程的思想和实践,内部类的应用,JDK核心类包括Object、String、Date和Calendar等类的使用和设计思想,正则表达式,自动封箱和解箱,Java异常处理,Java集合框架,泛型的语法和使用等。
熟练掌握Java面向对象思想
Java高级应用
主要研究:中高级软件工程师的必修利器——Java反射编程,Java图形开发组件的开发步骤和应用技巧,事件模型的设计理念和应用,Java多线程编程,Java的I/O流,Java网络编程等。
熟练掌握Java高级编程,这部分是作为高级程序员必须掌握的技术
XML语法与解析
XML(eXtensible Markup Language)的中文名称是可扩展标记语言,是树形的概念层次结构,简而言之它就是一种保存结构化数据的格式。XML作为一种面向内容的描述语言,通过基于树形数据结构的层次化概念分类体系模型,在很大程度上弥补了HTML作为网络标准语言在概念层次关系的语义表达上的不足。
主要学习内容:XML的意义、语法结构、XML良构的规范;DTD的意义和语法、使用名称空间的技巧;Schema的意义、语法,使用Java API解析XML;基于Java DOM和SAX的XML处理技术。
掌握目前最通用的网络数据格式,并能熟练在商业开发中应用
数据库编程
Oracle SQL
Oracle公司的Oracle数据库产品是当今的高端企业级应用的主流产品。我们主要学习:Oracle 10g数据库原理,SQL语句(DDL、DML、TCL、DCL)的语法,项目中经典SQL语句重现,Oracle数据库函数包括字符函数、数值函数、日期函数、数据类型转换函数以及组函数,数据库的设计,表连接包括等值连接、非等值连接、自连接和外连接,SQL子查询,Oracle序列对象在项目中的运用,索引及视图,系统表的应用技巧,Oracle SQL的错误排查及调优解决方案。
掌握Oracle数据库设计、操作和开发
MySQL数据库
MySQL5.0数据库的管理和开发要领,掌握MySQL和Oracle数据库的异同点。
掌握MySql数据库的设计、操作和开发
JDBC编程
JDBC为Java开发者使用数据库提供了统一的编程接口,使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。学习的主要内容有:JDBC的编程步骤,重要的编程接口,JDBC异常处理,JDBC中使用事务,Batch Updates批量更新,Blob/Clob等新数据类型,JNDI,DataSource,数据库连接池的管理等。逐步掌握基于JDBC的Oracle,SQLServer,DB2,MySQL等数据库连接技术。
熟练掌握Java语言对各种数据库的连接技术
系统分析与设计
软件开发流程及UML
学习软件开发过程包括瀑布模型、统一开发过程(USDP),CMMI5级软件设计规范,掌握统一建模语言UML,掌握软件的静态建模和动态建模。掌握面向对象中对象的关系。
掌握软件开发流程及UML
设计原则与模式
原则和模式是分析设计人员与程序员在开发过程中经验的总结,学习模式就是获取经验。
掌握面向对象的设计原则:“开—闭”原则(OCP)、里氏代换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)、组合/聚合复用原则(CARP)、迪米特法则(LoD)。
掌握主流的设计模式:工厂模式(Factory)、单例模式(Singleton)、观察者模式(Observer)、组合模式(Composite)、状态模式(State)等,以及重要的架构模式:Dao模式、MVC模式。
掌握面向对象的设计原则和模式。区别于激情代码,重点在于知道软件为什么要这么做,保证代码质量,保证科学的开发流程。按照CMM3的标准来设计软件和管理开发过程。
Web开发基础
HTML
基于浏览器的语言HTML:
了解HTML基本文档结构、常用的meta,掌握HTML列表和表格基本操作,了解HTTP GET和POST请求及响应的协议格式,掌握表单的基本原理,掌握GET和POST提交方式及其区别,熟练掌握常用表单元素。
掌握企业级应用客户端页面技术
CSS
CSS意为层叠样式表(Cascading Style Sheets)用于定义HTML元素的位置和样式。CSS样式定义通常存储在单独的文件中, 可以极大提高工作效率。掌握CSS基本语法和CSS选择器,掌握CSS定位技术,了解CSS内外边距、边框等特性。
掌握企业级应用客户端页面样式技术
JavaScript
基于浏览器的动态脚本技术JavaScript:
JavaScript 被设计用来向 HTML页面添加交互行为,是一种被浏览器解释执行的脚本语言。我们可以应用JavaScript来响应事件, 实现复杂交互,验证数据, 提高系统健壮性,获取和改变HTML元素及CSS属性,动态改变页面外观,逐步向RIA(Rich Internet Applications)迈进。
掌握JavaScript基本数据类型及其运算,熟练使用数组、日期等,掌握基本的对于页面元素的操作,掌握Prototype.js的基本方法,掌握HTML DOM模型,Window对象,操作Cookie,定时器等。
掌握企业级应用客户端动态脚本技术
Java Web开发
Servlet编程
学习要点:Web服务器的安装和配置,编写及部署Servlet,读取请求信息,生成响应信息,维护客户状态,过滤请求和响应,监听器的应用,对持久层资源的访问,使用包装器拦截响应,Session与Cookie技术,Servlet互操作,访问应用上下文,MVC架构模式的思想和运用。
JSP编程
JSP是在Java服务器端运行的页面,JSP本身就是一个基于文本的文档,他不仅可以包含静态的HTML内容,也可以包含动态的Java代码,服务器容器可以将JSP转换成Servlet发布,并接受请求,提供响应。
学习内容:JSP的特点、运行原理及执行过程,JSP的脚本元素,JSP指令的分类及详解,JSP中中常用的动作,JavaBean组件在JSP中的应用,JSP内置对象详解,JSP异常处理及提高程序健壮性要领,重定向与转发的本质区别,URL回写,自定义标签要领,EL表达式,JSTL核心标签库,字符集的处理和国际化。
Web系统架构
着重掌握B/S架构、B/S/A/D架构下的程序设计与开发,深入理解Web MVC架构模式,完成Web应用的调试和部署,动态发布Web应用。
Ajax编程
Ajax(Asynchronous JavaScript and XML)由 HTML、JavaScript技术、DHTML和DOM组成,这一杰出的方式可以将笨拙的Web界面转化成交互性优越的Ajax应用程序。
主要内容:Ajax技术构成及核心编程,发送请求及处理响应,Ajax数据传输格式(纯文本、XML及JSON),XMLHttpRequest详解,Ajax库及框架介绍。
jquery的事件全部底层化了,不需要用户操心,js原生事件就全要自己写自己调优
用firedebug插件来调试JS需要掌握以下快捷键:
直接按Ctrl+Shift+K 三键组合直接打开Firebug.这里的调试网页主要以修改百度的首页。
第一:调试网络情况
打开百度首页。同时打开 firebug。(Ctrl+shift+K)可以右键点击网络标签查看网页源代码。
第二:调试器
调试器可以查看网页请求的js脚本以及脚本的定义,以及脚本的变量的实时值。如图: