javaweb课堂笔记(一)

javaweb课堂笔记(一)

一、tomcat服务器

  • 1、服务端组件
    控制层:接收、分析、分发请求,转向视图组件,封装用户请求参数
    业务层:Bean 处理请求
    持久层:Dao 数据访问层,封装对外部数据的操作(数据库 文件)
    视图层:对数据进行处理(渲染)处理结果数据,将处理结果用response回传
    业务层与持久层分开:外部存储数据变换,降低业务层和持久层的耦合
    web中间件:能自动执行web程序的程序,tomcat就是一个web中间件
    初选模型:对象(只有属性没有方法)eg.结构体

  • 2、环境变量
    环境变量配置目的?
    如果不配就要在bin目录下执行java、javac;配置环境变量可以在任何地方执行java、javac
    注意:
    CLASSPATH一定要配,虚拟机在执行过程中找到标准类库 eg. java.lang包
    标准类库:JDK的lib目录下以jar为后缀的文件中 dt.jar tools.jar

    .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

  • 3、端口
    端口:在服务器中区别于其他应用程序的逻辑地址
    mysql:3306
    oracel:1521
    sql Server:1433

  • 4、客户端与服务端
    客户端:发送请求 显示
    HTTP:封装请求
    服务端:接受请求 处理数据 显示结果
    客户端->http->tomcat->组件

  • 5、tomcat
    概念:由java编写的一组程序
    作用:自动通过web项目执行web组件
    web服务器种类:tomcat WebLogic WebSphere(后两款性能更好)

  • 6、配置虚目录:
    < Context path=“虚目录名” docBase=“真实地址”>

  • 7、注意问题
    1.动态代码由浏览器执行
    2.为什么要配置虚目录?
    1)存在名字的不安全性(通过项目名知道文件名)
    2)存在位置的不安全性(在webapps下)
    3)出现存储溢出的问题;
    3.在哪配置虚目录?
    在tomcat中conf中找server.xml,在所有标签的结束符之前
    4.如何配虚目录?
    context标签中path属性=项目的虚名 用户在访问项目的虚名
    docBase=项目对应的真实目录及路径
    要重启tomcat 注意:一个真实目录可以对应多个虚项目名,一个虚项目名不可以访问多个目录
    5.什么是虚目录?
    用户访问的是虚的 用虚项目名访问真正项目对应目录就叫虚目录
    6.System
    System.out:标准字节输出流对象
    将信息发给控制台(客户端)
    System.in:标准字节输入流对象

二、JSP

1、JSP执行特点

由服务器执行,动态代码(原生Java程序),把执行结果嵌入到静态代码中,发给浏览器进行处理
静态代码+动态代码 (浏览器执行的都是静态代码)
JPS:作用:煊然 处理结果信息

2、JSP语法特点

  • 1.注释
    1)作用:便于维护、便于调试、便于开发
    2)种类:
    a.静态注释:对静态代码的注释,语法:<!-- --> 浏览器执行
    b.动态注释:对动态代码的注释,语法:<%-- --%> 服务器执行
  • 2.变量
<%	
    //  加! 全局变量:只初始化一次,本次是用的值是下次使用的初值,写在类中,要隐藏private
    //  不加! 局部变量
%>

对象没有名字,有地址,对象的值就是地址
变量有名字

  • 3.表达式
    语法:<%= %> 向浏览器输出
    两种输出的比较:
    相同点:都由浏览器输出数据
    不同点:
    1)语法不同
    java原生输出:<% out.println() %>
    表达式输出:属于JSP语法
    2)语法范畴不同
    3)输出主体不同
    out.println() out内置对象 优缺点:安全性不高,可维护性不好

作业:打印99乘法表(右上三角)

 <table border=1>
   <%
    for (int i = 9; i >= 1; i--) {
   %>
   <tr>
    <%
     for (int k = 1; k <= (9 - i); k++) {
    %>
    <td>
     &nbsp;
    </td>
    <%
     }
      for (int j = i; j >= 1; j--) {
       if (i % 2 == 0) {
    %>
    <td>
     <%
      } else {
     %>
     <td>
      <%
       }
      %>
      <%=i * j%>
     </td>
     <%
      }
      }
     %>
    
   </tr>
  </table>
 </body>

在这里插入图片描述

4.指令
  • 1.指令由什么执行?
    jsp属于动态代码,由服务器执行

  • 2.三种配置指令
    语法:<%@ %>

1)page

<%@page %> 对当前页面属性进行处理(eg.静态编码 导包)

<%@ page contentType="text/html;charset=gb2312"%>

作用: 对当前页面的html和静态代码进行编码,所以配置指令使用静态编码
服务器端对静态代码做处理,配置指令只对当前页面有效
执行特点:只能写在上面,且只能写一条

2)指令
  • A:include 指令
    <%@include %> 包含页面至当前页面
    语法:<%@include file="uri"%> 把file指定内容包含到当前页面, 为什么包含? 拥抱需求
    动态注释:<%-- --%>
    执行特点:1)先包含后执行 2)对被包含的页面类型没有要求
    缺点
    1)被包含页面不能与当前页面有相同的变量定义,否则tomcat出问题
    2)被包含页面不能再出现html body,否则浏览器出问题
<%@ page contentType="text/html;charset=gb2312"%>
 <body>
     <%@include file="hello.jsp"%>
 </body>
  • B:include标签
    1)标签include 属于Java语法范畴
    2)先执行后包含,避免变量冲突 前提:动态页面
    3)缺点:执行只执行动态代码
    4)当前页面可以通过request页面向被包含页面传参

    如果被包含页面为静态页面:
    1)不能向当前页面传参
    2)先包含,不执行

    eg. txt文件
         if 执行:退化成指令include
         if 不执行:直接将动态代码发给浏览器
    
  • C:指令包含和标签包含区别 == (考试原题2)==
    相同点:把被包含页面包含到当前页面
    不同点:
    1)语法不同
    写法不同

    <%@ include file="uri"%> jsp
    <jsp:include page="uri">  java
    

    语法范畴不同
    指令:jsp
    标签:java
    2)执行流程不同
    指令:先包含,后执行
    标签:
    动态页面:先执行后包含
    静态页面:先包含不执行
    3)对被包含页面是否识别
    指令:不识别被包含页面类型
    标签:识别被包含页面类型
    4)传参
    指令:当前页面不能向被包含页面传参
    标签:动态:能
    静态:不能
    5)各自缺点
    指令:
    1.被包含页面不能和当前页面有相同变量名
    2.被后包含页面不能由html body
    标签:
    1.避免被包含页面为静态页面,如果为静态页面,可能会向浏览器发送动态代码
    2.不管被包含页面为动态或静态,都不能含有< html>< body>标签
    结论:
    如果没包含页面为动态页面,则采用标签包含,前提:把静态页面改为动态页面(没有html body)

    <%@ page contentType="test/html;charset=gb2312"%>
    <html>
     <body>
    int i = 100;
    %>
    <h1>i:<%%=i></h1>
    <%--jsp库下的include标签--%>
    <jsp:include page="include.jsp"/>
     </body>
    </html>
    
  • 标签
    java标签 => 找到标签描述文件 -t/d =>找到java程序
    1.java程序
    2.定义标签
    3.将标签与Java程序关联

    标签执行的Java程序
    标签相当于Java语法范畴

    标签语法特点:
    <标签库:标签 />
    为什么使用标签
    不要在jsp中些原生java程序,用标签表示

  • tag标签
    <%@taglib%> 引入标签库到当前页面

  • 3、JSP的执行流程 (考试原题1)
    1)启动tomcat
    2)浏览器发请求 http://127.0.0.1:8080/hello.jsp
    3)hello.jsp => hello_jsp.java (在work目录下)
    4)调用javac把hello_jsp.java转换成hello_jsp.class
    5)调用java执行字节码文件class,只执行动态代码
    6)tomcat把动态代码的执行结果嵌入到静态代码中,发回给浏览器显示

  • 4、JSP注意事项
    1.jsp由谁来执行?
    JSP:由服务器执行的页面

    2.修改jsp页面?
    第二次修改.jsp文件,页面还是显示原来的,因为没有改变.class文件,而执行的是.class文件
    做法:1)删除work文件 2)重启服务器

    3.jsp页面有什么组成?
    JSP页面 = 静态代码+动态代码

    4.jsp能访问数据库吗?
    JSP可以访问数据库,但最好不要用JSP访问数据库,难维护

    5.代码调试工具?
    Junit

    6.如果jsp没有动态代码 或者 html内由动态代码,服务器将如何处理?
    如果JSP没有动态代码,服务器也会处理,打开JSP文件,进行扫描,找动态代码,会占用服务器的时间
    如果html有动态代码,服务器不会执行,直接跳过

    7.配置文件由谁来处理?
    配置文件是由服务器来处理
    配置文件的信息是思想、指导

    8.对象在哪里创建?
    堆中不创建对象,在对象的属性空间开辟空间

    9.垃圾回收机制回收的是哪里的空间?
    垃圾回收机制回收的是堆的空间

三、表单(登录)

1、表单

1.表单的优点?
1)方便接收用户请求参数,方便交互
2)自动生成http协议

2.表单请求内容?

http://127.0.0.1:8080/test/printTable01.jsp?rownum=5&colnum=8

post请求参数放在http协议体中,get请求参数放在协议头
post请求只能表单发送 优点: 安全不可见

3.socket采用的什么协议?
TCP协议

4.表单执行流程?
1)服务器请求 (服务器接收无状态的协议)
2)创建request,接收请求
3)tomcat通过项目到目录下找到处理请求的组件
4)request.getParameter(String rownum) 得到参数值
取得参数 => 转换参数 (int col = Integer.parseInt())=> 使用参数(for)
5)response

5.请求结束后会怎样?
1)所有请求结果放到http中,送回到浏览器
2)request response消失

2、异常

1、目的
使程序继续运行

2、try内代码有问题该怎么执行?
try内有问题代码,后面都不执行,直接进入catch

3、异常种类
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException

4、空串和空的区别?
空串 “”:是对象,有属性和方法
null:不是

3、登录界面 1.0

login.jsp

用户名:username
密码:password
登录

control.jsp
1)取得用户名uname 取得密码upass
2)比较 if((“zhangshan”.equals(uname) ) && (“12346”.equals(upass)))
3) true => success.jsp <jsp:forward page=“success.jsp”> 取得用户名,登录成功
false => error.jsp <jsp:forward page=“error.jsp”> </jsp:forward>

四、九大内置对象

  • 1、为了处理用户请求,由tomcat自动创建
    作用:实现用户和服务器端数据的交互和传递

  • 2、内置对象种类(九大内置对象)

    1)request

    请求范围:请求开始时开始 请求结束时销毁 ==> 请求范围,只在请求有效
    作用:1)接收请求数据并进行传递 ;2)设定并传递后台属性
    注意点:
    1)服务端跳转 控制层向视图层跳转
    2)一个用户在同一时刻只能发一个

    2)response

    请求范围:request response 同时创建 同时结束
    作用:1)把结果信息发给浏览器显示(jsp页面里)
    2)设置协议头(可控制浏览器自动发请求)
    3)完成客户端跳转,设置cookie

    3)session:表明用户的存在

    1)生存周期:用户范围
    第一次发请求访问服务器动态组件时创建,一个用户可以发多个请求,用户不存在销毁(用户下线)
    2)作用:传递验证信息(安全性)
    3)为什么不用session传递数据?
    一个用户可有多个请求request
    生存周期比request长,由用户决定,一个用户拥有唯一的session,当有多个用户时有多个session,则浪费内存空间
    用户有多个session,使内存使用率过重,容易使内存崩溃
    4)pageContext
    1)生存周期:页面范围
    2)作用:存放临时数据,不能传递数据
    5)application (***)
    1)生存周期:tomcat启动就创建application(一个),服务器关闭时销毁,服务范围
    2)作用:存放公共信息
    6)config
    1)生存周期:服务范围
    2)作用:传递配置信息
    7)out(少)
    向浏览器输出信息,尽量用reponse传递信息
    不安全,不好用
    8)exception(不用)
    1)生存周期:服务范围
    2)作用:传递异常信息
    tomcat创建时会创建:application config exception,不依赖于用户请求

    j2ee jar包:tomcat/lib/servlet-api.jar
    j2se j2ee api

五、request

  • 1、request对象只接受http协议请求
    在这里插入图片描述

  • 2、request:形参类型与实参类型

    // 持久层:数据库 变化会造成业务层变化
    HttpServletRequestWrapper req = request //耦合性过强,增加维护的工作量
    // HttpServletRequest  接口
    HttpServletRequest req = request //降低耦合性
    
  • 3、接收参数,传递参数(前提:服务端跳转,用户只发一次请求)

  • 4、执行流程

    requestDemo01.jsp
    <%
    	request.setAttribute("name", "ZTE");
    	request.setAttribute("password", "123456");
    %>
    <jsp:forward page="requestDemo02.jsp"/>

=> 浏览器发送请求
=> 创建request内置对象 => 将参数放入request参数区 (key=age value=“String类型”)
=> 找到requestDemo01.jsp处理请求
=> 通过request设定属性,在属性区,值的类型为object (key=name value=“ZTE” key=password value=“123456” )
=> 服务端跳转到requestDemo02.jsp 用户不知道,还是之前那个请求
=> request拿到参数属性

  • 5、跳转方式
    1、服务端跳转(一次请求,在各个组件进行参数和属性的传递)
    属性的保存范围
    1) ☆ 最重要的概念:四种属性保存范围
    1-1public void setAttribute(String name,Object value)
    属性名称为字符串
    属性值可以为任意对象
    1-2public Object getAttribute(String name)
    1-3前台参数getPrameter,后台属性setAttribute

    2) request
    2-1 参数区:来自于Http请求
    Key=age value=20
    类型String
    2-2 属性区:来自于服务端后台组件
    Key=name value=”zte”
    Key=password value=”123”
    类型Object

    3)将属性保存在一次请求范围之内:
    ☆ 前提:必须使用服务器端跳转<jsp:forward/>

    应用点:MVC设计模式、Struts、Webwork
    例:requestDemo01.jsp、requestDemo02.jsp、requestDemo03.jsp

    3-1执行request01.jsp
    http请求一来,Tomcat为请求创建request参数对象,Tomcat将请求数据设定在request参数区,request自动接收Tomcat设定的请求参数。
    3-2服务器跳转到request02.jsp
    取得参数,请求未结束,取得的参数结果不显示在浏览器
    3-3服务器跳转到request03.jsp
    执行request03.jsp,将参数结果传到浏览器上显示

    Tip 接收参数,传递参数,设定属性,服务端跳转。用户请求只发一次,传递的时候(服务端跳转,用户不知道)需要造型(强转)。

2、 客户端跳转(多次请求)
2-1 参数区:来自于Http请求
Key=age value=20
类型String
2-2 属性区:来自于服务端后台组件
Key=name value=”zte”
Key=password value=”123”
类型Object

3-1执行request01.jsp
http请求一来,Tomcat为请求创建request参数对象,Tomcat将请求数据设定在request参数区,request自动接收Tomcat设定的请求参数。

3-2服务器跳转到request02.jsp
取得参数,执行静态代码,取得的参数结果显示在浏览器,请求结束,则request销毁,

3-3服务器跳转到request03.jsp
用户再次发请求,创建一个新的request,里面参数为空,执行request03.jsp,将参数结果传到浏览器上显示为空。

Tip request在各个组件进行参数和属性的传递必须是服务端跳转。(getRequsetParame)
客户端跳转用户需要重新发请求,服务端跳转服务器自动在后台发请求。

在服务端,更安全,在服务端运行效率更高

request优点:
请求参数只有用request才能拿到用户信息,只有他有参数区,安全性高,执行效率高节省内存

六、Page
Page:只是存放临时数据,不能传递数据。
属性区:来自于Http请求
Key=age value=20
类型String
发送Http请求,Tomcat创建request内置对象,设定参数
访问JSP页面即创建page内置对象
一访问进入page02.jsp即创建新的page内置对象,因为page01.jsp内的page内置对象销毁,所以创建新的page对象参数值为空。
page返回页面创建,离开页面销毁

page范围:
在JSP中设置一个页的属性范围,必须通过pageContext完成

session
利用session来保存用户的信息
服务范围:用户范围
作用 只保留一个用户,主要用于验证用户是否登录

Application:
服务范围 Tomcat一启动就创建到服务器关闭时销毁,跨项目、用户、请求传数据
作用 传递公共信息
生命周期长,内存占用高,易使系统崩溃,安全性过低。
一般验证信息用session,分步收集用session(requset解决不了)。

动态编码:
动态静态代码区别
<%@ page contentType=“text/html;charset=gb2312”%> 只能处理静态编码(text/html)
<%汉字%>动态代码中的汉字成为动态编码

变成比特流,用ISO8859-1统一编码
String name = request.getParameter();
bytes[];
b = name.getBytes(“ISO8859-1”);变成字节数组对象
name = new String(b)

request.setCharacterEncoding(“GBK”)
String name = request.getParameter(“username”)
只对post请求 即协议体里面的汉字做编码
优点:代码量少
缺点:编码成功率不高
只对协议体里面的的汉字做编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值