1 JDBC
1.1 JDBC是什么
Java数据库连接,提供了一种与平台无关的用于执行SQL语句的标准javaAPI,可以方便实现多种关系型数据库的统一操作。
1.2 使用示例
1.2.1 使用步骤
- 注册驱动:主要告诉 JVM 我们的程序将要使用哪一种数据库
- 获取连接:使用 JDBC 中的类,获得数据库的连接对象 Connection
- 获得语句执行平台:通过 Connection 可以获取执行者对象,Statement、PreparedStatement
- 执行 SQL 语句:使用执行者对象执行 SQL 语句,可以得到对应的接口,有单个结果也可能有结果集 ResultSet
- 处理结果
- 释放对象
1.2.2 代码示例
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册驱动(静态方法)(包名+类名)
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?characterEncoding=UTF-8","root", "admin");
//3.获取语句执行平台
Statement sta=conn.createStatement();
//4.执行SQL语句
String sql="insert into sort(sname) values('口红')";
int row=sta.executeUpdate(sql);
System.out.println(row);
//6.释放资源(先开后关)
sta.close();
conn.close();
}
- Sql语句的执行对象一般使用PreparedStatement,因为PreparedStatement性能比statement更快且能够防止SQL注入攻击
- 注册驱动和获取连接对象以及释放资源是每次JDBC都需要用到的所以可以抽取出工具类进行优化
1.3 数据库连接池
1.3.1 数据库连接池介绍
因为数据库连接是相当昂贵的操作,所以我们要提高程序的性能就要减少数据库访问连接及访问的此时。数据库连接池允许重用许多现有的连接,可以有效地节省数据库访问的成本。1.3.2 常用开源的连接池
(1)c3p0连接池
(2)Druid连接池创建连接池核心对象 ComboPooledDataSource dataSource=new ComboPooledDataSource() 从连接池对象中获取数据库连接 Connection con=dataSource.getConnection();
Druid的工具类,与c3p0不同的是Fruid需要手动加载配置文件.public class Druid { //通过单例模式来创建连接池对象 private static DataSource dataSource; static { try { InputStream inputStream = DBCP.class.getClassLoader().getResourceAsStream("dbconfig.properties"); Properties properties = new Properties(); properties.load(inputStream); dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } //获得连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } }
2.HTTP
3 Tomcat
3.1 Tomcat是什么
Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能(默认线程数200)。
3.2 Tomcat的结构
3.2.1 重要的目录结构
- bin - Tomcat 脚本存放目录(如启动、关闭脚本)。
*.sh
文件用于 Unix 系统;*.bat
文件用于 Windows 系统。 - conf - Tomcat 配置文件目录。
- lib:该目录放置运行tomcat运行需要的jar包
- logs - Tomcat 默认日志目录。
webapps - webapp 运行的目录。
- webapp - 工程文件夹。其实每个 war 包都可以视为 webapp 的压缩包。
/WEB-INF/web.xml - web 应用的部署配置文件
3.2.2 组件结构
Tomcat是一个基于组件形式的的Web容器,由Server(服务器)、Service(服务)、Connector(连接器)、Engine(引擎)、Host(主机)、Context(应用服务)组成,它们在server.xml里配置:
<?xml version="1.0" encoding="UTF-8"?> //代表整个Tomcat,它包含所有的容器; <Server port="8005" shutdown="SHUTDOWN"> //相当于一个集合,包含多个Connector(连接)、一个Engine(引擎),它还负责处理所有Connector(连接)获取的客户请求 <Service name="Catalina"> //一个Connector(连接)在指定的接口上侦听客户的请求,并将客户的请求交给Engine(引擎)来进行处理并获得回应返回给客户请求; <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> //一个Engine(引擎)下可以配置多个虚拟主机Host,每个主机都有一个域名,当Engine获得一个请求时,会把这个请求发送的相应的Host上; <Engine defaultHost="localhost" name="Catalina"> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> //一个context对应一个web aplication,一个web由一个或多个servlet组成 <Context docBase="src-ConsumptionAnalysisSystem" path="/ConsumptionAnalysisSystem" reloadable="true" source="org.eclipse.jst.jee.server:src-ConsumptionAnalysisSystem"/> </Host> </Engine> </Service> </Server>
3.3 Tomcat的使用
在Idea里使用Tomcat
- 点击 Run/Debug Configurations > New Tomcat Server > local ,打开 Tomcat 配置页面。
- 点击 Confiure… 按钮,设置 Tomcat 安装路径。
- 点击 Deployment 标签页,设置要启动的应用。
- 设置启动应用的端口、JVM 参数、启动浏览器等。
- 成功后,可以访问 http://localhost:8080/(可以在 url 中设置上下文名称)。
4 Servlet、filter和listener
4.1 Servlet
4.1.1 Servlet原理
运行在服务器端的小程序。最大的作用就是能够处理浏览器带来HTTP请求,并返回一个响应给浏览器,从而实现浏览器和服务器的交互。
一般情况下,服务器只创建一个Servlet对象(单例),当多个用户访问Servlet的时候,服务器会为每个用户创建一个线程。
当多个用户并发访问Servlet共享资源的时候就会出现线程安全问题。
4.1.2 编写Servlet程序
- 定义一个类实现httpservlet接口
- 重写方法(3个生命周期方法,2个其他方法),一般开发的时候重写doGet()和doPost()方法就可以
在Tomcat的web.xml中配置及映射,可使用注解@WebServlet(“地址”)替代xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--配置Servlet--> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping> </web-app>
4.1.3 生命周期方法
init() - 只有第一次访问Servlet的时候才会被调用。
- service() - 只要访问Servlet,就会被调用。
destroy() - 只有在Tomcat关闭的时候才会被调用。
4.1.4 常用对象
(1)ServletConfig对象
可以Servlet中获取ServletConfig对象,通过ServletConfig对象获取在web.xml文件配置的参数。
(2)ServletContext对象
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
通过request对象request.getServletContext()
- HttpServlet的this.getServletContext()
所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯。一般这个对象就使用这个功能。
(3) request对象
使用Request对象可以获取浏览器提交过来的数据,如完整URL。
使用Request对象进行转发
- 地址栏发生不会变化
- 只能访问服务器内部资源
只有一次请求
//获取到requestDispatcher对象 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Servlet"); //调用requestDispatcher对象的forward()实现转发,传入request和response方法 requestDispatcher.forward(request,response);
(4) Response对象
使用Response对象可以向浏览器输出数据。
使用Response对象进行重定向地址栏发生发生改变
- 可以访问外部资源
- 浏览器要发送两次请求
//重定向到index.jsp页面 response.sendRedirect("/Demo/index.jsp");
4.2 Filter
截传入的请求和传出的响应,保护Servlet
实现Filter接口,剩余用法和Servlet一样。4.3 Listener
监听作用域对象request、session、application的创建、销毁和内容的变更
实现Listener接口,用法和Servlet一样。
5.会话
5.1 Cookie
客户端会话技术,将数据保存在客户端
使用:
1)创建Cookie对象,绑定数据
* new Cookie(String name, String value)
2)发送Cookie对象
* response.addCookie(Cookie cookie)
3)获取Cookie,拿到对象
* Cookie[ ] request.getCookies()
4)默认情况下,当浏览器关闭后,cookie数据被销毁
* 持久化存储:
** setMaxAge(int seconds)
<1> 正数:将Cookie数据写到硬盘的文件中。持久化存储。cookie存活时间。
<2> 负数:默认值
<3> 零:删除cookie信息
5) cookie共享
* 同一个tomcat服务器中
setPath(String path):设置cookie的获取范围。
* 不同的tomcat服务器
setDomain(String path):如果设置一级域名相同,那多个服务器之间cookie可以共享
5.2 Session
服务器端会话技术,将数据保存在服务器端的对象中。
使用:
1)获取HttpSession对象:
** HttpSession session = request.getSession();
2)当客户端关闭后,服务器不关闭,两次获取的session是否为同一个?
** 默认不是,如果需要相同,则可以创建Cookie键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID", session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
* 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
** 不是同一个,但是要确保数据不丢失
** session的钝化: 在服务器正常关闭之前,将session对象序列化到硬盘上
** session的活化: 在服务器启动后,将session文件转化为内存中的session对象即可
* session什么时候被销毁?
** 服务器关闭
** session对象调用invalidate()
** session默认失效时间(30分钟)
选择性配置修改:tomcat/conf目录下web.xml文件
<session-config>
<session-timeout>30</session-timeout>
</session-config>
5.3 session和cookie的区别
- session存储在服务器端,cookie存储在客户端
- session没有数据大小的限制,cookie有
- session数据安全,cookie相对不安全
6.Json
6.1 Json是什么
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。现在基本不使用XML传输数据了。
- []中括号代表的是一个数组;、
- {}大括号代表的是一个对象
- 双引号“”表示的是属性值
- 冒号:代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值。
6.2 Json的转换
6.2.1 前端
//JSON字符串转换为JavaScript 对象,使用 JSON.parse() 方法: var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //JavaScript 对象转换为JSON字符串,使用 JSON.stringify() 方法: var json = JSON.stringify({a: 'Hello', b: 'World'});
6.2.1 后端
一般使用第三方类库进行转换,如FastJson、Gson等