热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础——JSP(一)

一、JSP的由来在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变。例如,一个新闻的浏览次数,只有这个次数是动态改变的࿰

一、JSP的由来

在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变。例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动态创建的。Servlet 的缺点,处理界面困难。JSP 是在Servlet的基础上发展起来的,它弥补了Servlet在界面处理方面的缺陷。

简单来讲,JSP =html+java片段+jsp标签+Javascript,它功能强大,可以和javabean 结合

另外,JSP+javabeen+servlet 就构成了mvc模式。

JSP是运行在服务端的,也就是说,我们在桌面上创建一个.JSP文件,它也不能能够被执行哦。

我们将它黏贴到Tomcat上的webapps文件中(或者你直接在里面创建.jsp文件也可以)。

下一步,我们要启动tomcat。接着在浏览器中访问:http://localhost:8080/myweb/Demo.jsp。

接下来神奇的事情发生了。在Tomcat的webapps中可以看到,帮我们自动生成两个文件。

二、JSP的简介
摘录自百度:
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展&#xff08;以 <%, %>形式&#xff09;。JSP与Servlet一样&#xff0c;是在服务器端执行的。通常返回给客户端的就是一个HTML文本&#xff0c;因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets&#xff0c;来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离&#xff0c;支持可重用的基于组件的设计&#xff0c;使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术&#xff0c;它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础&#xff0c;而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用&#xff0c;完全的面向对象&#xff0c;具有平台无关性且安全可靠&#xff0c;主要面向因特网的所有特点。
三、最简单的JSP程序

<%String userName&#61;"zhangsan";
%>

注意&#xff1a;访问JSP的过程

如果是第一次访问服务器&#xff0c;则翻译成一个对应的java文件&#xff08;Servlet&#xff09;。然后&#xff0c;再被编成 .class 文件并加载到内存中。

如果是以后访问&#xff0c;则直接调用内存中的jsp实例&#xff0c;所以第一次访问慢,以后访问会更加快。

四、3种JSP注释

1.

<%//this is /* thisis */
%>

2.

<%-- //这样的注释内容不会被发送到客户端
这是被注起来的内容

这是注起来的


--%>

3.

//这里的内容会发送到客户端,但浏览器不会显示

五、JSP脚本元素&#xff08;3种&#xff09;

1.

1) 代码段 <% %>
它要严格遵守java语言规范,需要导包的要导包
<% %> 和 <% %> 之间的java代码是可以互相访问的,相当于写在一个 <% %>里

2.

2) 声明 <%!xxxxxxx%> //注意 <%! 中间千万不能空格
<%!public String test(){
return "ok:";
}
%>

3.

3) 表达式 <%&#61; xxx %> //注意 <%&#61; 中间千万不能空格,后面不能有分号
<%&#61;String str&#61;"嘻嘻嘻";%>例子&#xff1a;
//和下面的写法等价

附&#xff1a;myeclipse 生成的jsp页面&#xff0c;解说&#xff1a;

&#xff08;在实际应用中&#xff0c;不需要的我们可以删除它&#xff09;

<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"utf-8"%> //解说&#xff1a;page指令,import用来导包的,pageEncoding指当前页面编码方式
<%String path &#61; request.getContextPath(); //解说&#xff1a; contextPath 代表web应用的名称 /shop-adminString basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";//上下对齐解说&#xff1a; //http //localhost //8080 // shop-admin//上面最后生成的结果&#xff1a;-> http://localhost:8080/shop-admin/
%> //解说&#xff1a;言档类型声明"> //解说&#xff1a;http://localhost:8080/shop-admin/" > //解说&#xff1a;不缓存 //解说&#xff1a;不缓存 //解说&#xff1a;不缓存 //解说&#xff1a;给网络机器人用来搜索的关键字

六、JSP版本的计算器&#xff08;代码示例&#xff09;

<% //接收参数String num1 &#61;request.getParameter("num1"); String num2 &#61;request.getParameter("num2"); String flag &#61;request.getParameter("flag"); int n_num1&#61;0;int n_num2&#61;0;int result&#61;0;if(num1!&#61;null&&num2!&#61;null&&flag!&#61;null){//计算n_num1&#61;Integer.parseInt(num1);n_num2&#61;Integer.parseInt(num2);if(flag.equals("&#43;")){result&#61;n_num1&#43;n_num2;}else if(flag.equals("-")){result&#61;n_num1-n_num2;}else if(flag.equals("*")){result&#61;n_num1*n_num2;}else if(flag.equals("/")){result&#61;n_num1/n_num2;}out.print("

计算结果是 "&#43;result&#43;"

");}//输出结果 %>请输入第一个数:&#39;/>

请输入第二个数:&#39; />

七、MVC模式

M  ->mode 模型层 -> javaBeen  (比如 UserDao,UserInfo)

V  ->view 视图层  -> html , jsp

C  ->controller 控制层  ->由Servlet担当

 八、JSP指令

指令是为JSP引擎而设计的,它不直接产生任何输出,只是告诉引擎如何处理JSP页中的其余部分。指令必须嵌套在<%&#64; %> 中,其本语法如下

<%&#64; 指令 属性名&#61;"值" %>,其中属性名是大小写敏感的

//例子
<%&#64; page language&#61;"java" import&#61;"java.util.*,java.text.*,cat.bean.*" pageEncoding&#61;"UTF-8"%>

* JSP中的指令一共有三种

-- page   // <%&#64; page  ...  >

-- include   // <%&#64; include  ...  > 用来包含别的页面

-- tablib   // <%&#64; tablib  ...  >  用来指定标签库

* page 指令

-- Page 用来定义jsp页面的各属性,几乎所有的页面都会出现page属性

-- 无论page属性出现在什么位置,它的作用都是整个jsp页面

-- 一个页面可以包含多任意数量的page指令

* page 指令的属性

--language :jsp页面采用的语言&#xff0c;默认的是”java”

--contentType: 用于设置响应正文的 mime 类型(即指定Content-Type响应头字段的值),和说明

JSP文件中的文本内容的字符集编码. content-Type  默认的mime 类型是 text/html,字符集是”iso8859-1”

JSP引擎会根据page指令的contentType 属性生成相应调用ServletRresponse.setContentType 方法的语句

--extends:在当前的jsp页面中所用到的类的基类。&#xff08;一般不使用&#xff09;

--import:当前jsp页面所用到的java类。

--session&#xff1a;当前的jsp页面是否使用会话。默认的是true.&#xff08;不要修改它&#xff09;

如果将其设为false,则JSP翻译成的Servlet将不自动预先创建好Session隐式对象

--buffer&#xff1a;指定了out 变量所使用的缓存的大小。默认的是8K.

--autoFlush :当缓冲区满的时候&#xff0c;是否自动将值输出至jsp页面。默认的是true.

--errorPage:用来处理已经发生的&#xff0c;但当前页面没有捕获的异常。例如要求有输入参数&#xff0c;但是没有输入.

它的属性值必须使用相对路径,如果以/开头,表示想对于当前web应用程序的根目录,而不是站点根目录

--isErrorPage: 设置当前页面是否是专门用于处理其他页面未捕异常的页面,默认值为false

只有明确的将 isErrorPage 设为true,当前页面才能用做异常处理,才能拿到exception隐式对象

 

&#61;&#61;小例子: errorPage 指令 的应用

在要捕捉异常的页面中:

-- <%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"gbk" errorPage&#61;"ErrPage.jsp"%>在异常处理页面中

-- <%&#64; page language&#61;"java"  isErrorPage&#61;"true"%>

-- <%&#61;    exception.toString() %>

--pageEncoding :指定jsp源文件中的字符所使用的字符集编码

pageEncoding 指jsp文件本身的编码

contentType&#61;"text/html;charset&#61;gkb" 这里的charset 指的是服务器发送给客户端时的内容编码
注意&#xff1a;JSP要经过两次编码

&#61;&#61;第一阶段,将jsp编译成 .java 它会根据pageEncoding来读取jsp 结果是由指定的编码方案翻译成统一的UTF-8 的java源码(即.java)

如果pageEncoding设定错的话,将会出现中文乱码

&#61;&#61;第二阶段 就是由java源码到java的字节码的编译,不管JSP文件在编写的时候用的是什么编码,最后这个阶段的结果全是UTF-8 java源码    

* include 指令

include 指令  是静态导入

用于通知JSP引警在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行的引入称为静态引入,当前JSP页面和静态引入的页面紧密结合成一个Servlet。

1 被引入的文件必须尊循JSP语法,可以包含静态HTML,JSP脚本元素,JSP指令 和 jsp行为元素等普通JSP页面所具有的一切内容

2 被引入的文件可以使用任意扩展名,(就是叫.html也行), 为了见名知义,jsp规范建议使用.jspf (jsp fragments) 作为静态引入文件的扩展名

3 在将JSP文件翻译成Servlet 源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素&#xff0c;所以,除了pageEncoding  和 import ,page指令的其他属性不能在这两个页面中有不同的设置

4 除了指令元素外,要引入的文件中的所有其他元素都被转换成相应的java代码,然后插入进当前

JSP 页面所翻译成的Servlet文件中,插入的位置和 include 指令 在当前jsp 页面中的位置保持一致

5 两者是在 JSP引擎翻译成Servlet的过程中进行合并的,而不是先合并成源文件再翻译

6 file 属性设置的路径必须是相对路径,如果以 / 开头,指的是相对于当前web应用程序的根目录,而不是 站点根目录    

7 出现在一个 JSP 页面中的 include 指令的数量不受限制

<%&#64; include file&#61;"localURL" %>

<%&#64; include file&#61;"test.html"%>bbb
数据<%&#64; include file&#61;"test.html"%>

* taglib 指令

通知 JSP 容器&#xff0c;页面依赖于自定义标记库

<%&#64; taglib uri &#61;"tagLibraryURI" prefix &#61; "tagPrefix" %>


转:https://www.cnblogs.com/1693977889zz/p/7476502.html



推荐阅读
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 利用命令行配置 ASP.NET Core 发布后的监听地址与环境变量设置
    通过命令行配置 ASP.NET Core 应用程序的发布设置,可以灵活地调整监听地址和环境变量。本文介绍如何在新建的 ASP.NET Core 项目中,通过修改 `Program.cs` 文件中的代码来实现这一功能。具体步骤包括在 `Program` 类的 `Main` 方法中添加相应的配置代码,以确保应用程序在不同环境中能够正确运行。此外,还将详细介绍如何使用命令行工具来设置和验证这些配置项,从而提高开发和部署的效率。 ... [详细]
  • Spring Batch 异常处理与任务限制优化策略 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 本文将详细介绍如何在SSM框架中无缝集成ShardingSphere 4.10,以实现高效的数据分片和读写分离。通过实例演示和代码解析,帮助开发者快速掌握这一复杂但实用的技术。文章从基础概念入手,逐步深入到具体配置和应用实践,旨在为读者提供一个全面、易懂的整合指南。 ... [详细]
  • 在 Spring Boot 项目中,实现多数据源配置以支持 MySQL 和 Oracle 数据库的 JDBC 集成。通过合理配置 `application.properties` 文件,可以轻松管理不同数据源的连接属性,确保应用能够高效地访问多种数据库系统。具体配置包括端口设置、字符编码以及数据库连接参数等,为开发者提供了灵活的数据访问解决方案。 ... [详细]
  • 在Linux系统中Nginx环境下SSL证书的安装步骤与WordPress CDN的高级配置指南
    在Linux系统中,Nginx环境下安装SSL证书的具体步骤及WordPress CDN的高级配置指南。首先,安装SSL证书需要准备两个关键配置文件,并建议在操作前备份相关服务器配置文件,以确保数据安全。随后,本文将详细介绍如何在Nginx中正确配置SSL证书,以及如何优化WordPress的CDN设置,提升网站性能和安全性。 ... [详细]
  • 基于Node.js、EJSExcel、Express与Vue.js构建Excel转JSON工具:首阶段——Vue.js项目初始化及开发环境配置
    在近期的一个H5游戏开发项目中,需要将Excel数据转换为JSON格式。经过调研,市面上缺乏合适的工具满足需求。因此,决定利用Node.js、EJSExcel、Express和Vue.js自行构建这一工具。本文主要介绍项目的第一阶段,即Vue.js项目的初始化及开发环境的配置过程,详细阐述了如何搭建高效的前端开发环境,确保后续功能开发的顺利进行。 ... [详细]
author-avatar
大伟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有