Spring是一个轻量级框架,也是一个容器,Spring实质上讲就是一个Bean工厂,主要用来管理Bean的生命周期和框架集成。
(1).有IOC控制反转,对象不用new,交友spring来创建实例
(2).DI依赖注入,控制反转是把dao依赖注入到servic层,然后service层反转给action层,Spring的顶层容器为BeanFactory,常用的ApplicationContext为它的子接口,实现了工厂模式,
(3).Spring还提供了AOP的支持,方便在切面级开发(如Service层的事务,使用的是动态代理和cglib代理)
在使用Spring框架的过程中、一定会用到控制反转、但是往往所需要的资源还需要其他资源的支持、这个过程就需要依赖注入的支持
在以往的事务管理中,事务的代码都是固定的(开启事务,提交事务,回滚事务),代码很难维护,而spring的事务,采用的AOP思想,将事务代码切入到service层,使业务代码和事务管理相分离,只需要用注解或在XML中配置即可,大大提高了代码的维护性
IOC主要来解决对象之间的依赖问题,把所有的bean的依赖关系通过配置文件或者注解关联起来,降低了耦合度
(1).配置数据源
(2).配置SQL会话工厂、映射文件
(3).事务管理器
(4).开启注解功能,并配置扫描包(或在XML中直接配置)使用的是动态代理和cglib代理
(5).开启事务注解驱动(或直接在XML配置)
1.spring注解
@Component
@Service
@repository
@Transactional
@Resource、@Autowired
@Value(需要在xml文件中配置 )
@Controller
@RequestMapping
@ResponseBody@RequestBody(json交互)
降低对象耦合度,让代码更加清晰,提供一些常见的模版
(1)构造器注入:通过构造方法初始化
(2)setter注入:通过setter方法初始化注入
(3)基于注解注入:@Resource、@Autowired
注意:在实际开发中常用setter注入和注解注入。
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是不在控制器里面写成员变量
(原理是每次请求到达,分配一条线程来访问方法的副本)
@Controller 注解:该注解表明该类扮演控制器的角色,Spring不需要你继承任何其他控制器基类或引用Servlet API。
处理器映射器(用户请求路径到Controller方法的映射)-->处理器适配器(用于执行处理器)-->视图解析器(用于视图显示)
注意:springmvc控制器是老大,不怎么干活,是指挥这样的角色
用于处理用户请求URL到Controller方法的映射
直接在形参里面声明这个参数(或包装参数的javaBean,数组和List集合也可以)就可以,但必须名字和传过来的参数一样
直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面
(1) ModelAndView: 封装的是视图+域值(一般不用,耦合度高)
(2) String: 返回路径字符串,一般和Model(向页面传参)一起使用(常用)
(3) void:常用于json交互(接收json,在形参前面打@RequestBody注解)
(4) JavaBean或集合:用于发送json数据(在返回值前面或方法上加@ResponseBody注解)
SpringMvc根据配置文件中InternalResourceViewResolver(内部资源视图解析器)的前缀和后缀,用前缀+返回值+后缀组成完整的返回值
在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.uu456.com"
ModelAndView
(1) 可以在形参上声明一个request,或者session先拿到session,然后就可以放入数据
(2) 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key,然后在方法形参上设置map,将数据存入map中集合,map的key为session的key
通过Jackson框架就可以把Java里面的对象直接转化成js可以识别的Json对象 具体步骤如下 :
1.加入Jackson.jar
2.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
要加上@ResponseBody注解
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)(参数封装)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器执行处理器(Controller,也叫后端控制器)。
5、处理器(Controller)执行完成返回ModelAndView
6、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
7、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
8、ViewReslover解析后返回具体View
9、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
10、DispatcherServlet响应用户
接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.(接口名要和映射文件名一致)
接口定义规则:
(0) 映射中的namespace要和接口的全路径名称相同
(1) 接口的方法名要和映射文件中的id值一致
(2) 接口的形参和映射文件中的ParameterType一致
(3) 接口的返回值要和映射文件的ResultType要一致
当Sql语句比较简单时候,用注解绑定,复杂的查询语句,用xml绑定,一般用xml绑定的比较多
在MyBatis里面最主要最灵活的的一个映射对象的ResultMap,在它里面可以映射键值对, 默认里面有id节点,result节点,它可以映射表里面的列名和对象里面的字段名. 并且在一对一,一对多的情况下结果集都要用ResultMap
MyBatis里面的核心处理类叫做SqlSession
MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,
默认是打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置
(1) ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。
(2) ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。
(3) Ibatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句,
因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。
一对多的关系 :property: 指的是集合属性的值, ofType:指的是集合中元素的类型
多对一的关系:property: 指的是属性的值, javaType:指的是属性的类型
Singleton:单例
Non-singleton或prototype:多例
BeanFactory是配置、创建、管理bean的容器,有时候也称为bean上下文。Bean与bean的依赖关系,也是由BeanFactory负责维护的。
用于指定spring容器中的其它bean.两个基本属性是bean和local
工厂模式 单例模式 代理模式
Depends-on用于当前Bean初始化之前显示的强制一个或多个bean被初始化
BeanWrapper类是一个对JavaBean进行各种操作的工具类
BeanWrapper本身是一个接口,BeanWrapperImpl实现了BeanWrapper
constructor-arg >
相当于: StaticFactoryBean staticFactoryBean=StaticFactoryBean.静态方法名
相当于: DynamicFactory dynamicFactory=new DynamicFactory();
DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名
(1)spring AOP --面象切面编程(如:事务)
(2)spring DAO --数据访问对象
(3)spring ORM --对象关系影射(如JdbcTemplate)
(4)spring Context --上下文配置,向Spring框架提供上下文信息
(5)spring WEB --WEB上下文模块
(6)spring WEB-MVC --实现了MVC
(7)spring CORE --核心容器提供Spring框架基本功能
面向切面编程
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
AOP 把软件系统分为两个部分:核心关注点和横切关注点。
所谓的核心关注点,是业务处理的主要流程,也就是说这个解决方案要做的事。
所谓横切关注点,是与核心业务无关的部分,它把常发生在核心关注点的多处,而各处基本相似,如日志,事务,权限等进行横向抽取,从而来减少重复的代码
常用的方式有三种:
(1)setter注入
(2)构造器注入
(3)注解注入 @AutoWare @Resource
元素name属性可以一次为定义多个别名
例:
元素一次只能定义一个别名
例:
注意: alias元素name属性是bean实例名
答: 用5种
分别是:
(1). singleton IOC容器只会创建一个Bean的唯一的实例
(2). prototype IOC容器在每次请求该Bean的时候都创建一个新的实例
(3). request 在一次Http请求中 IOC容器会返回该Bean的同一个实例,而对于不同的用户请求,则会返回不同的实例
(4). session 在一次Http请求Session中IOC容器会返回该Bean的同一个实例,而对于不同的用户Session,则会返回不同的实例
(5). globalsession在一个全局Http请求Session中
Hibernate扮演的是数据持久层 它的作用是实现持久化对象和数据库表
之间的映射,形成持久化对象和数据库表中数据的一个转换平台
指的是查找到某个对象后,通过这个对象去查询关联对象的信息时的一种策略。
Transient(瞬态) ,persistent(持久态)和Detached(游离态,托管态)
sql拼接(不建议)
使用通配符,然后用预处理对象给sql语句赋值(建议,防sql注入,加快查询速度)
一对一关联
一对多关联
多对多关联
HQL检索方式
QBC检索方式
SQL检索方式
save-update
session.close();方法后
Cascade代表是否执行级联操作,Inverse代表是否由己方维护外键关系,一般情况下双向关联中必须要有一方放弃维护外键
(1)get立即加载load延迟加载
(2)get当查询不到结果时返回null,load会报异常
(3)get返回是实体类,而load返回的是代理对象
HQL是面向对象的查询语言,它会以对象和表进行映射,不过最后发送到数据库的依旧是sql。
Hibernate是数据持久层的ORM框架,它提供了强大,高效的将JAVA对象进行持久化操作的服务
Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高
创建配置文件读取对象Configuration ,然后使用这个对象来创建SessionFactory对象,因为sessionFactory是重量级的,所以一个项目只创建一个SessionFactoty对象,没次请求创建一个和线程绑定的Session对象
表对应类
记录对应表的对象
表的字段对应类的属性
数据库系统
ORM的全称是Object-Relational Mapping 翻译成中文就是“对象-关系映射”
ORM组件的主要功能就是实现将对象的持久化并封装数据库访问的细节
ORM本身并不是一个组件,它是具用某种功能的组件的总称,也可以说是一种框
架结构
Action的作用是接受用户的请求,通过调用业务方法实现业务处理的功能
Struts属于表示层的MVC模式的一个框架,它的作用主要体现在以下几个方面:
(1)接收并封装用户传过来的参数,以及相应页面
(2)调用业务方法,完成业务处理,还要包括处理后的显示工作。
标签库是组合在一起的一组JSP自定义标签。
标签库由以下组件组成:
1) 标签处理程序
2) 标签库描述符(TLD)文件
3) 应用程序部署描述符(web.xml)文件
4) JSP页面中标签库的声明
(1).客户端浏览器发出HTTP请求.
(2).根据web.xml配置,该请求被FilterDispatcher接收
(3).然后回家再大量的配置文件,如default.proproties default.xml struts.xml
(3).根据struts.xml中的namespace和action的name和method,找到对象的Action类和方法,并通过IoC方式,将值注入给Aciton
(4).Action调用业务逻辑组件处理业务逻辑。
(5).Action执行完毕根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
(6).返回HTTP响应到客户端浏览器
Struts2的action是线程安全的,因为每次请求Strtus2都会创建一个Action的实例对象,请求结束之后销毁Action对象
从MVC角度来看看struts的体系结构(Model 2)与工作原理:
1)模型(Model)
普通的javaBean,用于参数的封装以及一些功能的处理
2)视图(View)
视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。
3)控制器(Controller)
在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。
ActionServlet
RequestProcessor
Action
ActionMapping
ActionForward
(1).Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。mybatis可以通过XML或注解方式灵活配置要运行的sql语句,可严格控制sql执行性能,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
(2).但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
(3).Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高
(4).总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。
1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。
2、springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开 发,传递参数是通过类的属性,只能设计为多例。
3、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值, 将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用 jstl。
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
类是对象的抽象,是模型概念,代表的是具有相同属性和行为的一类事物
对象是类的具体表达,而类则是对象的抽象表达。
java.lang 提供常用的类、接口、一般异常、系统等编程语言的核心内容。
java.util 包含日期、日历、向量、堆栈等实用工具。
java.io 包含输入输出流类、文件类等与输入输出I/O有关的类。
java.awt 包含窗口和屏幕元素类,事件处理接口等与图形用户界面有关的内容。
java.applet 提供为编写applet小程序所需要的类。
java.text 提供与文本有关的类。
java.net 包含url类等与网络传输有关的东西。
java.sql 提供与数据库应用相关的类和接口。
(1)成员特点的区别:抽象类可以有变量、常量、构造方法、一般方法、抽象方法;接口有且只能有常量和抽象方法。
(2)关系特点的区别:
类与类之间是继承关系,只能单继承,不能多继承,但是能够多层继承;
类与接口之间是实现关系,可以单实现也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口之间是继承关系,可以单继承也可以多继承;
(3)设计理念的区别:抽象类定义的是该继承体系的共性功能,是is a的关系。接口定义的是该体系的扩展功能,是like a的关系。
1). 寄存器:我们在程序中无法控制
2). 栈:存放基本类型的数据和对象的引用
3). 堆:存放用new产生的数据
4). 静态域:存放在对象中用static定义的静态成员
5). 常量池:存放常量
6). 非RAM(随机存取存储器)存储:硬盘等永久存储空间
isLowerCase() 判断字符串是否为小写
isUpperCase() 判断字符串是否为大写
isDigit() 判断是否为数字
isDefined() 确定字符是否为Unicode字符
isLetter() 是否为字母
isSpaceChar() 是否为Unico空白字符
isWhitespace() 根据JAVA标准是否为空白字符
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s
String是长度固定的字符串,而其他两个是长度可变的字符串。
StringBuffer和StringBuilder的区别
StringBuffer是JDK1.0版本的,线程是安全的,效率比较低。
StringBuilder是JDK1.5出现的,线程不安全,效率高。
他们的共同点是:都是长度可变的字符串。
String类是final类故不可以继承。
throws
定义在方法的声明上,后面跟的是异常类名;
可以跟多个异常类名,用逗号隔开;
表示抛出异常,需要由调用者处理。
Throw
定义在方法体内,跟的异常对象名;
只能跟一个异常对象,
表示抛出异常,由方法内部的语句来处理。
StringIndexOutOfBoundsException 、
ArrayIndexOutOfBoundsException 、
ArithmeticException 、
IllegaArguementException 、
NullPointException
就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回与参数最接近的长整数.
switch(expr1)中,expr1是一个整数表达式。应该是 int、 short、 char byte。
long,string 都不能作用于swtich
GC是垃圾回收机制(Gabage Collection)
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,
Java语言没有提供释放已分配内存的显示操作方法。
方法重载发生在一个类中,方法名相同,参数不同(数据类型或顺序),与返回值无关
方法重写是发生在子父类之间,方法声明必须相同
数组没有length()这个方法,有length的属性。String有length()这个方法
抽象类是仅实现了部分方法的类,并且用abstract修饰的类叫抽象,抽象类中可以存在变量,常量,构造方法,以及普通方法.
1) 抽象类目的是增强程序的扩展性和兼容性
3)抽象类应当拥有尽可能多的共同代码,以提高代码的复用率。
4)抽象类应当拥有尽可能少的数据。
(1)是程序对外暴露的规则
(2)接口是程序对外的功能扩展
(3)接口是用来多实现的
(4)接口的出现降低了类与类之间的耦合性。
OOA-Object Oriented Analysis 面向对象的分析
OOD-Object Oriented Design 面向对象的设计
OOI-Object Oriented Implementation 面向对象的实现
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
(1)JAVA反射机制是在运行状态中,可以对于任意一个类,都能够知道这个类的所有属性和方法
(2)对于任意一个类,都能够调用它的任意一个方法,以及可以动态获取类的信息
一般分为表示层、业务层、数据持久层
(1)get提交时参数会在地址栏显示,post参数在请求体中
(2)post相对get,数据传出比较安全
(3)get有大小限制(不能大于2kb),而post理论上没有大小限制(所以在问价上传中必须要使用post提交)
1) 支持客户/服务器模式。
2) 简单快速
3) 灵活:HTTP允许传输任意类型的数据对象
4) 无连接:无连接的含义是限制每次连接只处理一个请求
5) 无状态:HTTP协议是无状态协议。
不需要实例化类的对象,只需要类名点的形式去调用,可以再工具类中定义静态方法,方便于调用
Set里的元素是不能重复的,用iterator()方法来区分重复与否。
==:
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
equals():
引用类型:默认情况下,比较的是地址值,可进行重写,比较的是对象的成员变量值是否相同
1)静态方法以类名点的形式调用
2) 静态方法不能以任何方式引用this和super关键字,因为加载静态方法的是否,对象还没有创建
3) 静态方法以及变量不属于任何一个对象
动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
java中的保留字,现在没有在java中使用。
启动一个线程是调用start()方法,处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。
byte、short、char、int。JDK1.5以后可以使用枚举,1.7之后可以使用String
可以,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
新建 就绪 运行 阻塞 死亡
字节流,字符流
字节流继承于:InputStream OutputStream
字符流继承于:InputStreamReader OutputStreamWriter
(1)静态变量在类中,不属于实例对象,属于类所有,只要程序加载了字节码,不用创建实例对象静态变量就会被分配空间, 已经可以使用。
(2)实例变量是某个对象的属性,只有实例化对象后,才会被分配空间,才能使用。
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
序列化的实现:
将需要被序列化的类实现Serializable接口,只是为了标注该对象是可被序列化
不可以,如果其中包含对象的method();不能保证对象初始化.
用break; return 方法。
1).继承
2).封装
3).多态性
java.lang.String类是引用数据类型,被final所修饰,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。
一般异常也叫检查时异常,这种异常,编译器强制要求我们去try/catch,否则编译不通过
&是位运算符,表示按位与运算,两边都会运行
&&是逻辑运算符,表示逻辑与(and),如果左边为false,右边不会执行
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法
cookie,url重写,session,隐藏表单域。
不可以
Jps和Servlet之间可不可以用session传值?
可以
cookie是会话跟踪技术,常常用于传输隐私数据,可设置cookie在客户端保存的时长
cookies给网站和用户带来的好处非常多:
1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
2、Cookie能告诉在线广告商广告被点击的次数 ,从而可以更精确的投放广告
3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点
4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务
JSP是使用如下的语法格式来创建cookie的:
Cookie cookie_name =new Cookie(""Parameter"",""Value"");
例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);
对IE而言不是同一个SESSION
当用户请求服务器时,服务器会将sessionId保存cookie中,返回给客户端,对于其他浏览器来说,当用户不主动要求服务删除session的时候,session会有一个有效时长,默认为30分钟,当唱过时长后,服务器会认为客户端停止活动,会删除session(有些时候是kookie丢失了,而不是说session失效了)
Cookie和Session都可以用来在多个页面之间共享数据,区别是Cookie保存在客户端,可以设置比较长的保存时间.而Session保存在服务器端,通常生存时间较短。如果客户端禁用了Cookie,Cookie将无法工作,而session不受这一影响。一般来说保密性高、保存时间短的信息适合用session来存放,而Cookie适合存放需要长期保存的非敏感数据。
可以将购物车(Map集合)存放在session当中
使用setMaxAge(int exp)方法,单位是秒
如果Cookie被禁用,session将通过url重写的方式来传送,所以不会影响session的使用
JSP有6种常用基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
forward是转发送,redirect是重定向
(1)重定向地址栏的路径会发生改变,转发不会
(2)转发是服务器端行为,重定向是浏览器端行为
(3)转发是一次请求一次响应,而重定向是两次请求两次响应
(4)转发可以使用request传输数据,而重定向不能
Jsp中使用动作,servlet中使用RequestDistpatcher对象的forward方法"
给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
(web容器就是程序运行的环境,该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准,这样的容器就是web容器,例如:TOMCAT,WEBLOGIC,WEBSPHERE等)
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。
(1) request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
(2) response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头 信息等)
(3) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
(4) pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、()(5) servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
(6) session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
(7) applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
(8) config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
(9) page表示从该页面产生的一个servlet实例。
request对象的getXXXX方法"
一、硬件环境
C/S用户固定,并且处于相同区域,要求拥有相同的操作系统。
B/S要有操作系统和浏览器就行。与操作系统平台无关。
二、客户端要求
C/S客户端的计算机电脑配置要求较高。
B/S客户端的计算机电脑配置要求较低。
四、软件安装
C/S每一个客户端都必须安装和配置软件,客户端不必安装,使用浏览器访问,易推广。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。
五、软件升级和维护
C/S每一个客户端都要升级程序。可以采用自动升级。BS客户端不必安装及维护。
六、安全性
C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。
在会话的开始,浏览器加载Ajax引擎
请求动作通过JavaScript调用Ajax引擎来代替.
引擎负责绘制用户界面以及与服务器端通讯。
Ajax引擎采用异步交互过程--局部刷新页面。
一个 JavaScript 对象。是Ajax 的核心。
该对象的方法和属性。
open():建立到服务器的新请求。
send():向服务器发送请求。
readyState:提供当前 HTML 的就绪状态。
responseText:服务器返回的请求响应文本。
客户端和服务器通过一部交互,从而实现页面的局部刷新,增强用户的体验
(1)普通B/S模式(同步)AJAX技术(异步)
(2)同步: 提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理->处理完毕 ,期间用户可以有其他操作
(3)同步是阻塞模式,异步是非阻塞模式
容器就是符合某种规范的能够提供一系列服务的管理器
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
第一种形式(恶汉式):
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
第二种形式(懒汉式):
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance==null)
instance=new Singleton();
return instance;
}
}
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}