JavaEE_Tomcat 自学笔记 Day01 20-03-10

jsp环境搭建及入门

1.动态页面

2.架构

CS:client server
BS:browser server

3.Tomcat

文件位置:

  • bin:可执行文件
  • conf:配置文件
  • lib:tomcat依赖的jar文件
  • log:日志文件(记录出错的信息)
  • temp:临时文件
  • webapps:可执行的项目
  • work:存放由jsp翻译成的java,以及编辑成的class文件

4.配置tomcat

端口号默认8080

5.访问tomcat

localhost:8080

  • 常见状态码:
    1.404:资源不存在
    2.200:一切正常
    3.403:权限不足
    4.3xx:页面重定向
    5.500:服务器内部错误(代码有误)

<% %>:放入Java代码

6(1).虚拟路径

方式1:
将Web项目配置到webapps之外的目录

  • docBase:实际路径
  • path:虚拟路径(绝对路径/相对路径)

方式2:
在目录中新xml文件

6(2).虚拟主机

域名解析器:将www编程IP地址
配置虚拟机

7.JSP执行流程

第一次访问:服务端将jsp解析成java,再解析成class文件
第二次访问:直接访问class文件(服务端代码修改,会重新编译)

使用eclipse开发

1.Eclipse创建的Web项目

浏览器可以直接访问WebContent的文件,但无法直接访问WEB-INF文件夹内文件,只能通过请求转发访问。

2.统一字符集编码

编码分类:

  • 设置jsp文件的编码(pageEncoding属性)
  • 设置浏览器读取jsp文件的编码(content属性)
    一般使用国际化编码:UTF-8

文本编码

  • 统一设置(推荐
  • 单独为项目设置编码
  • 单位为文件设置编码

JSP的页面元素

  • 脚本Script
    1.<% %>:局部变量、java语句
    2.<%! %>:定义全局变量、定义方法
    3.<%= %>:输出表达式
  • 指令
    1.page指令:<%@ page ... %>
    2.page指定的属性
    3.language:jsp页面使用的脚本语言
    4.import:导入类
    5.pageEncoding:jsp文件自身的编码
    6.contentType:浏览器解析的编码
  • 注释
    1.html注释:只有html注释可以被浏览器查看
    2.java注释
    3.jsp注释:<%-- --%>
  • JSP内置对象(自带的,不需要new也能使用的对象)
    1.out:输出对象:向客户端输出内容
    2.request:请求对象:存储“客户端向服务端发出请求信息(客户端到服务端)
    request对象的常见方法:
    (1)String Parameter(String name):根据请求的字段名key(input标签的name属性),返回字段值value
    (2)String[] ParameterValues(String name):返回多个字段值value(checkbox)
    (3)void setCharacterEncoding("编码格式"):设置请求编码
    (4)getRequestDispatcher("路径").forward(request,response);:请求转发 的方式跳转页面
    (5)getServerContext():获取项目的ServletContext对象
    补充:
    (1)get提交方式:method="get"和地址栏、超链接请求方式 默认都属于get提交方式
    (2)get与post提交方式区别:get在地址栏显示请求信息;post不会显示
    (3)文件上传一般用post,一般推荐也是post
    3.response:响应对象(服务端到客户端)
    response对象的常见方法:
    (1)void addCookie(Cookie cookie):服务端向客服端增加一个cookie对象
    (2)void sendRedirect(String location) throws IOEexception:页面跳转的一种方式
    (3)void setContentType(String type):设置服务端响应的代码(设置服务端ContentType类型)
    补充:
    请求转发和重定向的区别:
    (1) 请求转发地址栏不会改变,重定向会改变
    (2) 请求转发会保留第一次请求的数据,重定向不会保留
    (3) 请求转发的请求次数是1次,重定向为2次
    (4) 请求转发跳转位置在服务端,重定向为客户端发生的第二次跳转
    4.session(服务端)
    补充:
    Cookie(客户端,不是内置对象):由服务端产生,再发送给客户端保存。
    作用:相当于本地缓存 服务端产生cookie本地缓存发送给客户端,提高效率。
    缺点:安全性低
    Cookie:key=value 由javax.servlet.http.Cookie产生
    Cookie内置方法:
    (1)public Cookie(String key,String value);
    (2)String getName();
    (3)String getValue();
    (4)void setMaxAge(int expiry);:设置最大有效期(单位:s)
    a.服务端发送给客服端cookie:response.addCookie(Cookie cookie);
    b.页面跳转(转发、重定向)
    c.客服端获取cookie:request.getCookies();
    注意事项:
    a.服务端增加cookie:response对象;客户端获取对象:request对象
    b.不能直接获取某一个单独对象,只能一次性将全部cookie获取
    c.通过F12可以发现,除了自己设置的cookie对象外,还有一个JSESSIONID的cookie
    Session:会话
    案例:
    a.浏览网站:从开始到关闭称作一次会话
    b.购物:浏览商品-下单-付款-退出称作一次会话
    Session机制:
  • 客户端第一次请求服务端时,匹配失败后,服务端会产生一个session对象(用于保存该客户的信息);并且每个session对象都会有一个唯一的sessionId(用于区分其他session);服务端又会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值;然后,服务端会在响应客户端的同时,将cookie发送给客户端,客户端就有一个cookie(JSESSIONID);因此,客户端的cookie和服务端的session一一对应(JSESSIONID-sessionId)。
  • 客户端第n次请求服务端时,服务端先根据客户端cookie中的JSESSIONID去服务端的session中匹配sessionId,如果匹配成功,说明此用户不是第一次访问,不需要再次登录。
    Session的核心要点:
    a.session是储存在客户端。
    b.session是在 同一个用户(客户)请求时 共享
    c.实现机制:第一次客户请求时,产生一个sessionid并复制给cookie的JSESSIONID然后发送给客户端。最终,通过session的sessionid和cookie的JSESSIONID一一对应。
    Session的基本方法
    (1)String getId():获取sessionId
    (2)boolean isNew():判断用户是否是新用户(第一次访问)
    (3)void invalidate():使session失效(退出登录、注销)
    (4)void setAttribute()Object getAttribute()属性
    (5)void setMaxInactiveInternal(s):设置最大有效非活动时间
    (6)int getMaxInactiveInternal():获取最大有效时间
    cookie和session的区别
    (1)保存的位置,cookie在客户端,session在服务端
    (2)安全性,cookie较不安全,session较安全
    (3)保存的内容,cookie放String,session放Object
    5.application:全局对象
    application的基本方法:
    (1)String getContextPath();:虚拟路径
    (2)String getRealPath(String name);:绝对路径(虚拟路径相对的绝对路径)
    6.config
    7.page
    8.exception
    9.pageContext(JSP页面容器)
  • 四种范围对(小-大):
    pageContext:当前页面有效
    request:同一次请求有效(请求转发有效,重定向无效)
    session:同一次会话有效
    application:全局有效(只是对于当前项目)
    补充:
    1.多个项目共享:JNDI可以做到
    2.以上的四个范围,尽量使用最小的范围,范围越大,损耗越大
    共有方法:
    1.Object getAttribute(String name):根据属性名,获得属性值
    2.void setAttribute(String name,Object obj):设置属性值(新增,修改)
    3.void removeAttribute(String name):根据属性名删除对象

统一请求的编码 request

1,get方式请求 如果出现乱码
解决方法:
(1)统一每一个变量的编码
(2)修改server.xml,一次性的 更改tomcat默认get提交方式的编码 URLEncoding
注意:使用tomcat使,首先更改xml中的编码
2.post方式请求 如果出现乱码
解决方法:
request.setCharacterEncoding("UTF-8");

JDBC(Java Database Connectivity)

  • 功能:可以为多种关系型数据库DBMS提供统一的访问方式
  • 概念:
    1.JDBC API:提供了各种各样的操作访问接口,Connection Statement PreparedStatement ResultSet
    2.JDBC DriverManager:管理不同的数据库驱动
    3.各种数据库驱动:各种数据库厂商提供(第三方提供),直接连接或操作数据库
  • JDBC API
    主要功能:
    1.与数据库建立连接
    2.发送SQL语句
    3.返回处理结果
    具体方法/类/接口:
    1.DriverManager(管理JDBC驱动)
    2.Connection(连接,通过DriverManager产生)
    Connection产生Statement操作数据库对象:createStatement()
    Connection产生PreparedStatement操作数据库对象:prepareStatement()
    Connection产生CallableStatement操作数据库对象:prepareCall()

    3.Statement(PreparedStatement)(增删改查,通过Statement产生)
    Statement操作数据库:
    增删改:executeUpdate()
    查询:executeQuery()
    PreparedStatement操作数据库:
    public interface PreparedStatement extends Statement
    因此,增删改:executeUpdate()和查询:executeQuery()都有
    特点:有很多赋值语句
    4.CallableStatement(调用数据库中的存储过程或存储函数)
    5.Result(返回的结果集)
    提供方法:
    1.next():光标下移,判断是否有下一条数据:true/false
    2.preview()
    3.getXxx():获取具体的字段值
  • JDBC访问数据库的基本步骤
    1.导入驱动程序,加载具体的驱动类
    2.与数据库建立连接
    3.发送sql,执行
    4.处理结果集(查询)
  • 数据库驱动
    1.Oracle
    (驱动jar:ojdbc-x.jar/具体驱动类:oracle.jdbc.OracleDriver)
    (连接字符串:jdbc:oracle:thin:@localhost:1521:XE
    2.MySQL
    (驱动jar:mysql-connector-java-x.jar/具体驱动类:com.mysql.jdbc.Driver)
    (连接字符串:jdbc:mysql://localhost:3306/testdata
    3.SQLServer
    (驱动类:sqljdbc-x.jar)
    (连接字符串:数据库名/端口号)
    补充:
    使用JDBC操作数据库时,如果对数据库进行了更换,只需要替换驱动、具体驱动类、连接字符串、用户名、密码。
  • PreparedStatement与Statement在语法上的区别
    1.Statement
    sql-executeUpdate(sql)
    2.PreparedStatement
    (1)sql(可能存在占位符?)
    (2)在创建PreparedStatement对象时,将sql预编译 PreparedStatement(sql)
    (3)executeUpdate()
    (4)setXxx()替换占位符?
    3.推荐使用PreparedStatement
    (1)编码更加简便
    (2)提高性能(因为有预编译操作)
    (3)安全(有效的防止sql注入)
  • JDBC总结(模板):
    try{
    1.导入驱动包、加载具体驱动类:Class.forName("具体驱动类");
    2.与数据库建立连接:connection = DriverManager.getConnection(...)
    3.通过connection,获取操作数据库的对象(Statement/PreparedStatement/...
    4.(查询)处理结果集:rs = pstmt.executeQuery();}
    catch{抛出的异常:
    1.ClassNotFoundException
    2.SQLException
    3.Exception}
    finally{打开顺序与关闭顺序相反
    1.(rs != null)rs.close();
    2.(pstmt != null)pstmt.close();
    3.(connection != null)connection.close();}
    注意:
    jdbc中除了Class.forName()抛出ClassNotFoundException,其余方法全部抛出SQLException
  • CallableStatement:调用存储过程、存储函数
    connection/prepareCall(存储过程或存储函数名)
    参数格式:
    1.存储过程(无返回值,用Out代替):{call 存储过程名(参数列表)}
    2.存储函数(有返回值return):{? = call 存储函数名(参数列表)}
  • JDBC调用存储过程的步骤:
    1.产生调用存储过程的对象:cstmt = connection.prepareCall("...");
    2.通过setXxx方法处理输入参数值:cstmt.setInt(1, 10);
    3.处理输出参数类型:cstmt.registerOutParameter(...);
    4.执行:cstmt.execute();
    5.接收输出值(返回值):cstmt.getInt(...);
  • JDBC调用存储函数的步骤(与调用存储函数的区别):
    1.在调用时注意参数
  • 处理CLOB[Text]/BOLB类型
    处理稍大型数据:
    1.存储路径,通过JDBC存储文件路径,根据IO操作处理
    2.使用CLOB和BLOB
    (1)CLOB:大文本数据(小说->数据)
    (2)BLOB:二进制文件(一切文件)
  • CLOB存取:
    1.存
    (1)先通过pstmt的?代替小说内容(占位符)
    (2)再通过pstmt.setCharacterStream(2, reader,(int)file.length());将上一步?替换为小说流,注意第三个参数需要是Int类型
    2.取
    (1)通过Reader reader = rs.getCharacterStream("NOVEL");将CLOB类型的数据保存到Reader对象中
    (2)将Reader通过Writer输出即可
  • BOLB存取:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容