# JDBC

## jdbc连接的步骤

    1.加载驱动 Class.forName("com.mysql.jdbc.Driver");
    2.得到数据库链接
    Connection conn = DriverManager.getConnection(url,
    "root", "123456");
    3.操作数据库
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery("select * from user");
    4.获得返回结果
    List<User> userList = new ArrayList<>();
    while (rs.next()) {
      System.out.println(rs.getString("id") + " "+ rs.getString("name"));
       User user = new User();
       user.setId(rs.getString("id"));
       user.setName(rs.getString("name"));
       userList.add(user);
    }
    5.关闭各种资源
    rs.close();
    st.close();
    conn.close();

## preparedStatement

防止sql注入 实现批量处理数据

## 高级数据库操作

1.c3p0连接池 2.dbcp连接池 3dbutils数据库连接池

    DBUtils主要就是简化JDBC操作，封装虽好，但还是要知道其中的原理才好。

    Dbutils三个核心功能介绍
    QueryRunner中提供对sql语句操作的API.
    ResultSetHandler接口，用于定义select操作后，怎样封装结果集.

    QueryRunner核心类：
    QueryRunner(DataSource ds) ；传入参数为连接池

    update(String sql, Object… params) ，执行insert update delete操作query(String sql,

    query(String sql,ResultSetHandler rsh, Object… params) ，执行 select操作

# servlet

## Servlet的生命周期

初始化阶段 创建 Servlet 实例对象，然后通过调用 init() 方法,只能用初始化一次 运行阶段 对于 Servlet 的每一次访问请求，Servlet 容器都会调用一次 Servlet 的 service() 方法，创建新的 ServletRequest 和 ServletResponse 对象 销毁阶段 在销毁 Servlet 之前，Servlet 容器会调用 Servlet 的 destroy() 方法

## Servlet内的作用域

request session application

## HttpServletRequest

获取消息行 获取消息头 获取请求参数的方法 请求转发和重定向

## HttpServletResponse

状态行、响应消息头、消息体（大量的数据都是通过响应消息体传递的）getwriter()方法

## Cookie和Session

5.1当客户端第一次访问Web应用时，服务器以响应头的形式将Cookie发送给客户端， 客户端会把Cookie保存到本地。当浏览器再次请求该Web应用时，客户端会把请求的网址和Cookie一起提交给服务器。 5.2客户端第一次访问Web应用时，服务器为该客户端创建一个Session，同时，服务器把该Session的ID放入Cookie返回给客户端。 5.3URL重写，是将URL重新写成Web应用可以处理的另一个URL的过程。

## Filter

## Listener

# jsp

做业务逻辑 JSP声明语句：<%!声明语句%>，通常声明全局变量、常量、方法、类 JSP Scriptlet：<%java代码%>，其中可包含局部变量、java语句 JSP表达式：<%=java 代码%> <%=变量或可以返回值的方法或 Java 表达式%> 指令通常以<%@标记开始，以%>标记结束

## 三大指令

它们分别是 page、include 和 taglib标签库

include 当前 JSP 页面与静态引入的文件紧密结合为一个 Servlet。 这些文件可以是 JSP 页面、HTML 页面、文本文件或是一段 Java 代码。 include 指令的包含过程为静态包含

## 七大动作

1jsp:include 动作的包含过程为动态包含，通常用来包含那些经常需要改动的文件。 因为服务器执行的是两个文件，被包含文件的改动不会影响主文件，因此服务器不会 对主文件重新编译，而只须重新编译被包含的文件即可。并且对被包含文件的编译是在执行时才进行的，也就是说，只有 当 jsp:include 动作被执行时，使用该标记包含的目标文件才会被编译，否则，被包含的文件不会被编译。

2使用 jsp:param 动作标记向这个程序传递参数信息。

3jsp:forward 动作标记就可以实现页面的跳转，用来将请求转到另外一个 JSP、HTML 或相关的资源文件中。

4jsp:plugin 动作可以在页面中插入 Java Applet 小程序或 JavaBean，它们能够在客户端运行，但此时，需要在 IE 浏览器中安装 Java 插件。

5.jsp:useBean 动作标记用于在 JSP 页面中创建 bean 实例，并且通过设置相关属性，可以将该实例存储到指定的范围。

6.jsp:setProperty 动作标记通常与 jsp:useBean 动作标记一起使用，它以请求中的参数给创建的 JavaBean 中对应的属性赋值， 通过调用 bean 中的 setXxx() 方法来完成。

7.jsp:getProperty 标记用来获得 bean 中的属性，并将其转换为字符串，再在 JSP 页面中输出，该 bean 中必须具有 getXxx() 方法。

## 八大内置对象

​ application 对象是 javax.servlet.ServletContext 类的实例 ​ out 对象会通过 JSP 容器变换为 java.io.PrintWriter 类的对象。 ​ request 对象是 HttpServletRequest（接口）的实例 ​ response 是 HttpServletResponse 的实例 ​ session 对象 ​ pageContext 对象 ​ page 对象是为了执行当前页面应答请求而设置的 Servlet 类的实体 ​ config 对象是 javax.servlet.ServletConfig 类的实例

# El

## 判断和取值

    ${"logout" eq ${param.action}
    ${sessionScope.u==null}
    ${6==6} 或 ${6 eq 6}
    ${A && B} 或 ${A and B}
    ${(6==8)?(9==9):(9!=9)}
    ${empty info}

    访问bean${p1.ID}
    访问集合${books [0]}

## 内置对象11个

pageContext pageScope requestScope sessionScope applicationScope 5个作用域对象 param paramValues cookie initParam header header Values

注:

当要存取的数择名称中包含不是字母或数字的特殊字符时，只能使用 []。 当取得的数据为动态值时，只能使用 []。

# jstl

## 条件语句

<c:if test="${salary > 2000}">

      <p>我的工资为: <c:out value="${salary}"/><p></c:if>

    c:choose>
        <c:when test="<boolean>">
            ...
        </c:when>
        <c:when test="<boolean>">
            ...
        </c:when>
        <c:otherwise>
            ...
        </c:otherwise>

    </c:choose

## 循环语句

    <c:forEach var="i" begin="1" end="5">
        <c:out value="${i}"/>
    </c:forEach