A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 哒哒哒~~ 初级黑马   /  2018-5-21 16:16  /  604 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                                                     学习笔记
DBUTILS ---->web阶段创建JDBCUtils工具类   使用c3p0连接池连接池可以使用的工具
  • c3p0
  • druid


    //创建连接池
    private static final ComboPooledDataSource dataSource =new ComboPooledDataSource();
   
    //获得连接方法 从连接池中获取
    public static Connection getConnection() throws SQLException{
        return dataSource.getConnection();
    }
    //创建一个获取连接池的方法
    public static DataSource getDataSource(){
        return dataSource;
    }
    //释放资源
    public static void release(Connection conn, PreparedStatement ppttm, ResultSet rs ){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            rs = null;
        }
        if (ppttm != null) {
            try {
                ppttm.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            ppttm = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    public static void release(Connection conn, PreparedStatement ppttm){
        
        if (ppttm != null) {
            try {
                ppttm.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            ppttm = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
增删改QueryRunner qr = new QueryRunner(DataSource dataSource)
qr.update(String sql,Object ... obj)查询 BeanHandler
//查询一条记录到数组中 使用BeanHandler
public void demo3() throws SQLException {
        QueryRunner qr = new QueryRunner(JDBCUtils3.getDataSource());
        Usb usb = qr.query("select *  from usb where id =?", new BeanHandler<Usb>(Usb.class), 12);
        System.out.println(usb);
    }
//查询多条到集合中  使用BeanHandler
public void demo4() throws SQLException {
        QueryRunner qr = new QueryRunner(JDBCUtils3.getDataSource());
        List<Usb> list = qr.query("select * from usb", new BeanListHandler<Usb>(Usb.class));
        for (Usb usb : list) {
            System.out.println(usb);
        }
    }
使用ScalarHandler

//查询单列的记录 使用 ScalarHandler 返回 long 类型的值
@Test
    public void demo7() throws SQLException {
        QueryRunner qr = new QueryRunner(JDBCUtils3.getDataSource());
        Object object = qr.query("select count(*) from usb", new ScalarHandler());
        System.out.println(object);
    }
w使用MapHandler
//查询单条存入到 Map集合
public void demo5() throws SQLException {
        QueryRunner qr = new QueryRunner(JDBCUtils3.getDataSource());
        Map<String, Object> map = qr.query("select * from usb where id=?", new MapHandler(), 13);
        System.out.println(map);
    }
//查询多条到 Map 集合并将对象存到List 集合
public void demo6() throws SQLException {
        QueryRunner qr = new QueryRunner(JDBCUtils3.getDataSource());
        List<Map<String, Object>> list = qr.query("select * from usb ", new MapListHandler());
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }XML解析:DOM4j+Xpath
导入两个jar包:
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar

SAXReader sr = new SAXReader()
Document document =  sr.read("代表这个xml文档的流");
List<Node> list = document.selectNodes(String xpathExpression)
        遍历出每个要找的
    .getText()';就是其中的值'
Node node =  document.selectSignalNode(String xpathExpression)

xpathExpression:
    //元素名称   
    //元素名称[@属性名称]
    //元素名称[@属性名称='属性值']request&response
文件下载
  • response
    • 概述:代表响应的对象,从服务器向浏览器输出内容
    • 常用API
      • HttpServletResponse类
        • 响应行
          • setStatus(int sc):设置状态码

        • 响应头
          • addDateHeader
          • addHeader
          • addIntHeader
          • setDateHeader
          • setHeader
          • setIntHeader

        • 响应体:
          • 方法在ServletRespose类中
          • getOutputStream
          • getWriter



    • 文件下载方式
      • 超链接的方式:前提-->文件类型是浏览器不支持的类型
      • 手动编写代码的方式完成文件的下载
        • 设置响应头里面的两个属性和一个流
          • Content-Type :文件的MIME类型
          • Content-Disposition :以文件下载的形式打开文件
          • InputStream :文件的输入流



    • 文件下载的核心思想
      • IO 流的读/写



中文文件下载
  • iso-8859-1:缓存区默认编码标准
  • IE浏览器采用的编码方式是URL
    • URLEncoder.encode(filename, "UTF-8");

  • 火狐浏览器采用的编码方式是base64

response 输出响应内容的方法
  • 向页面响应的方法
    • 字节流
      • response.getOutputStream().write("内容".getBytes())-->不是中文
      • response.getOutputStream().write("内容".getBytes(字符集编码));这个编码在设置之前先设置浏览器打开时采用的编码方式,这两种方式要一样.如果本来就一样就不会乱码,如果不一样就会乱码.
      • 步骤
        • 设置浏览器打开的编码
        • 设置中文字节去除时候的编码


    • 字符流
      • response.getWriter()-->不是中文
      • 一定会乱码,response使用的字符流有缓冲区的.这个缓冲区的默认的编码是ISO-8859-1,这个编码方式不支持中文.
      • 解决方式
        • 设置response的字符流的缓冲区的编码
        • 设置浏览器默认打开时使用的编码.
        • response.sendRedirect("路径"):重定向简写.

      • 步骤
        • 设置浏览器打开的时候的编码
          • response.setHeader("Context")

        • 设置response的缓冲区的编码
          • response.setCharacterEncoding(编码方式)





request
  • 概述
    • 代表用户的请求,把从客户端发送来的请求行,请求头,请求体封装成一个ServletRequest对象,即是request.

  • Request的API
    • 功能
      • 获得客户机的相关信息
        • 获得请求方式
          • getMethod()

        • 获得客户端的IP
          • getRemoteAddr()

        • 获得请求的路径
          • getRequestURL()
          • getRequestURI()

        • 获得工程名
          • getContextPath()


      • 获得从页面提交的参数
        • getParameter(String name)
        • getParameterValues(String name)
        • getParameterMap();

      • 作为域对象存取数据
        • setAttribute()
        • getAttribute()
        • removeAttribute()



  • request作为域对象
    • 存取数据
      • setAttribute(String name, String value)
      • getAttribute(String name)
      • removeAttribute(String name)

    • 作用范围
      • 就是一次请求的范围

    • 创建和销毁
      • 创建:
      • 销毁


  • 重定向和转发的区别(redirect和forward的区别)
    • 重定向
      • sendRedirect(路径)
      • 两次请求,两次响应
      • 地址栏会发生变化
      • 路径要包含工程名
      • 可以跳转到任意网站

    • 转发
      • getRequestDispatcher(路径)
      • 一次请求,一次响应
      • 地址栏不会发生变化
      • 路径不用写工程名
      • 只能在服务器内部的同一工程进行转发



cookie和session(会话技术)(把数据保存到会话中)
cookie : 将数据保存到客户端浏览器(分为会话级别的 和 持久级别) ------>会话: 关掉浏览器就销毁 持久--->按设置的时间销毁
​       

#// 向浏览器保存数据 HttpServletResponse 中的方法
    void  addCookie(Cookie cookie);
#// 获得浏览器带过来的 cookie HttpServletRequest中的方法
    cookie[] getCookies();
#// 创建一个cookie对象
    Cookie cookie = new Cookie(String name , String value);  
#// 获取cookie中的name值
    String name = cookie.getName();
#//获取cookie中的value值
    String value = cookie.getValue();
// void  setDumain(String pattern); 设置cookie的有效路径 不常用
#//设置cookie的有效路径 (可以用来移除设置的有效时间 要求cookie的Name相同 路径相同 setMaxAge(0))
    void setPath("/一般是项目的根目录");
#//设置cookie的有效时间
    void setMaxAge(xxx); xxx=设置的时间 以秒为单位 ;
    当值设置成0 的时候可以移除 设置的有效时间 需要和setPath(/day_2???);使用 有效路径和name要和设置的时候保持一致JSP:
  • Java + HTML+JSP内置方法
  • 执行顺序:
    • JSP会被翻译成 Servlet ,然后编译成Class文件


JSP脚本元素(嵌入的JAVA代码):
  • < %!  % >  翻译成类中的成员部分 ,定义方法 定义变量,定义类 ,  因为servlet 线程安全问题 所以不常用;
  • <  %  % > 翻译成service方法内部的内容  可以是 成员方法 类等 ...  可以直接写代码  因为是在service中可以使用  Response 和 Request
  • < %=  % > 相当于输出里面的内容

JSP注释  什么样的代码用什么样的注释!!!~~~HTML注释不能注释JAVA代码JSP指令 3大指令
  • page指令 : 全局错误页面友好提示  web.xml 里面的 error-page
    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>
    include:  静态包含--include:   <%@ include file="" %> 静态包含
    • 动态包含<jsp:include page=""></jsp:include> :动态包含

  • taglib:

JSP内置对象  9大内置对象   可以在JSP中直接使用的对象
request           HttpServetRequest
response         HttpServetResponse
session           HttpSession
application       ServletContext
page              Object
out               JspWriter
pageContext       PageContext
config            ServletConfig
exception         Throwable
技能 拔高点:pageContext:
​        1.获取其他8个内置对象:getXXX()方法
​        2.可以向四个域中存取数据:

pageContext.setAttribute("pname", "pvalue", PageContext.PAGE_SCOPE);
pageContext.setAttribute("rname", "rvalue", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("sname", "svalue", PageContext.SESSION_SCOPE);
pageContext.setAttribute("aname", "avalue", PageContext.APPLICATION_SCOPE);


<%= pageContext.getAttribute("pname", PageContext.PAGE_SCOPE) %>
<%= pageContext.getAttribute("rname", PageContext.REQUEST_SCOPE) %>
<%= pageContext.getAttribute("sname", PageContext.SESSION_SCOPE) %>
<%= pageContext.getAttribute("aname", PageContext.APPLICATION_SCOPE) %>
JSP动作标签  一系列动作标签
<jsp:forward page=""> /jsp:forward
<jsp:include page="">/jsp:include :动态包含
静态包含和动态包含的区别(面试点四)
静态包含:相当于源代码的拷贝,只会翻译成一个Java类,有一个执行结果

动态包含:各自分别去翻译,各自执行,最终包含的是执行的结果
session : 将数据保存到服务器端
  • 创建 : 服务器第一次调用getSession()的时候创建session
  • 作用范围 :一次会话(多次请求)
  • 销毁的三种方式
    • Session过期默认为30分钟



web.xml设置过期时间
<session-config>
     <session-timeout>5</session-timeout> <!--单位是分钟-->
</session-config>
    • 非正常关闭服务器 (正常关闭会序列化到硬盘)
    • 手动调用session.invalidate();

  • 常用方法

Session作为域对象存取数据创建对象的方法 HttpSession  session  = request.getSession();
session.setAttribute(String name,Object value);Object vlaue = session.getAttribute(String name);removeAttribute(String name);
EL&JSTL与MVCEL
EL的概述Expression Language 表达式语言EL的作用简化JSP的代码,而且减少<% % >使用EL表达式语法: ${EL表达式 }EL的功能获取数据:
  • JSP的四个域从这四个域中获取数据
  • 在域中用什么名字存的,就用什么名字取出来,存进去的是什么数据类型,取出来也是什么数据类型.
  • 用域对象获取值:
    • 如果没找到,返回null

  • 用el表达式获取值
    • 如果没找到,返回 ""(空字符串)从指定的域中获取数据


${ name } 相当于 pageContex.findAttribute(name).优先级也一样page > request > session > application
  • $ {}外面不需要些分号属性用.下标(索引)用[]和点(.)的区别
    • []用于有下标的数据(数组,list集合)
    • 而.用于有属性的数据(map.属性)
      • 属性中有特殊字符的时候就不能用.而用[],而且放括号内属性名称要用双引号,一个${},只能获取一个值,
        • . 属性,其实是调用的get方法,如果对象中没有get方法则无法取出.



  • 执行运算
    • 算数运算
      • '+-*/ '默认类型转换,把数字字符串转换成数字再进行运算.


  • 逻辑运算'
    •   ${n1 < n2}  ${n1 lt n2}


    < lt   < gt  =eq   <= le  >=ge

    && || !

    && and  || or  ! not

    执行三元运算
    ${n1 < n2 ? "正确" : "错误"}

    empty运算

    if{user == null}

    相当于else{user != null} --- {not empty user}

    不能进行位运算

JSTL作用:
  • 简化页面的Java代码书写
  • JSTL和EL结合 替换页面中 <% % >现在常用的功能
  • 判断
    • c:if test="条件"

  • 遍历
    • c:foreach数组集合Map


版本JSTL1.0 :不支持EL表达式JSTL1.1和1.2 :支持EL表达式
  • JSTL的标签库:包含了五类标签
  • core:核心标签fmt:国际化标签fn:JSTL提供的EL函数库xmlsql

使用JSTL
  • 引入jar包在页面中引入标签库
  • <%@ taglib uri="" prefix= "" %>
  • 带路径带jsp的是1.1版本的

由JSTL提供的EL函数库
  • 主要是用来处理字符串的引入一个新的标签库以fn开头
  • ${ fn: contains("Hello World","Hello")${ fn: length(字符串) }${fn:toLowerCase(字符串)}....

MVC 设计模式
  • 模式一
    • JSP + JavaBean

  • 模式二
    • JSP + JavaBean + Servlet


模式二也叫做MVC模式


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马