Java基础入门day56

day56

现有问题

之前的servlet中,服务器通过Servlet响应客户端页面的不足:

  • 开发方式麻烦:继承父类或者实现接口,覆盖方法,配置注册

  • 代码修改麻烦:一旦代码修改,需要重新编译、部署、重启服务

  • 显示方式麻烦:使用Response对象获取流,使用print或者write来编写html标签来实现显示

  • 协同开发麻烦:UI负责美化页面,程序员负责代码编写,UI不懂java,程序员又不能将所有的前端页面的内容进行美化展示

JSP

概念:

JSP: java server page,java服务页面

简化Servlet设计,在HTML标签中嵌套java代码,用以高效开发web应用的动态网页

作用

替换显示页面部分的 Servlet

开发

创建JSP

在web或者webapp目录下新建*.jsp文件,注意与WEB-INF平级

编写代码:

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
<%= new Date()%>
<%String name = "saas";out.println(name);System.out.println("console: " + name);
%>
</body>
</html>
  • <%= %>被称之为JSP中的表达式,最终将等号后面的内容在页面上展示

    • 使用<%= %>标签编写java代码在页面中打印当前系统时间

  • <% %>被称之为JSP中的小脚本,可以在里面编写任何的java代码

    • 可以在<% %>代码中编写任何的java代码

访问JSP

在浏览器中输入http://ip:port/项目名/jsp文件路径

JSP与Servlet

关系:

  • JSP文件在容器中会转换成Servlet执行

  • JSP是对Servlet的高级封装,其本质还是一个Servlet

区别:

  • JSP可以很方便的编写或者修改HTML网页

  • 不用一大段的print或者write

  • 无需重新部署或者重启服务器

JSP的实现原理

tomcat会将xxx.jsp文件转换成Java代码,进而编译成.class文件,最终将运行结果通过response相应给客户端

JSP与HTML集成开发

小脚本

小脚本可以编写Java语句,变量,方法或者表达式

语法:<% java代码 %>

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 8:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp page</title>
</head>
<body>
<%int num = 100;
​System.out.println("num: " + num);-*
​int sum = 100 * 31;
​System.out.println("total: " + sum);
%>
</body>
</html>

普通的小脚本可以使用所有的Java语法,除了自定义方法

注意:脚本与脚本之间不能嵌套,脚本与HTML标签不能嵌套

声明

在页面中可以声明变量或者方法

语法: <%! 定义变量、方法 %>

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 9:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp</title>
</head>
<body>
<%System.out.println("num: " + num);System.out.println("money: " + money);
%>
<% int money = 9000; %>
<%!int num = 100;
​public int printNum() {System.out.println("num: " + num);return num;}
%>
<%=printNum()%>
</body>
</html>

注意:声明脚本的变量是全局变量

声明脚本的内容必须在普通的脚本<%! %>中

输出脚本(表达式)

语法:

<%= Java表达式%>

<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 9:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp</title>
</head>
<body>
<h3>今天是<%=new Date()%></h3>
</body>
</html>

输出脚本可以输出带有返回值的方法的值

注意:输出脚本不饿能加分号

JSP注释

三种注释:

JSP是在HTML中编写Java代码

所以Java代码的三种注释可以使用

  • Java注释

    • 单行注释

    • 多行注释

    • 文档注释

  • HTML注释

    • 语法: <!-- html comment -->

    • 客户端浏览器能够直接通过查看源代码看到

  • JSP注释

    • 语法: <%-- jsp comment --%>

    • JSP注释也是属于后端语言,客户端浏览器看不到

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/22Time: 9:27To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp</title>
</head>
<body>
<%//  this is java one line comment/*this isjavamulti linecomment*//*** this is java doc comment*/
%>
java comment
<!-- this is html comment -->
HTML comment
<%-- this is jsp comment --%>
JSP comment
</body>
</html>

JSP指令

JSP指令用来设置于整个JSP页面相关的属性

三大指令

  • page: 定义页面依赖属性,脚本语言,错误页面,缓存需求

  • include:包含其他文件

  • taglib:引入标签库,也可以自定义标签库

page

语法:

<%@ page 属性1=属性值1; 属性2=属性值2 属性3=属性值3... %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
属性描述
contentType指定当前JSP页面的MIME类型和字符编码格式
pageEncoding直送JSP页面的解码格式
errorPage错误页面,当前页面出问题跳转到对应的错误页面
isErrorPage指定当前页面是否可以作为一个错误页面来处理
language定义JSP页面所用的脚本语言
import导入当前页面所需的Java类
session指定JSP页面是否使用session,默认是true是立即创建,false为使用时创建

include

包含,将其他文件引入到当前页面中

语法: <%@ include file="xxx.xxx" %>

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 10:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>main</title>
</head>
<body>
<%@include file="top.jsp"%>
<h1>this is main 01 page</h1>
<%@include file="bottom.jsp"%>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 10:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>main</title>
</head>
<body>
<%@include file="top.jsp"%>
<h1>this is main 02 page</h1>
<%@include file="bottom.jsp"%>
</body>
</html>

可以使用JSP的include指令将固定页面引入到当前页面中,使得页面风格统一

注意:可能会有重名的冲突问题

taglib

语法:<% @taglib uri="外部标签库uri路径" prefix="前缀" %>

后面可以引入JSP的标准标签库JSTL

<% @taglib uri="JSTL的uri路径" prefix="c" %>

动作标签

语法:<jsp:action_name attribute01='value01' attribute02='value02' />

JSP的动作标签指的是JSP页面在运行期间的命令

include动作

  • 语法:<jsp:include page = "相对url地址" />

  • <jsp:include >动作元素会将外部文件输出结果包含在JSP中

注意:

  1. include指令是将外部文件输出代码复制到当前页面中

  2. include动作是将外部文件的输出结果引入到当前JSP文件中

useBean

语法:<jsp:useBean id="name" class="com.saas.entity.Student" />

useBean动作可以用来加载一个将JSP页面中使用的javabean

package com.saas.entity;public class Student {private String id;private String name02;private int age;private String address;private String phone;private String password;private boolean sex;public Student(){System.out.println("Student()");}public void setId(String id) {System.out.println("this is setId method.");this.id = id;}public void setName02(String name) {System.out.println("this is setName method.");this.name02 = name;}public void setAge(int age) {this.age = age;}public void setAddress(String address) {this.address = address;}public void setPhone(String phone) {this.phone = phone;}public void setPassword(String password) {this.password = password;}public void setSex(boolean sex) {this.sex = sex;}public String getId() {return id;}public String getName02() {return name02;}public int getAge() {return age;}public String getAddress() {return address;}public String getPhone() {return phone;}public String getPassword() {return password;}public boolean isSex() {return sex;}
}
<jsp:useBean id="student" class="com.saas.entity.Student" scope="page"/>

useBean标准动作要求对应的bean对象必须要有无参构造器

setProperty

可以在useBean之后使用setProperty进行属性的赋值

语法:<jsp:setProperty name="student" property="id" value="10001"/>

<jsp:setProperty name="student" property="id" value="10001"/>
<jsp:setProperty name="student" property="name02" value="saas"/>
<jsp:setProperty name="student" property="age" value="18"/>
<jsp:setProperty name="student" property="address" value="beijing"/>
<jsp:setProperty name="student" property="phone" value="123456789"/>
<jsp:setProperty name="student" property="password" value="123456"/>
<jsp:setProperty name="student" property="sex" value="true"/>

要求对应的bean里面的属性必须要有标准的setter方法

getProperty

语法:<jsp:getProperty name="student" property="id"/>

在setProperty方法之后,获取之前设置好的属性值

要求bean对应的该属性一定要有标准的getter方法

注意:对于boolean类型的属性,其getter的标准写法是以“is”开头的

比如上面Student类中的sex属性,其getter为isSex

<jsp:getProperty name="student" property="id"/>
<jsp:getProperty name="student" property="name02"/>
<jsp:getProperty name="student" property="age"/>
<jsp:getProperty name="student" property="address"/>
<jsp:getProperty name="student" property="phone"/>
<jsp:getProperty name="student" property="password"/>
<jsp:getProperty name="student" property="sex"/>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 10:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>use bean</title>
</head>
<body>
<jsp:useBean id="student" class="com.saas.entity.Student" scope="page"/><jsp:setProperty name="student" property="id" value="10001"/>
<jsp:setProperty name="student" property="name02" value="saas"/>
<jsp:setProperty name="student" property="age" value="18"/>
<jsp:setProperty name="student" property="address" value="beijing"/>
<jsp:setProperty name="student" property="phone" value="123456789"/>
<jsp:setProperty name="student" property="password" value="123456"/>
<jsp:setProperty name="student" property="sex" value="true"/><jsp:getProperty name="student" property="id"/>
<jsp:getProperty name="student" property="name02"/>
<jsp:getProperty name="student" property="age"/>
<jsp:getProperty name="student" property="address"/>
<jsp:getProperty name="student" property="phone"/>
<jsp:getProperty name="student" property="password"/>
<jsp:getProperty name="student" property="sex"/><%System.out.println(student.getId());System.out.println(student.getName02());System.out.println(student.getAge());System.out.println(student.getAddress());System.out.println(student.getPhone());System.out.println(student.getPassword());System.out.println(student.isSex());out.print("<p />" + student.getId());out.print("<p />" + student.getName02());out.print("<p />" + student.getAge());out.print("<p />" + student.getAddress());out.print("<p />" + student.getPhone());out.print("<p />" + student.getPassword());out.print("<p />" + student.isSex());
%>
</body>
</html>

forward

语法:<jsp:forward page="main01.jsp" />

forward动作可以吧请求转到另外一个页面

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2024/5/22
Time: 11:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>forward</title>
</head>
<body>
<jsp:forward page="main01.jsp" />
</body>
</html>

注意:地址栏访问的是forward.jsp页面,但是真正显示的是main01.jsp页面

param参数

语法:<jsp:param name="name" value="saas"/>

在转发动作内部,做参数的传递

内置对象

特点

由JSP自动创建的对象,可以直接使用,无需手动创建,也不能手动创建

对象名类型说明
outJspWriter页面输出对象
requestHttpServletRequest请求对象(同一请求)
responseHttpServletResponse响应对象
sessionHttpSession会话(同一浏览器)
applicationServletContext应用(同一tomcat)
configServletConfig配置
pageObject当前页面
pageContextPageContext页面上下文(同一页面)
exceptionThrowable异常对象

四大作用域

存储数据和获取数据,其取值范围不同:

  • pageContext: 当前jsp页面有效

  • request:一次请求有效

  • session:一次会话有效

  • application:同一web容器有效

scope.jsp

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/22Time: 14:54To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>scope</title>
</head>
<body>
<h1>scope</h1>
<%pageContext.setAttribute("name", "page saas");request.setAttribute("name", "request saas");session.setAttribute("name", "session saas");application.setAttribute("name", "application saas");
%><%=pageContext.getAttribute("name")%>
<hr />
<%=request.getAttribute("name")%>
<hr />
<%=session.getAttribute("name")%>
<hr />
<%=application.getAttribute("name")%>
<hr />
</body>
</html>

浏览器直接访问scope.jsp

第一阶段:

得到如下结果

page saas


request saas


session saas


application saas

修改之后的scope.jsp

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/22Time: 14:54To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>scope</title>
</head>
<body>
<h1>scope</h1>
<%pageContext.setAttribute("name", "page saas");request.setAttribute("name", "request saas");session.setAttribute("name", "session saas");application.setAttribute("name", "application saas");
%><jsp:forward page="scope02.jsp" /><%=pageContext.getAttribute("name")%>
<hr />
<%=request.getAttribute("name")%>
<hr />
<%=session.getAttribute("name")%>
<hr />
<%=application.getAttribute("name")%>
<hr />
</body>
</html>

在当前scope页面中forward转发到scope02.jsp

scope02.jsp

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/22Time: 14:58To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%=pageContext.getAttribute("name")%><hr /><%=request.getAttribute("name")%><hr /><%=session.getAttribute("name")%><hr /><%=application.getAttribute("name")%><hr />
</body>
</html>

再在浏览器访问scope.jsp

第二阶段:

得到如下结果

null


request saas


session saas


application saas

因为用户在客户端浏览器只发送了一次请求scope.jsp

而scope.jsp在服务器内部转发到了scope02.jsp,虽然有两次页面的跳转,但是都属于同一请求,所以page失效,request,session和application都有效

在同一浏览器中直接访问scope02.jsp

第三阶段:

得到如下结果

null


null


session saas


application saas


由于scope.jsp和scope02.jsp属于两次不同的请求,所以request失效,session由于是同一浏览器,还是有效,application有效

第四阶段:

重新开启一个浏览器,直接访问scope02.jsp

null


null


null


application saas


由于新开了浏览器,将属于新的会话,所有session失效,但是application有效

第五阶段:

重启tomcat,直接访问scope02.jsp

null


null


null


null


得到以上结果:因为重新启动tomcat,已经属于新的应用,所以application失效,四大作用域全部失效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/335587.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源一个工厂常用的LIMS系统

Senaite是一款强大且可靠的基于Web的LIMS/LIS系统&#xff0c;采用Python编写&#xff0c;构建在Plone CMS基础架构之上。该系统处于积极开发阶段&#xff0c;在灵活的定制空间中为开发人员提供了丰富的功能。其中&#xff0c;Senaite在处理REST的JSON API上做得出色&#xff0…

微信小程序--微信开发者工具使用小技巧(3)

一、微信开发者工具使用小技巧 1、快速创建小程序页面 在app.json中的pages配置项&#xff0c;把需要创建的页面填写上去 2、快捷键使用 进入方式 1&#xff1a; 文件–>首选项–> keyboard shortcuts 进入快捷键查看与设置 进入方式 2&#xff1a; 设置–>快捷键…

【Unity iOS打包】Library not loaded: ‘@rpath/AdjustSdk.framework/AdjustSdk‘

Unity打包iOS&#xff0c;XCode运行App黑屏卡死&#xff0c;报错&#xff1a; dyld[8412]: Library not loaded: rpath/AdjustSdk.framework/AdjustSdkReferenced from: /private/var/containers/Bundle/Application/C019F943-138F-4B33-AAC1-F18453F942D9/AnimalsBAMBAM.app/…

ES升级--01--环境准备和安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Linux 单机1.官网下载 Elasticsearchhttps://www.elastic.co/cn/downloads/past-releases/#elasticsearch 2.解压软件3.创建用户设置用户 es 密码 es赋权ES用户数据…

Git-01

Git是一个免费且开源的分布式版本控制系统&#xff0c;它可以跟踪文件的修改、记录变更的历史&#xff0c;并且在多人协作开发中提供了强大的工具和功能。 Git最初是由Linus Torvalds开发的&#xff0c;用于Linux内核的开发&#xff0c;现在已经成为了广泛使用的版本控制系统&a…

最新上市公司控制变量大全(1413+指标)1990-2023年

数据介绍&#xff1a;根据2023年上市公司年报数据进行更新&#xff0c;包括基本信息、财务指标、环境、社会与治理、数字化转型、企业发展、全要素生产率等1413指标。数据范围&#xff1a;A股上市公司数据年份&#xff1a;1990-2023年指标数目&#xff1a;1413个指标&#xff0…

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的&#xff0c;也非常重要&#xff0c;很多人忽视了这个过程。 我这里先简单写一下&#xff0c;后面尽量用通俗易懂的方式&#xff0c;举例讲解。 WebGL&#xff0c;全称Web Graphics Library&#xff0c;是一种在网页上渲染3D图形的技术。它…

基于springboot+vue的社区医院管理服务系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

web刷题记录(1)

[GXYCTF 2019]Ping Ping Ping 进入页面&#xff0c;发现有一个传入参数的框&#xff0c;目的就是为了让我们通过参数传入内容来执行代码。这里先传入本地ip&#xff0c;方便后面的ping命令运行 ls命令来查看&#xff0c;目录中的文件 传入后&#xff0c;发现目录下有flag.php,…

低代码开发难吗?

在软件开发的多样化浪潮中&#xff0c;低代码开发平台以其简化的编程模型&#xff0c;为IT行业带来了新的活力。作为一位资深的IT技术员&#xff0c;我对低代码开发平台的易用性和强大功能有着深刻的认识。今天&#xff0c;我将分享我对YDUIbuilder这一免费开源低代码平台的使用…

第十九节:带你梳理Vue2: 父组件向子组件传参(props传参)

1. 组件嵌套 1.1 组件的嵌套使用 之前有说过,Vue组件跟Vue实例是一样的,因此在Vue中一个组件中也可以定义并使用自己的局部组件,这就是组件的嵌套使用 例如:示例代码如下: <div id"app"><!-- 3. 使用组件 --><my-component></my-component&…

opencv进阶 ——(七)图像处理之寸照换背景

寸照换背景&#xff0c;通常指的是将个人证件照片的背景色更换为另一种颜色&#xff0c;如白色、蓝色或红色等&#xff0c;以满足不同用途的要求。例如&#xff0c;护照照片通常要求白色背景&#xff0c;而身份证照片可能需要蓝色背景。这个过程通常涉及到图像处理技术&#xf…

Facebook之魅:数字社交的体验

在当今数字化时代&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;承载着数十亿用户的社交需求和期待。它不仅仅是一个简单的网站或应用程序&#xff0c;更是一个将世界各地的人们连接在一起的社交网络&#xff0c;为用户提供了丰富多彩、无与伦比的数字社交体验。…

PIC单片机控制小型三相无刷直流电机

1、使用PIC12F629小型三相无刷直流电机制作电动口罩&#xff0c;涉及到电机的驱动芯片的选型&#xff0c;这里选用国产的MS39549驱动芯片&#xff1b; 2、搭建的电路图如下&#xff1a; 3、单片机给MS39549驱动芯片发送PWM占空比信号&#xff0c;即可实现对电机的转速控制&…

鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos

目录 1. 前言 2. 效果图展示 3. 安装termux 4. 安装Centos系统 4.1 更换源 4.2 拉取镜像 4.3 启动centos 5.结尾 1. 前言 大家好&#xff0c;我是jiaoxingk 今天这篇文章让你能够在手机或者平板上使用Linux-Centos系统 让你随时随地都能操作命令行进行装13 2. 效果图展示…

TH方程学习(1)

一、背景介绍 根据CW方程的学习&#xff0c;CW方程的限制条件为圆轨道&#xff0c;不考虑摄动&#xff0c;二者距离相对较小。TH方程则可以将物体间的相对运动推广到椭圆轨道的二体运动模型&#xff0c;本部分将结合STK的仿真功能&#xff0c;联合考察TH方程的有用性&#xff…

系统架构设计师【第3章】: 信息系统基础知识 (核心总结)

文章目录 3.1 信息系统概述3.1.1 信息系统的定义3.1.2 信息系统的发展3.1.3 信息系统的分类3.1.4 信息系统的生命周期3.1.5 信息系统建设原则3.1.6 信息系统开发方法 3.2 业务处理系统&#xff08;TPS&#xff09;3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能 …

网络故障与排除

一、Router-ID冲突导致OSPF路由环路 路由器收到相同Router-ID的两台设备发送的LSA&#xff0c;所以查看路由表看到的OSPF缺省路由信息就会不断变动。而当C1的缺省路由从C2中学到&#xff0c;C2的缺省路由又从C1中学到时&#xff0c;就形成了路由环路&#xff0c;因此出现路由不…

markdown语法保存

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

渗透测试一些知识点

1、如果提示缺少参数&#xff0c;如{msg&#xff1a;params error}&#xff0c;可尝使用字典模糊测试构造参数&#xff0c;进一步攻击。 2、程序溢出&#xff0c;int最大值为2147483647&#xff0c;可尝试使用该值进行整数溢出&#xff0c;观察现象。 3、403&#xff0c;404响…