• JAVA遇上HTML-----JSP 篇基本概念


    Java Web简介

    1.什么是WEB应用程序:

    Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处是用户很容易访问应用程序。用户只需要有浏览器即可,不需要再安装其他软件。
    Web应用程序开发,是目前软件开发领域的三大方向之一。
    软件开发领域:
    1、桌面应用程序(C/S架构)
    2、Web应用程序(B/S架构)
    3、嵌入式应用程序(移动开发等)

    2.静态网页和动态网页:

    静态网页
    表现形式:网页中的内容是固定的,不会更新
    所需技术:HTML,CSS
    动态网页
    表现形式:网页中的内容通过程序动态显示,自动更新,学习制作动态网页。
    所需技术:HTML,CSS,数据库技术,至少一门高级语言(JAVA,C#,PHP),JavaScript,XML等。主流的动态网页脚本技术(JSP/ASP.NET/PHP)

    3.Tomcat安装步骤:

    1、解压Tomcat安装包到指定目录
    2、配置Tomcat环境变量
    变量名:CATALINA_HOME 变量值:Tomcat根目录即解压目录
    3、运行startup.bat 不要关闭这个窗口
    4、打开浏览器测试 http://localhost:8080/

    4.Tomcat服务器的目录结构:

    /bin 存放各种平台下用于启动和停止Tomcat的命令文件
    /config 存放Tomcat服务器的各种配置文件
    /lib 存放Tomcat服务器所需的各种JAR文件
    /logs 存放Tomcat的日志文件
    /temp Tomcat运行时用于存放临时文件
    /webapps 当发布Web应用时,默认会将Web应用的文件发布到于此目录中
    /work Tomcat把由JSP生成的Servlet放于此目录下

    5.WEB-INF目录详解:
    WEB-INF是java的web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
    如何让hah.jsp成为欢迎界面?
    在web-inf文件夹中配置项目部署文件web.xml。
    添加标签
    <welcome-file-list>
    <welcome-file>/hah.jsp</welcome-file>
    <welcome-file-list>
    修改完web.xml,需要重启Tomcat

    6.myeclipse配置jre:

    window->preferences->java->installed jre->add->java(jdk的安装目录)
    myeclipse集成tomcat:
    window->preferences->myeclipse->servers->tomcat->选版本->选enable(并引入tomcat的安装根目录)->在版本下选择jdk

    7.修改tomcat默认端口号:

    tomcat > conf > server.xml 文件中找到下面代码
    <Connector port="8080" Protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    />

    JSP基础语法

    1.Jsp简介

    1、JSP:Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签。
    2、Jsp是一种动态网页技术标准,也是JEE标准
    3、Jsp与Servlet一样,是在服务器端执行的。
    4.jsp 页面元素构成:
    [静态内容,指令,表达式,小脚本,声明,注释]

    2.常见动态网站开发技术对比:

    JSP 基于java平台 跨平台,安全高,适于企业级web
    Asp.net 简单易学 安全性差 跨平台性差
    php 简单 高效 成本低 开发周期短 适合中小型企业web应用开发

    3.Jsp指令:

    1、page指令:通常位置jsp页面顶端,同一个页面可以有多个
    (1)语法格式:<%@ page 属性1="属性值" 属性2="属性值1,属性值2"...属性n="属性n"(键值对)%>
    (2)常用属性
    • language 指定JSP页面使用的脚本语言 默认值为java
    • import 通过该属性来引用脚本语言中使用的类文件 默认值为无
    • contentType 用来指定JSP页面所采用的编码方式 默认值为text/html,ISO-885901
    如:<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
    2、include指令:将外部文件嵌入当前文件,同时解析这个页面的JSP语句,是包含指令
    3、taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用制定行为

    4.jsp 注释:

    <!-- html注释 --> //客户端可见
    <%-- jsp注释 --> //客户端不可见
    jsp脚本中使用java注释
    //单行注释 //客户端不可见
    /**/多行注释 //客户端不可见

    5.JSP脚本:
    在JSP页面中执行的java代码。语法:<%Java 代码%>

    6.JSP声明:

    1、指在JSP页面中中定义变量或者方法
    2、语法:<%! java代码 %>

    7.jsp表达式:

    <% = 表达式 %>中不以分号结束
    调用声明的变量或函数

    8.生命周期:

    1、生成字节码文件,执行jspInit()只在第一次请求时执行,重复请求仅只执行一次。生成的文件在work里,【每次修改会重新编译,生成新的字节码文件】
    2、jspService()用于处理用户请求,对于每一个请求,JSP引擎会创建一个新的线程来处理该请求【JSP多线程:降低资源需求,提高系统并发量及响应时间,但注意同步问题】。
    3、由于该Servlet常驻于内存里,所以响应速度非常快。

    JSP内置对象

    1.内置对象简介:

    1、JSP内置对象是Web容器创建的一组对象,【不使用new关键字】就可以使用的内置对象。例如:out
    2、JSP九大内置对象:
    out(输出),request(请求),response(响应),session(回话),application(应用)(五大常用对象)
    Page,pageContext,exception.config(四个不太常用对象)

    2.out对象:

    1、void printLn() 向客户端打印字符串;
    2、void clear() 清除缓冲区内容,如果在flush之后调用会抛出异常。
    3、void clearBuffer() 清除缓冲区内容,如果在flush之后调用不会抛出异常。
    4、void flush() 将缓冲区内容输出到客户端。
    5、int getBufferSize() 返回缓冲区以字节数大小,如不设缓冲区则为0.
    6、int getRemaining() 返回缓冲区还剩余多少可用
    7、boolean is AutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
    8、void close() 关闭输出流。
    【out.flush();
    out.clear();
    这样会产生异常

    3.提交表单get与post区别:

    1.get:以【明文】方式,通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。
    2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。

    4.Request对象

    解决提交参数乱码,不能URL中文乱码
    request.setCharacterEncoding="utf-8"
    图片描述
    图片描述

    5.Response对象

    图片描述
    PrintWriter比out对象先打印。调用out.flush()可以解决
    PrintWriter outer=response.getWriter();

    6.请求转发与请求重定向的区别:

    一、请求重定向:服务端responce.sendRedirect("xx.jsp")重定向。【客户端行为】:即客户端会访问两次,第一次访问后会立即跳转到第二个重定向页面上,【从本质上讲等于两次请求】,而前一次的请求封装的request对象不会保存,地址栏的URL地址会改变。
    二、请求转发:服务端request.getRequestDispatcher("xx.jsp").forward(request,response)请求转发。forward(request,response)用于保存内置对象request和response。【服务器行为】:服务器会代替客户端去访问转发页面,【从本质是一次请求】,转发后请求对象会保存,地址栏的URL地址不会改变。

    7.session对象

    一、什么是session
    1、session表示客户端与服务器的一次会话
    2、Web中的session指:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览网站所花费的时间。
    3、从上述定义中可以看到,session实际是一个【特定的时间概念】
    4、服务器的内存中,保存着同用户的session。
    session存在于服务器端,并且每一个用户对应一个session;
    (1)session是JSP的一个内置对象,是HttpSession类的实例。
    (2)从客户打开浏览器并连接到服务器开始,到客户关闭浏览器窗口断开与服务器的连接,这一过程成为一个会话。
    (3)当客户在同一个网站的不同页面之间进行切换并访问时,服务器是通过session来判断这些请求是否来自同一个客户。
    (4)session一般有时间限制,长时间不操作可能会导致session失效。session失效后原session中保存的属性值会全部丢失。
    (5)setMaxInactiveInterval(int i) 该方法可直接设定session的生存时间,超过该时间session会重新创建。(单位:秒)
    session的常用方法如图。在获取创建时间时,可通过以下格式类获取标准格式的时间:
    SimpleDateFormat sdf = new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss);
    Date d = new Date(session.getCreationTime());
    sdf.format(d);
    图片描述

    session的生命周期 活动:
    某次会话当中通过超链接打开的新页面属于同一次会话
    只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同意项目资源时属于同一次会话。
    除非本次会话的所有页面都关闭后再重新访问某个新的jsp或者servlet将会创建新的会话。
    注意事项:
    注意原有的会话还存在,只是这个旧的sessionId仍然存在于服务器端,只不过再也没有客户端会携带它然后交予服务器端校验
    session销毁的三种方式:
    1:调用session.invalidate()方法
    2:session过期(超时)
    3;服务器重新启动
    设置session超时的两种方式:
    tomcat默认session超时时间为30分钟
    1:session.setMaxInactiveInterval(时间);//单位是秒
    2:在web.xml配置
    <session-config>
    <session-timeout>
    10
    <session-timeout>
    <session-config> //单位是分钟

    8.application对象

    application介绍:
    1、实现了用户间数据的共享,可存放全局变量。(类似静态对象)
    2、开始于服务器启动,终止于服务器的关闭(生命周期)
    3、在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
    4、在任何地方对application对象属性进行操作,都将影响到其他用户对此的访问
    5、application对象是ServletContext类的实例
    图片描述

    9.page对象

    一、page对象:是指指向当前JSP页面本身,有点像类中的this指针,它是java.long.Object类的实例。
    二、常用方法如下:主要是Object类中声明的方法
    图片描述

    10.pageContext对象

    1、pageContext对象提供了对JSP页面内【所有】的对象及名字空间的访问。【权限很高】
    2、可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
    3、简单说,pageContext对象相当于页面中所有功能的集大成者
    4、pageContext对象的本类名也叫pageContext
    二、常用方法如下:forward("xxx.jsp")进行跳转,include("yyy.jsp");会在页面中包含yyy.jsp页面
    图片描述

    11.config对象

    ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
    String getInitParameter(String name)返回初始化参数的值
    Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举
    图片描述

    12.Exception对象

    一、Exception对象:实际上是java.lang.Throwable的对象
    二、使用方法:
    1、在可能会抛出异常的页面page指令里,设置errorPage="xxx.jsp",表示出现异常将抛给xxx页面去处理
    2、在xxx页面里,要使用Exception对象,需要把page指令里的isErrorPage属性设置为true。
    三、常用方法:getMessage()和toString()方法
    图片描述

    Javabean

    1.什么是javabean:

    1、Javabeans就是符合某种特定规范Java类。使用Javabeans的好处是【解决代码的重复编写】,减少代码冗余,功能区分明确,提高代码的维护性。
    2、设计原则四点:公有类,属性私有,包含无参的共有构造方法,getter和setter方法封装属性
    图片描述

    2.什么是JSP动作元素:

    什么是JSP动作元素:
    (1)JSP动作元素为请求处理阶段提供信息。
    (2)动作元素遵循XML元素的语法。有一个包含元素名的开始标签,可以有属性、可选内容,以及结束标签。
    JSP动作分为以下几类:
    图片描述

    3.普通方式应用Javabean:

    一、像使用普通java类一样
    1、创建一个web project项目。
    2、在src文件下,创建一个包,在包中创建一个类,满足设计原则即可
    3、在index.jsp页面中通过import导入之前创建的类(import="包名.类名")
    4、通过使用new创建Javabean实例(创建对象)
    5、使用set方法赋值
    6、使用get方法取值

    4.UseBean动作元素:
    <jsp:useBean id="标识符(类似于Java中的变量名)" class="java类名(需要将包名一同写入)" scope="作用范围(默认是page)">

    5.<jsp:setProperty>动作:

    给【已经实例化的Javabean对象的属性赋值】,一共有四种形式。
    1、需要表单提交属性:<jsp:setProperty name="Javabean实例名" property="*"/>: 与之前页面提交的表单的【所有属性进行匹配】,若有与javabean类属性名相同的,则进行赋值。比如表坛提交了username="xxx",而javabean里有username属性,则对其进行赋值
    2、需要表单提交属性<jsp:setPropery name="Javabean实例名" property="javabean属性名" />:对【指定的属性进行匹配】
    3、手动设置属性:<jsp:setProperty name = "Javabean实例名" property="Javabean属性名" value="BeanValue" />
    4、与request参数有关,通过url传参 :<jsp:setProperty name="Javabean实例名" property="propertyName" param="request对象中的参数名" />

    6.<jsp:getProperty>动作:

    作用:获取指定javabean对象的属性值。

    〈jsp:getProperty name="javabean实例名" property="javabean属性名"〉

    7.JavaBean 4种作用域范围 :

    分别为page、request、session、application,它们通过<jsp:useBean>标签的scope属性进行设置。这4种范围虽然存在很大的区别,但它们与JSP页面中的page、request、session、application范围相对应。

    page范围:与当前页面相对应,JavaBean的生命周期存在于一个页面之中,当页面关闭时JavaBean被销毁。

    request范围:与JSP的request生命周期相对应,JavaBean的生命周期存在于request对象之中,当request对象销毁时JavaBean也被销毁。

    session范围:与JSP的session生命周期相对应,JavaBean的生命周期存在于session会话之中,当session超时或会话结束时JavaBean被销毁。

    application范围:与JSP的application生命周期相对应,在各个用户与服务器之间共享,只有当服务器关闭时JavaBean才被销毁。

    这4种作用范围与JavaBean的生命周期是息息相关的,当JavaBean被创建后,通过<jsp:setProperty>标签与<jsp:getProperty>标签调用时,将会按照page、request、session和application的顺序来查找这个JavaBean实例,直至找到一个实例对象为止,如果在这4个范围内都找不到JavaBean实例,则抛出异常。

    8.Model1

    Model1分为三层:
    1.界面层:由JSP页面进行与客户端浏览器的交互,可以直接调用JavaBeans
    2.业务逻辑层:由JavaBeans进行处理业务逻辑,封装数据,并与数据库层进行交互
    3.数据库层:底层数据库,可被javaBeans访问
    避免了JSP页面直接进行业务逻辑处理所带来的维护性,扩展性差的弱点.体现了分层设计的思想

    JSP状态管理

    1.一、http协议的无状态性
    1、无状态是指,当浏览器发送请求给服务器的时候,服务器会响应。但当同一个浏览器再次发送请求时,服务器不会知道是刚才那个浏览器。
    2、简单说,服务器【不会保存用户状态】,不会记得客户端是否访问过,所以这就是无状态协议

    2.Cookie的作用:
    1.保存用户对象的追踪;
    2.保存用户网页浏览记录与习惯;
    3.简化登录;
    4.容易泄露用户信息;

    3.创建与使用Cookie
    一、创建与使用
    1、创建Cookie: Cookie newCookie = new Cookie(String key,String value);
    2、写入Cookie: response.addCookie(newCookie);
    3、读取Cookie: Cookie[] cookie = request.getCookies();
    二、常用方法如图

    4.Session与Cookie对比
    1、保存位置:session在服务器端内存,cookie在客户端文本
    2、保存对象:session保存Object类,cookie保存String
    3、生存权:session会话结束即销毁,cookie可以长期保存在客户端
    4、重要性:session安全性更高,保存重要信息,cookie保存不重要的信息

    JSP指令与动作元素

    常用的有page、include、taglib指令这三种指令;
    page:位于页面顶端,一个页面可以包含多个page指令
    include:将一个外部文件嵌入jsp中,同时解析这个页面中的jsp语句。
    taglib:使用标签库,自定义新的标签,在jsp中启动定制行为。

    1.include指令动作

    指令语法 <% include file="地址"%>。
    案例:显示当前时间的页面。(1)写一个只输出时间的方法的date.jsp。(2)用于显示的页面,包含<% include file="date.jsp"%>

    include动作标签语法:<jsp:include page="URL要包含的页面" flush="true|false"/>

    2.include指令和动作的区别

    1、包含内容: 指令包含的是【源代码】,动作包含的是页面输出的【结果】
    2、生成的servlet:指令会生成一个整体的Servlet;而动作会分别生成两个,即在一个Servlet中调用另一个Servlet
    3、其他区别如图:
    4、【使用场合】:页面内容不经常变化使用include指令,页面内容经常变化使用<jsp:include>动作

    3.forward动作

    1、语法:<jsp:forward page="URL"/>
    2、等于服务器内部转发指令 request.getRequestDispacher("URL").forward(req,res);

    4.param动作

    1、语法:<jsp:param name="参数名" value="参数值">
    2、【常常与<jsp:forward></jsp:forward>一起使用】,并作为其【子标签】。
    3、用于传递新参数或者【修改原有参数值】,修改参数时使用form表单里的参数名称即可。同样用request.getParameter("参数名")获取

  • 相关阅读:
    [灵魂拷问]MySQL面试高频100问(工程师方向)
    前后端分离模式下的权限设计方案
    Netty实战:设计一个IM框架
    超实用,Linux中查看文本的小技巧
    Java面试,如何在短时间内做突击
    挑战10个最难回答的Java面试题(附答案)
    SpringBoot是如何动起来的
    Lab_2_SysOps_VPC_Linux_v2.5
    Lab_1_SysOps_Compute_Linux_v2.5
    change-resource-tags.sh
  • 原文地址:https://www.cnblogs.com/banxian-yi/p/10579582.html
Copyright © 2020-2023  润新知