1.@RequestMapping中的参数
value 指定request请求的实际地址
method 指定request请求提交的类型 post get put
consumes 指定处理请求的提交内容类型(context-type) #application/json ,text/html
produces 指定返回的内容类型,仅当request请求头中(Accept)类型中包含该指定类型才返回
params 指定request中必须包含某些参数值时,才让该方法执行
headers 指定request中必须包含某些指定的header值,才能让该方法处理请求
=================================
2.Post和get
post和get都是http协议中用于数据传输和接收的方式,协议中一般要求get通过将参数放在url中传输,post则没
有,本质是其实是tcp连接,get一次发送一个tcp数据包,post发送两个,一个是header,一个实体,实体中的数
据支持多种编码可以对其进行加密或者压缩处理,这里体现的安全性。
====================================
3.请求头信息
host 请求的web服务器的域名地址
User-Agent(客户代理) 用户端浏览器类型的详细信息,通过该信息服务器判断浏览器类别
Accept 指定客户端能够接受的内容类型,内容类型中的先后次序表示客户端接受的先后次序
Accept-Language 指定客户端用来展示返回信息所优先选择的语言默认中文
Accept-Encoding 告诉服务器当前客户端浏览器能接受的内容的压缩编码格式,这样服务器返回内容前可进行压缩
编码,这样可以节省带宽
Accept-Charset 浏览器可以接受的字符编码集
Content-Type http请求的内容类型,post提交时才需要设置该属性。“application/x-www-form-urlencoded”提交表单数据;
“multipart/form-data”提交文件,它同样可以发送文本数据,支持二进制文件。
Connection 表示是否需要持久连接。若值为“Keep-Alive或者Http1.1”持久连接,其显著优点,当页面包含多个元素时显著减
少下载速度,要实现这一点web服务器需要给客户端HTTP头信息中发送一个Content-Length(征文的
长度)。
Keep-Alive 表示客户端到服务器端的连续持续有效。
Cookie http发送请求时会将在该请求下的所有Cookie全部发给服务器
Referer 包含一个url,这个请求是从该url代表的页面发出的
Status code 状态码 200服务器成功返回网页 404请求的网页不存在 503服务不可用
Referrer
当用户发送一个请求时从Referer中能看到请求是哪个页面跳转过来的,会有不安全因素,此时就有了referer
policy用于过滤报头内容。
4.pojo与javabean
pojo类和javabean的简单区别:
pojo类就是简单类,没有任何继承,没有实现任何接口,更没有被其他框架侵入的java对象,针对属性定义set的
get访问接口
javabean当中可以有简单的逻辑实现,所有属性必须是private,必须有一个公共的缺省构造函数(实质是提供无
参的构造器),设置setter和getter,这个类应该是个序列化的实现serializable接口。
private体现封装性,目的是安全性
提供缺省构造器主要是spring ioc创建对象的时候要用到反射创建,在创建javabean对象的时候要么写一个空的构造器,要么不写用自身提供的
5.反转
ioc为什么反转?本来当前类想要获取到其他类的信息只需要通过自己创建类的对象通过对象去获取依赖对象,反
转是因为现在创建及注入依赖对象的任务交给了容器,此时对象获取依赖对象只是被动的接收,也就是依赖对象
的获取翻转了,不是通过自己直接获取而是通过容器创建然后自己接收
反射:运行程序先将.java文件编译成.class文件,编译成功要运行,此时在运行时我们决定此时或得到类的属性
啊方法啊在判断是否要创建这个类的对象,这种情况要反射。
反转:由容器方向向应用程序中注入程序所需要的外部资源
注入:应用程序需要容器注入他所需要的外部资源
protected <T> T getParamByBean(HttpServletRequest request, Class<T> clazz) {
T bean = null;
try {
bean = clazz.newInstance();
} catch (InstantiationException e) {
log.debug(e.getMessage());
} catch (IllegalAccessException e) {
log.debug(e.getMessage());
}
Enumeration<String> enums = request.getParameterNames();
while (enums.hasMoreElements()) {
String key = enums.nextElement();
String val = request.getParameter(key);
if (!BaseUtils.isEmpty(val))
ReflectUtils.setFieldValueIgnoreCase(bean, key, val);
}
return bean;
}
getParameterNames()获取form表单中所有具有name属性的表单对象,然后返回一个Enumeration类型的枚
举类型,一次枚举一个
getElement()获取页面name
getParameter()获取页面name的值
setFieldValue()设置在bean对象中,对应的name的值
new与newInstance new创建一个类的时候类可以是没有被加载的,newInstance必须保证类已经加载并且连接了
6.ResponseBody 将controller的方法返回的对象通过适当的转换器转换为指定的格式,写入到response对象的
body区,通常用来返回json 和 xml。
7.web.xml
<web-app>表示web.xml用的哪个模式的文件
<display-name>web应用的名字
<description>web应用的描述
<content-param>声明应用范围内的初始化参数
servlet的功能:1.创建包含请求的动态jsp页面 2.创建代码到现有的页面中与其他服务器通信 3.处理多个
多个客户端的连接,接受客户端的输入并将结果发送到多个客户机上
<servlet>在向servlet或jsp页面制定初始化参数或制定url时,必须先命名servlet或jsp页面,完成命名操作
<servlet-mapping>更容易的访问处理相对url
web.xml中可以定义两种参数:1.servlet范围内的参数; 2.application范围内的参数(全局对象)
<context-param>application范围内的参数
<init-param>servlet范围内的参数
8.springmvc.xml
<mvc:annotation-driven>将请求发送到@controllers,根据类路径配置bean requestmappinghandlemapping
(会批判是否有controllers或requestmapping)和requestmappinghandleadapter
<mvc:message-converters> 字符串信息的转换
<context:component-scan>包的自动扫描
@responsebody注解(将方法的返回值作为response 的body部分)
9.web.xml中listener、filter、servlet加载顺序
listener:是servlet的listener,随web应用启动而启动,只初始化一次,随着web应用的停止销毁。作用:做
一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象
filter:实现了接口的服务端程序,作用:用途是过滤字符编码、做一些业务逻辑判断等。
web.xml加载顺序:<content-param>--->listener--->filter--->servlet
10.javaee13个核心规范
1.JDBC(java Database Connection)
JDBC API为访问不同的数据库提供了一种统一的途径,JDBC对开发者屏蔽了一些细节问题,同时JDBC对数据库的
访问也具有平台无关性。
2.JNDI(java Name and Directory Interface)
JNDI API被用于执行名字和目录服务。他提供了一致的模型用来存取和操作企业级的资源如DNS和LDAP,本地文
件系统,或应用服务中的对象。
3.EJB(Enterprise(企业单位) javabean)
j2ee技术之所以可以广泛赢得重视的原因之一即是EJB,他们提供了一个框架开发和实施分布式商务逻辑,显著
简化具有可伸缩性和高度复杂的企业级应用开发。EJB规范定义 了EJB组件何时如何与他们的容器
继续拧交互作用。容器负责提供公用的服务。
4.RMI(RemoteMethod Invoke)
RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据,RMI是一种被EJB使用的更底层
的协议
5.Java IDL(接口调用语言)
公共对象请求代理结构:
6.jsp(java server pages)
jsp页面有html代码和java新代码所组成。服务器在页面被客户端请求以后对这些java代码进行处理,然后将生成
的html页面返回给客户端的浏览器
7.java servlet
servlet是一种小型的java程序,它扩展了web服务器的功能。作为一种服务器端的应用,当被请求是开始执行,
servlet提供的功能大多和jsp类似,不过实现方式不同。jsp通过大多数的html中嵌入少量的java代码,servlet
全部由java写成并生成相应的html
8.xml(extensible(可扩展的) markup language)
xml是一种可以用来定义其他标记语言的语言。它被用来在不同商务过程中共享数据。xml的发展和java是相互独立
的,和Java相同目标是平台独立。
9.JMS(java message service)
JMS是用于和面向消息的中间件通信的应用程序接口
10.JTA(java transaction(交易,事物) architecture)
java事物api。允许应用程序执行分布式事物处理,在两个或者多个网络计算机资源上访问并且更新数据。JDBC驱
动程序的JTA支持极大的增强了数据访问能力。事务最简单的直接的目的就是保证数据的有效性数据的一致性。
11.JTS(java transaction service)
事务监控的基本实现,规定了事务管理器的实现方式,该事务管理器是在高层支持java transaction api规范,
并且在较底层实现的java映像。jts为事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提
供了事务服务。
12.javamail
javamail适用于存取邮件服务的api,他提供了一套邮件服务器的抽象类。不仅支持smtp服务器,也支持imap服
务器
13.jaf(javabean activation framework)
jaf是一个专用的数据处理框架,它用于封装数据,并未应用程序提供访问和操作数据的接口,也就是说jaf让java
程序知道怎么对一个数据源进行查看,编辑,打印
lang包中放的基本类型
util包中放的集合类型
java与mysql数据类型的对应
JDBC Type Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT short
INTEGER INTEGER
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB Clob
BLOB Blob
ARRAY Array
DISTINCT mapping of underlying type
STRUCT Struct
REF Ref
DATALINK java.net.URL[color=red][/color]
类中加载顺序:静态代码块儿 -》 非静态初始代码块儿 -》 构造函数
执行静态代码块儿和初始静态变量属性按照所写的顺序执行
有父类先执行父类静态在执行子类静态
执行父类非静态和构造在执行子类静态和构造
最后调用子类方法
静态只加载一次
普通成员变量 和 非静态在创建对象时都会加载
start .exe
taskkill /im XXX.exe
taskkill /pid XXX -t -f
shoutdown -s -t 00
一个类只能继承一个类,一个接口可以有多个实现类
一个接口可以被多个实现类实现,也可以被其他接口继承
子接口继承父接口的方法,子接口的方法必须全部实现,父接口的方法可以选择实现,也可以子接口继承父接口,
子接口实现类实现子接口,父接口实现类实现父接口,然后子接口实现类继承父接口实现类,这样子接口对象可
以调用子接口中的所有方法以及父接口中的所有方法。
数据库中关于datestamp类型的数据,如果数据库中创建时间类型是这个,那么从前端页面传过来的String会自
动在注入过程转化类型,这里注意datestamp类型数据需要加时、分、秒。
< 小于
> 大于
mybatis中<trim>参数 prefix前缀 suffixOverrides后缀的判断条件 suffix后缀 prefixOverrides前缀判断的条件
事务:描述一组操作的抽象,实际开发中事务应用最多的就是在数据库操作这一环,spring对数据库事务进行了封装管理。
数据库字段和pojo类字段大小写不同也可以注入,但是如果字段除大小外不同的不可以注入。
左连接(a为主表)
table a(userId...)
table b(userId...)
select a.*, b.*
from a left join b on(a.userId = b.userId)
数据库的一系列操作:
1.加载数据库驱动程序:
class.forName("数据库驱动类")
eg:class.forName("com.mysql.jdbc.Driver")
2.连接数据库:
Connection con = DriverManager.getConnection(URL, userid, password)
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user", userid, password);
3.创建Statement对象:con.createStatement();通过对象向数据库发送sql命令;处理数据的返回结果
4.关闭数据库连接;
1,2,4步都是重复性的,用一个连接池来管理数据库连接,需要时就去池子取,不用了放回池子,这个池子是数据源。
将DataSource绑定在jndi树上,通过datasource找到连接池中的连接。
JSON简单学习:
json:javas object notation javascript对象表示法
json是存储和交换文本信息的语法。类似xml
json比xml更小更快更容易理解
JSON语法规则:
数据在键值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
eg:一个employee对象中包含三个对象,每个对象有两个属性firstName和lastName
JSON数组:
{
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]
}
JSON使用javascript语法:
JSON使用了javascript语法后,就无需额外的软件就能处理javascript中的JSON。通过javascript,就可以创建一个对象数组,并如下赋值:
var employee = [
{"firstName":"Bill","lastName":"Gates"},
{"firstName":"George","lastName":"Bush"},
{"firstName":"Thomas","lastName":"Carter"}
];
想要获取第一个对象的firstName,employee[0].firstName
想要修改第一个对面的firstName,employee[0].firstName = "Jobs"
将JSON文本转换为javascript对象
JSON最常见用法,从web服务器上读取JSON数据,一般获取到的JSON大多是文本信息,因此要讲文本信息转化成对象要用到eval()函数
eg:(就是一个字符串)
var txt = '{"employee" : ['
+'{"firstName":"","lastName":""},'
+'{"firstName":"","lastName":""},'
+'{"firstName":"","lastName":""}]}';
var obj = eval("("+ txt +")");
JSON文本生成javascript对象要将txt文本包围在括号中才能避免语法错误。