JavaWeb学习简记

今天在卸载印象笔记时候,偶然看到之前留存的相关学习笔记,
删除可惜,索性博客备份一下。

状态码

  • 200:一切正常
  • 300/301: 页面重定向
  • 404:资源不存在
  • 403:权限不够
  • 500:服务器内部错误 代码写错了

JSP

  • 建立一个webapp的所需条件
    • 必须有web-inf
    • lib 第三方依赖库

JSp是html嵌套java代码

配置虚拟路径

  • 将web项目配置到webapps以外的项目
  • conf/server.xml
    1. server.xml
    2.
    3.
    4. 访问path实际是docBase,相对路径是相对于appBase
    5. 重启
  • conf/Catalina/localhost
    1. 项目名.xml
    2. 内容写
    3. 不需要重启

JSP执行流程

  1. 第一次访问:客户端提交给服务端jsp->java(servlet文件)->class
  2. 第二次未改变的条件下,直接运行class,改了就重复第一步
    • 因为写servlet太慢了 才有了jsp 可以相互转换

JSP页面元素

  1. <% 定义局部变量%>
  2. <%! 定义全局变量、方法%>
  3. <%= 输出表达式%>
  • 一般而言修改web.xml 、conf、java需要重启tomcat
  • 修改jsp\html\css\js 不需要重启
  • 即是修改服务端就重启服务端、客户端的需要不会需要重启

指令

page指令

<%@ page…%>

  • language=“java” jsp页面的脚本语言
  • import 导入类
  • pageEncoding: jsp文件自身编码 jsp->java
  • contenType:浏览器解析jsp的编码

注释

1. html注释 <!-- --> 可以被客户通过查看源码 所观察到
  • java注释 // /。。。/
  • sp注释 <%-- --%>

JSP九大内置对象(不需要new)

1. out:输出对象,向客户端输出对象

2. pageContext:

3. request:

  - 请求对象。存储客户端向服务端的请求信息
  -  String  getParameter(String name);key:value
  -   String[]  getParameterValues(String name); key:values
  -   serCharacterEncoding("utf-8");设置请求的编码 (tomcat7以前默认 ios-88859-1,tomcat8以后utf-8)
  -   getRequestDispatcher(“b.jsp”).forward(requsest,response);请求转发 跳转页面 a->b
  -   getServerContext():获取当前项目的ServerletContext对象:

4. response

  - void addCookie(Cookie cookie); 服务器向客户端增加cookie对象
  - void sendRedirect(String location) throws IOException:页面跳转的一种方式(重定向
  - void setContetType(String type):设置服务端响应的编码

  • 请求转发

    • response.sendRedirect(“success.jsp”); 重定向

    • request.getRequestDispatcher(“success.jsp”).forward(request,response);请求转发

请求转发重定向
地址栏是否改变不变改变
是否保留第一次请求时的数据保留不保留
请求的次数一次两次

5. session : 会话 (服务端)


  • Cookie (客户端,不是内置对象) 是由服务端生成,再发给客户端保存
  • 由javax.servlet.http.Cookie 类生成对象
  • pulic Cookie(String name, String value)
  • String getName();获取name
  • String getValue();获取value
  • void serMaxAge(int expiry) ;最大有效期
  • response.addCookie(Cookie cookie)页面跳转 服务器准备cookie给客户端
  • 客户端获取cookie : reques.getCookies(); 不能获取单独对象,只能一次性拿到全部的cookies

  • 运行机制
    • 第一次请求产生一个session 并且有sessionID(唯一) 值给到JSESSIONID 加到cookie
      { JSESSIONID:sessionID } 里面response回到客户端
    • 即是通过cookie的JSESSIONID 与session的sessionID 实现客户端与服务端的一一对应
    • 第二次和进行匹配sessionid
    • 实为,每次都会进行匹配,因为并不知道你是第几次访问
  • session方法:
    • String getId():获取sessionid
    • boolean isNew():判断是否为新用户 (第一次访问)
    • void invalidate():使session失效 (退出登陆、注销)
    • Object getAttribute()
  • cookie 与 session
sessioncookie
保存的位置服务端客户端
安全性较安全较不安全
保存的对象ObjectStrin

6. application 全局对象

  • 方法
    • String getContextPath() 虚拟路径
    • String getRealPath(”虚拟路径“)绝对路径(虚拟路径 相对的绝对路径)

7. config 配置对象 (服务器的配置信息)

8. page 当前jsp页面 对象 相当于java中的this

9. exception 异常对象

四种范围对象(小->大):

pageContext jsp页面容器

  • 当前页面有效
  • 页面跳转后无效

request 请求对象

  • 同一次请求有效
  • 请求转发有效、重定向无效

session 会话对象

  • 同一次会话有效
  • 关闭或者切换浏览器无效

appliation 全局对象

  • 整个项目运行期间有效(切换浏览器仍然有效)

  • 服务器关闭、其他项目无效

  • 重启后仍然有效、多项目共享:JNDI

  • 尽量使用最小的范围对象、因为对象的范围越大,造成的性能损耗越大


上述的四种对象的共有方法:

  • Object getAttribute(String name):根据属性名,或者属性值
  • void setAttribute(String name,Object obj):设置属性值(新增,修改)
    • setAttribute(“a”,“b”) 如果a对象之前不存在,则新建一个a对象
      如果a之前存在,则将值b赋给a

JDBC:Java DataBase Connectivity

  • 可以为多种关系性数据库DBMS提供统一的访问方式
    mark

JDBC API:

  • DriverManager 管理JDBC驱动
  • Connection 连接,通过DriverManager产生
  • Statment(PreparedStatement): 增删改查 通过Connection产生
  • CallableStatement: 调用数据库中的存储过程/存储函数 (通过Connection产生)
  • Result: 返回的结果集 (上面的Statement等产生)

JDBC使用的具体步骤

  1. 导入驱动,加载具体的驱动类
  2. 与数据库建立连接
  3. 发生SQL,执行
  4. 处理结果集

数据库驱动

驱动Jar具体驱动类连接字符串
Oracleojdbc-x.jaroracle.jdbc.OracleDriverjdbc:oracle:thin:@localhost:1521:ORCL
MySqlmysql-connector-java-x.jarcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/数据库实例名
SqlServersqljdbc-x.jarcom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:microsoft:sqlserver:localhost:1433;databasename=实例名

常见方法

  • Connection 产生操作数据库的对象
    • connection.createStatement()
    • connection.prepareStatement()
    • connection.prepareCall()
  • Statement操作数据库
    • 增删改 executeUpdate()
    • 查 executeQuerry()
  • PreparedStatement操作数据库
    • public Interface PreparedStatement extends Statement
    • 具有Statement的功能
    • 具有大量赋值set方法
  • ResultSet 保存结果集
    • next() 光标下移、判断是否有下一条数据:true/false
    • previous(): true/flase
    • getXXx(字段名|位置) 获取具体的字段值
  • PreparedStatement与Statement的区别
    • Statement 直接执行sql executeUpdate(sql)
    • PreparedStatement 可能存在占位符?
      • 在创建PreparedStatement对象的时候,将sql预编译PreparedStatement(sql)
      • setXX()将刚才的占位符替换掉
      • 执行PreparedStatement()就不需要sql了
    • 推荐使用PreparedStatement
      1. 编码更加简洁
      2. 提高性能(预编译,只执行一次)
      3. 有效的防止sql注入吧
    private static final String URL = "";
    private static final String USERNAME = "";
    private static final String PWD = "";


    public static void update() {
        Statement statement = null;
        Connection connection = null;
        try {
            // 加载具体驱动类
            Class.forName("");
            // 与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            /* 
                发送SQL执行命令(增删改、查),,获取操作数据的对象
                获取操作数据库的对象(Statement//preparedStatement//callablestatement)
            */
            statement = connection.createStatement();
            String sql = "";
            int count = statement.executeUpdate(sql);
            // 处理结果
            if (count > 0) {
                System.out.println("操作成功");
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null && connection != null) {
                	//先打开的后关闭
                    statement.close();
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

CallableStatement:调用 存取过程、存储函数

  • connection.preareCall(参数:存储过程或储存函数名)
    参数格式:
    存储过程(无返回值,用Out参数代替):
    {call 存储过程名(参数列表)}
    存储函数(有返回值return):
    { ?=call 存储函数名(参数列表) }


处理CLOB/BLOB类型

处理方式:
1. 存放路径
2. 直接存放

  • clob:大文本数据(小说->数据)b
  • blob:二进制文件(一切文件)

JavaBean

  • 满足条件
    1. public修饰的类,无参构造
    2. 所有的属性都是private,并且提供get/set(如果是boolen,则get可以替换为is)
  • 使用层面,分为两类
    1. 封装业务逻辑 (logindao.java封装了登陆逻辑)
    2. 封装数据 (实体类 person.java)
      • 对应数据库中的一张表
    3. 封装业务逻辑、去操作封装的数据
  • 可简化代码、提高复用

MVC

  • M: Model 模型
    • 功能
    • 用JavaBean实现
  • V: View 视图
    • 用于展示、以及与用户交互
    • 使用html、css、js、jsp 等前端技术实现
  • C:Controller 控制器
    • 分发器,将请求跳转到模型进行处理,模型处理完毕后,再将处理的结果返回给请求处
    • 可以用jsp实现但是不推荐,一般建议使用serverlet实现
      mark

Servlet

  • Java类必须符合一定的规范:
    • 必须继承 java.servlet.http.HttpServlet
    • 重写其中的doGet()和doPost()方法
      • doGet()
      • doPost()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值