本帖最后由 小石姐姐 于 2018-5-30 09:59 编辑
核心思想:业务逻辑的操作要使用同一个Connection对象
Connection管理事务API
setAutoCommit(boolean) //设置是否自动提交事务(默认true)。设置为false,后面的execute不会自动提交,相当于开启事务,需手动提交
commit() //提交
rollback() //回滚
rollback(Savepoint) //回滚到还原点
Savepoint setSavepoint() //设置还原点
连接池
连接池:只对Connection进行操作。对连接close()方法增强,不会销毁,归还给连接池
Druid
阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。
使用:
1.导入jar包
2.加载连接数据库的配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("文件路径"));
3.获取连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
4.获得连接
Connection conn = dataSource.getConnection();
C3P0
使用:
//1.导入jar包,配置文件
//2.创建连接池,默认去类路径下(classpath)查找c3p0-config.xml
ComboPooledDataSource dataSource = new ComboPooledDataSource(["指定配置名字"]]);
// 3.从连接池中获得连接
Connection conn = dataSource.getConnection();
配置文件:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///web_test4</property>
<property name="user">root</property>
<property name="password">123</property>
</default-config>
</c3p0-config>
DBCP
//需依赖.pooljar包
BasicDataSource 连接池
//必须设置项(数据库连接信息)
setDriverClassName("com.mysql.jdbc.Driver"); //设置数据库驱动
setUrl("jdbc:mysql://localhost:3306/mybase"); //设置数据库地址
setUsername("root"); //设置用户名
setPassword("123"); //设置密码
//基本项(扩展)
initialSize 初始化连接,第一次启动时放入的连接数
maxActive 最大连接数量
minIdle 最小空闲连接
maxIdle 最大空闲连接
//获取连接对象
getConnection()
DBUtils
DBUtils :封装并简化JDBC,不影响性能。
QueryRunner 类。核心运行类
DbUtils 工具类
closeQuietly(连接等); //安静的关闭
//事务操作
commitAndCloseQuietly(Connection conn) //提交并安静的关闭,自动处理异常
rollbackAndCloseQueitly(Connection conn)
ResultSetHandler<T> 接口。结果集处理
实现类:
BeanHandler<T>(Class type) //将结果集第一条记录封装到一个指定的javaBean中。没有返回null
返回 T
BeanListHandler<T>(Class type) //将结果集每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
返回 List<T>
MapHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
返回 Map<String, Object>
MapListHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
返回 List<Map<String,Object>>
ScalarHandler() //单值封装。如:select count(*) from 表操作(会返回long类型)。
返回 数值会返回long
ArrayHandler() //将结果集第一条记录封装到Object[]数组中。没有返回长度0数组
返回 Object[]
ArrayListHandler //将结果集每一条记录都封装到一个Object[]数组中,再将这些数组在封装到List集合中。
返回 List<Object[]>
ColumnListHandler<Object>(String columnName) //将指定的列封装到一个List集合中
返回 List<Object>
KeyedHandler("列名作为外层key")
返回 Map<Object,Map<String,Object>>
XML
概述:XML(Extensible Markup Language) 可扩展标记语言:允许自定义标签。最原始标签类型语言,应用于配置文件。由W3C组织(World Wide Web Consortium 万维网联盟)发布,目前遵循2000年发布的XML1.0规范。
设计宗旨:描述数据,传输和存取数据
作用:软件的配置文件。辅助Tomcat服务器,定位用户访问的java程序
元素命名:
- 可以包含字母、下划线、数字、减号、英文句点
- 严格区分大小写
- 只能字母或下划线开头
- 不能以xml(XML、XML等)开头。W3C保留日后使用
- 名称字符之间不能有空格或制表符
- 名称字符之间不能使用冒号(有特殊用途)
文档声明:必须在第一行第一列
1.<?xml version="1.0" encoding="UTF-8"?>
encoding:字符集。使用浏览器打开时采用的字符集
2.处理指令(PI,Processing Instruction):用来指挥软件如何解析XML文档
<?xml-stylesheet type="text/css" href="xxx.css" ?>
注释:只能写在文档声明的后面
<!-- 注释 -->
XML解析
解析方式:
1. sax(Simple Api for XML):事件驱动的方式,逐行解析
优点:如果文档特别大,不会导致内存溢出
缺点:不能对XML进行增删改操作,只能查
2. dom(Document Object Model):一次性将文档加载到内存,形成树型结构
优点:可对XML进行增删改查操作
缺点:如果文档特别大,容易导致内存溢出
解析技术:
dom4j:开源组织,hibernate底层采用(常用)
JDOM:开源组织,dom4j兄弟
JAXP:sun公司,支持DOM和SAX的API
pull:应用Android手机端解析XML
jsoup:一种处理HTML特定解析开发包
XML约束
作用:用来规范XML的写法
分类:
- DTD:语法是自成一体的
- Schema:语法就是XML的语法,更容易被解析器所解析;支持名称空间;有比DTD更加强大的语义和语法的约束
DTD约束
DTD(Document Type Definition) 文档类型定义:文件扩展名dtd
一个XML只能引入一个DTD约束文档
语法:
引入方式
1.内部DTD
<!DOCTYPE 根元素名 [
]>
2.外部DTD
本地DTD:<!DOCTYPE 根元素名 SYSTEM "DTD文档路径">
网络DTD:<!DOCTYPE 根元素名 PUBLIC "//UNKNOWN/" "DTD文档的URL">
Schema约束
文件自身就是一个XML文档,扩展名为 xsd
XML Schema约束文档通常称之为模式文档(约束文档);遵循约束xml文件称之为实例文档
一个XML可以引入多个Schame约束文档
服务器
概述:服务器从硬件和软件两个方面说:
硬件:指的就是一台配置很高的计算机。
软件:需要在这台电脑上安装服务器软件。这台电脑称为web服务器
常见web服务器(中间件)
weblogic, BEA,Oracle收购 大型,收费,支持javaEE所有规范
webspere(was),大型,收费,支持javaEE所有规范
Tomcat,中小型,免费,支持servlet和jsp规范
- 安装:解压即可,英文目录下
- 启动:Tomcat/bin/startup.bat
查看是否启动成功:浏览器打开http://localhost:8080
- 退出:
关闭窗口
ctrl+c
双击 shutdown.bat
常见问题
1. 启动时一闪而过。正确配置:JAVA_HOME
2. 端口冲突问题。修改Tomcat端口号
- 一:将占用端口的应用结束
查看程序占用的端口:netstat -ano
根据PID打开任务管理器干掉
- 二:修改自身的端口号。
tomcat/conf/server.xml。(70行左右)
<Connector port="8080" protocol="HTTP/1.1"
3. 环境变量中配置CATALINA_HOME,会启动同一个Tomcat。删除
目录结构
- bin:tomcat执行文件
- conf:tomcat 配置文件
- lib :Tomcat运行时需要的jar包
- logs:运行日志文件
- temp:临时文件
- webapps:发布web项目路径
- work:tomcat运行JSP的时候,JSP翻译成Servlet的代码,Servlet再被编译成class文件
项目发布(虚拟目录的映射)
配置 tomcat 虚拟路径(官方推荐)
tomcat/conf/Catalina/localhost/xxx.xml
xxx:虚拟路径的名称用于浏览器访问
文件中写入配置:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="项目磁盘目录" />
(开发)打成war包。将war包放入tomcat/webapps下,当服务器启动时,会自动解压到当前目录。
Servlet
概述
servlet:运行在WEB服务器上的小的Java程序,用来接收和响应客户端发送过来的的数据,通常使用HTTP协议。就是SUN公司提供的一个动态WEB开发技术。
作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
使用配置
1. 编写一个类实现Servlet接口,重写service() 方法
1. 将这个类配置到服务器中(web-inf/web.xml)
//配置servlet
<servlet>
<servlet-name>Servlet名称(任意,用于关联映射)</servlet-name>
<servlet-class>Servlet全类名</servlet-class>
//配置服务器启动时就创建Servlet,1留给虚拟机用,越小越优先
//思想:有一些资源初始化很耗时,第一次访问时初始化资源(耗时)以后访问都无需初始化。
// 可以这样配置。把耗时的操作放在服务器启动的时后
<load-on-startup>2</load-on-startup>
//配置初始化参数,可多个
<init-param>
<param-name>键</param-name>
<param-value>值</param-value>
</init-param>
</servlet>
<servlet-mapping> //绑定路径,Servlet的映射
<servlet-name>Servlet名称</servlet-name>
//Servlet的访问路径(自定义)
<url-pattern>/hello</url-pattern>
</servlet-mapping>
//配置session过期时间
<session-config>
<session-timeout>30</session-timeout>
</session-timeout>
//配置全局错误页面,可多个
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
url-pattern三种配置方式
1.完全路径匹配:以 / 开始。如:/servlet/aaa/ccc
2.目录匹配:以 / 开始,以 * 结束。如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配:以 * 开始的。如: *.do , *.action
优先级:完全路径匹配 > 目录匹配 > 扩展名匹配
1. 访问原理:根据<url-pattern>的路径访问,根据<servlet-name>找到对应的<servlet-class>,再找到Servert类,服务器调用service()方法
2. 导入jar包:直接放入 WEB-INF 下,无需BuildPath
路径问题
- 相对路径:不能 / 开头,找位置相对关系
./ 或 不写 表示当前路径
../ 表示上一级路径
- 绝对路径:以 / 开始的
- 客户端路径:客户端访问服务器时一定要加工程名
- 服务器端路径:服务器中文件之间的访问,可以不需要加工程名
Servlet 接口
init()|(ServletConfig config) //初始化。服务器开启第一次访问时执行一次
service(ServletRequest request,ServletResponse response) //服务,处理业务逻辑。每请求一次,服务器创建一个线程,执行一次
destroy() //销毁。servlet被移除或服务器正常关闭时执行一次
//获取当前servlet的配置对象
ServletConfig getServletConfig()
//获取当前项目ServletContext对象
ServletContext getServletContext()
GenericServlet 抽象类
除了service方法没有显示,其他都实现了
HttpServlet 抽象类
service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
Servlet生命周期
默认用户第一次访问Servlet时,服务器会创建这个Servlet实例,并执行init()初始化方法。
任何一次请求服务器都会创建一个线程执行service()方法,在service()方法内部会根据请求方式的不同执行不同的doxxx()方法。
当关闭服务器或从服务器中移除项目时,Servlet的实例就会被销毁,并且执行destroy方法。
Servlet生命周期从始至终有且仅有一个Servlet实例。
ServletContext
ServletContext 接口。上下文/全局管理者。作用:
//1. 作为域对象存储数据/共享资源
setAttribute(String key,Object value) //设置值
Object getAttribute(String key) //获取值
removeAttribute(String key) //删除值
//2. 读取web项目下文件
InputStream getResourceAsStream("/WEB-INF/classes/...") //获取资源以流的形式
String getRealPath("/WEB-INF/classes/...") //获取文件磁盘真实路径
方式二:类加载器读取文件,局限于/WEB-INF/classes下的文件
类名.class.getClassLoader().getResourceAsStream("文件名")
//3. 获得全局初始化参数(web.xml - <context-param>)
String getInitParameter(String key) //通过名称获取指定的参数值
Enumeration getInitParameterNames() //获取所有的参数名称
//4. 获得文件的MIME类型(大类型/小类型)
String getMimeType(String 文件名称)
配置全局初始化参数:WEB-INF/web.xml - <web-app> -
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
ServletConfig
ServletConfig (web.xml配置文件中当前Servlet的配置对象)
//获取名称(的servlet-name)
String getServletName()
//参数操作(<init-param> 标签下)
String getInitParameter(String key) //通过参数名称获取指定参数值
Enumeration getInitParameterNames() //获取所有的参数名称<servlet-name>
对象创建时机:由服务器创建,通过servlet的init(ServletConfig config)将该对象传入
cookie
|
【Cookie技术的使用】
获得 cookie cookie【】cookies=request.getcookies()
向浏览器保存数据:
HttpServletResponse有一个方法:
* void addCookie(Cookie cookie);
获得浏览器带过来的Cookie:
HttpServletRequest有一个方法:
* Cookie[] getCookies();
创建一个Cookie对象:
* Cookie(String name,String value);
Cookie的常用的API:
* getName(); 获得cookie 名字
* getValue(); 获得cookie值
* setDomain(String domain); -- 设置Cookie的有效域名. // www.baidu.com music.baidu.com
* setPath(String path); -- 设置Cookie的有效路径.
* setMaxAge(int maxAge); -- 设置Cookie的有效时间.
Cookie的分类有关:
* 会话级别的Cookie:默认的一次会话Cookie.关闭浏览器Cookie就会销毁.
* 持久级别的Cookie:可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在. 手动销毁持久性Cookie. setMaxAge(0)---前提是有效路径必须一致.
【session的概述】
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端. HTTPsessionSession的执行原理:基于Cookie的.使用Session:* 获得Session: * request.getSession();保存:request.setAttribute( string name,onject name)获取: object value=request.getAttribute(string name)删除:removeAttribute(string name)
jsp
JSP的执行过程:
* JSP会被翻译成Servlet,编译成class进行执行的.
JSP的嵌入Java代码:JSP的脚本元素
* <%! %> :翻译成类中的成员部分. 定义变量,定义方法,定义类.Servlet是线程不安全的,尽量少在类中定义成员属性!!
* <% %> :翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
* <%= %> :翻译成service方法内部的out.print();
[JSP的指令]
指令的语法:<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
JSP中page指令:<%@ page %> -- 设置JSP的.
设置全局的错误友好页面: * 在web.xml中设置: <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/500.jsp</location> </error-page>
【JSP的动作标签】
标签的作用:简化代码.<jsp:forward /> :用于页面的转发.* <jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward><jsp:include /> :用于页面的包含.(动态包含)<jsp:param /> :用于带有路径的标签下,传递参数.<jsp:useBean /> :用于在JSP中使用JavaBean.<jsp:setProperty /> :用于在JSP中向JavaBean设置属性的.<jsp:getProperty /> :用于在JSP中获得JavaBean的属性.
| 【EL表达式】EL(Expression Language)简化JSP写法,用来替代<% ... %>(JSP2.0开始)
语法
格式:${EL表达式}
获取域中数据(从4个域中)
//获取普通单值数据
${xxxScope.域key } //pageScope,requestScope,sessionScope,applicationScope
${域key } //依次范围从小到大查找属性值,没有返回空字符串
//获取集合|数组数据
${域key[index]} //获取数组|Listindex对应的值
${域key.MapKey} //获取Map中key对应的值
//获取对象数据
${域key.bean属性} //获取对象中属性值
//[]和.区别:
[]用于有下标的数据(数组,list集合)
.用于有属性的数据(map,对象)
如果属性名中包含有特殊的字符.必须使用[""]
【MVC设计模式】
M : Model 模型层
作用:封装数据,封装对数据的访问,JavaBean
V : View 视图层
作用:展示数据,JSP
C : Controller 控制层
作用:接收请求,找到相应JavaBean完成业务逻辑,Servlet
JavaBean+Servlet+JSP
|
|