JSP 基础知识_一夜星尘的博客-程序员信息网

技术标签: jsp  

<!-- 以下为指令标识区域 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Scanner" %>
<!-- 以下为HTML代码 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>模拟服务器与浏览器的一次简单交互</title>
</head>
<body>
	<!--  以下为嵌入的java语句 -->
	<%
		Date date = new Date(); // 获取当前时间戳
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 时间日期格式
		String today = sdf.format(date);
		Scanner input = new Scanner(System.in);
		System.out.println("浏览器需要你的名字:");
		String name = input.nextLine();
		System.out.println("浏览器需要你的性别:");
		String sex = input.nextLine();
		System.out.println("浏览器需要你的年龄:");
		int age = input.nextInt();
		input.close();
	%>
	当日时间:<%= today%>
	<br>
	服务器的名字:<%= name %>
	<br>
	服务器的性别:<%= sex %>
	<br>
	服务器的年龄:<%= age %>
</body>
</html>

在这里插入图片描述
JSP指令标识的语法如下:

<%@ 指令名 属性 1="属性值 1" 属性 2="属性值 2"...%>
指令名:用于指定指令名称。
属性:用于指定属性名称,不同的指令包含不同的属性。
属性值:用于指定属性值。

指令标识

page指令

<%@ page attr1="value1" attr2="value2" ...%>

常用属性有15个:

language属性

设置JSP页面脚本语言属性,默认脚本语言为Java

<!-- 例如设置为java语言 -->
<%@ page language="java"%>
extends属性

该属性设置JSP页面继承的Java类

import属性

在JSP中导入类包

<!-- 导入Scanner包 -->
<%@ page import="java.util.Scanner"%>
pageEccoding属性

定义JSP页面的编码格式,即指定文件编码

<!-- 指定为UTF-8编码格式 -->
<%@ page pageEccoding="UTF-8"%>
contentType属性

用于设置JSP页面的MIME类型和字符编码

<!-- 设置JSP页面的MIME类型和字符编码为UTF-8 -->
<%@ page contentType="text/html; charset=UTF-8"%>
session属性

指定JSP页面是否使用HTTP的的session会话对象

<!-- 设置JSP页面不使用HTTP会话对象 -->
<%@ page session="false"%>
buffer属性

用于设置JSP的out输出对象使用的缓存区的大小,默认大小为8kb,且单位只使用kb。

<!-- 设置JSP页面out输出对象的使用缓冲大小为128kb -->
<%@ page buffer="128kb"%>
autoFlush属性

用于设置当JSP页面缓存满时,是否自动刷新缓存,默认值为true

<!-- 设置JSP页面取消自动刷新缓存 -->
<%@ page autoFlush="false"%>
isErrorPage属性

该属性可以将当前的JSP页面设置成错误处理页面来处理另一个JSP页面的错误

<!-- 设置当前JSP页面为错误处理页面 -->
<%@ page autoFlush="true"%>
errorPage属性

用于指定处理当前JSP页面异常错误的另一个JSP页面,指定的JSP错误处理页面必须设置isErrorPage属性为true

<!-- 设置处理JSP页面异常错误的页面 -->
<%@ page errorPage="error/aErrorPage.jsp"%>

include指令

该指令可以在一个JSP页面中包含另一个JSP页面,但是该指令是静态包含,即相当于一个JSP页面嵌入另一个JSP页面中,因此不能有相同名称的变量。

其语法如下:

<%@ include file="path/test.jsp"%>

taglib指令

声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀

<%@ taglib prefix="tagPrefix" url ="tagURL"%>

脚本标识

JSP表达式

JSP表达式用于向页面中输出信息,其不仅可以插入网页的文本中,用于输出内容,也可以插入HTML标签中设置属性值

<%= 表达式%>

声明标识

用于在JSP页面中定义全局的变量或方法

<%! 声明的变量或者方法的代码%>

举例:

<%! 
   int number = 0;
   int getSum(){
   	number++;
   	return number;
   }
%>
<!-- <%= getSum()>每次刷新页面都会使number+1 -->

代码片段

所谓代码片段就是JSP页面中嵌入的Java代码或者脚本代码

<% 嵌入的java代码或者脚本代码 %>

举例:

<!-- 以下为指令标识区域 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!-- 以下为HTML代码 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>九九乘法表</title>
</head>
<body>
   <!--  以下为嵌入的java语句 -->
   <%! 
   	String getTable(){
   		String str = "";
   		for(int i = 1 ; i<10; i ++){
   			for(int j = 1  ; j<=i ; j++){
   				str += j+"*"+i+"=" +i*j;
   				str += "&nbsp;";
   			}
   			str += "<br>";
   		}
   		return str;
   }
   %>
   <table border="1" style=“font:9px”>
   	<tr><td height = "30" align="center">九九乘法表</td></tr>
   	<tr><td><%= getTable() %></td></tr>
   </table>
</body>
</html>

在这里插入图片描述

JSP注释

HTML 注释

客户端可见

<!-- 这里为注释内容 -->

带有JSP表达式的注释

//单行注释内容

/*
   多行注释内容
*/

/**
* 文档注释
*/

隐藏注释

浏览器中通过源码也无法显示的注释

<%-- 注释内容 -->

动作标识

包含文件标识<jsp:include>

JSP的动作标识<jsp:include>用于向当前页面中包含其它文件,被包含的文件可以是静态文件或者动态文件

<jsp:include page="url" flush="false|true"/>
或者
<jsp:include page="url" flush="false|true">
   子动作标识符<jsp:param>
</jsp:include>

请求转发标识<jsp:forward>

可以将请求转发到其它的Web资源,可以是另一个JSP文件、HTML页面、Serlet等

<jsp:forward page="url">
或者
<jsp:forward page="url">
   <jsp:param>
</jsp:forward>

请求转发标识<jsp:param>

作为其它标识符的子标识符,用于为其它标识传递参数

<jsp:param name="参数名" value="参数值">

out对象

out对象是JspWriter类的实例,是向客户端输出内容常用的对象

常用方法如下:

void println()  向客户端打印字符串
void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
void clearBuffer() 清除缓冲区的内容,如果在flush之后调用不会抛出异常
void flush() 将缓冲区域内容输出到客户端
int getBufferSize() 返回缓冲区的字节大小,如不设缓冲区就为0
int getRemaining() 返回缓冲区还剩余多少可用空间

request对象

客户端请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应

常用方法如下:

String getParameter(String name) 返回name指定参数的参数值
String[] getParameterValues(String name) 返回包含参数name的所有值的数组
void setAttribute(String,Object) 存储此请求的属性
Object getAttribute(String name) 返回指定属性的属性值
String getContentType() 得到请求体的MIME类型
String getProtocol() 返回请求用的协议类型及版本
String getServerName() 返回接受请求的服务器主机名
int getServerPort() 返回服务器接受此请求所使用的端口号
String getCharacterEncoding() 返回字符编码格式
void setCharacterEncoding(String ecoding) 设置请求字符编码格式
int getContentLength() 返回请求体的长度(以字节数)
String getRemoteAddr() 返回发送此请求的客户端的IP地址
String getRealPath(String path) 返回一虚拟路径的真实路径
String getContextPath() 返回上下文路径

response对象

response对象包含了响应客户端请求的有关信息,但在JSP中很少直接用到它

常用方法如下:

String getCharacterEncoding() 返回响应的用的是何种字符编码
void setContentType(String type) 设置响应的MIME类型
PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
sendRedirect(java.lang.String location) 重新定向客户端的请求

请求转发和请求重定向理解

请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL会发生改变。
请求转发:服务器行为,request.getRequestDispatch().forward(req,resp)是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43914658/article/details/110122985

智能推荐

Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程_Yew1168的博客-程序员信息网

整体而言,RTSP 通常工作于可靠的传输协议 TCP 之上,就像 HTTP 那样,用于发起/结束流媒体传输,交换流媒体元信息。RTP 通常工作于 UDP 之上,用于传输实际的流媒体数据,其中的载荷格式因具体流媒体类型的不同而不同,通常有专门的 RFC 规范对其进行定义,如 H.264 编码格式视频数据的载荷格式在 RFC 6184, RTP Payload Format for H.264 Vid...

红警2科技时代V2.5d+Win10红警黑屏补丁_其他博客的博客-程序员信息网

链接(URL):https://qitablog.com/295.html来源(Source):软件名:红警2科技时代 版本号:V2.5d 游戏说明:游戏已整合原版红警2,下载后安装,而后将补丁复制到安装目录win10即可运行,推荐以管理员方式运行 游戏中的所有防御建筑都能升级,威力更大。各国家拥有超级矿车,有对空对地的攻击能力,采矿效率提升 海豹部队再也不是盟军的专利,苏联新增这一兵种。另外坦克在射程及威力方面都有增强,具体内容请玩家游戏中自己体验 温馨提示:这不再是那个中国兵种打天下的年代,刚从共和

GC(1.安全点的相关知识)_安然_随心的博客-程序员信息网_gc安全点

目录: 1.安全点的相关知识 1.1 OOPMap 2. GC基本算法 3. G1算法 4. 通过Reference和GC交互 5. GC友好编程安全点的相关知识主要有如下几个问题: 1.什么是安全点 2.安全点的位置 3.安全点的管理、实现 4.什么场景、功能需要安全点的配合 5.Safe Reg

信息系统开发平台OpenExpressApp:【OpenTest】 之 框架实现说明_weixin_34111819的博客-程序员信息网

 在信息系统开发平台OpenExpressApp:【OpenTest】 之 如何实现自动化测试框架中说了一下在OEA中使用IronRuby开发了一个自动化UI测试工具,在给测试人员使用后,他们提出一些问题,本篇将介绍一下OpenTest的内部实现的一些内容问题现有自动化框架的运行机制是怎样的?Utils中定义的是通用方法吗?TestObject和...

APP测试小结--1_weixin_43710447的博客-程序员信息网

1.App测试机型选择因素2.APP测试流程3.APP测试接口抓包工具(1)Charles(2)fiddler(3)postman4.模拟器(1)夜神模拟器 ------------- 端口号:62001(2)mumu模拟器 ----------- 端口号:7555(3)逍遥模拟器 -------------- 端口号...

【Lua进阶系列】lua_Stack_Lampard猿奋的博客-程序员信息网_lua stack

【Lua进阶系列】之调用C_API 大家好,我是Lampard~~欢迎来到Lua进阶系列的博客 前文再续,书接上一回。今天和大家讲解一下lua中的调用C_API

随便推点

linux命令如何查看dns,详解Linux系统使用dig/nslookup命令查看dns解析的方法_凶巴巴的李阿姨的博客-程序员信息网

今天主要介绍一下怎么去使用dig/nslookup命令查看dns解析。下面,我们一起来看。一、dig命令Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内,但是在linux系统下,它通常是某个包的一部分,在Gentoo下是bind-tools,在Redhat/F...

飞塔30E防火墙忘记密码,重置密码_-WFlySky的博客-程序员信息网_飞塔防火墙重置密码

Console连接 用户名:maintainer 密码:bcpb(防火墙序列号)例如:bcpbFGT30E5896485412管理员密码恢复过程: Fortigate30E # config system admin(admin)# edit admin(admin)# set password 123456(admin)# next (admin)# end密码重置步骤:1, 连上串口并配置好; 2, 给设备加电启动; 3, 启动完30秒内从串口登陆系统,用户名为:maintainer;4

Nginx https 证书自己生成_Ramos17的博客-程序员信息网_自己生成

注:生成的免费证书在浏览器是不被信任的首页要检查安装程序: nginx, pcre, zlib, openssl(生成证书)//1. 最好切换到nginx/conf 目录下执行,openssl req -new -x509 -nodes -out server.crt -keyout server.key//2. 修改nginx配置文件:vi nginx/conf/nginx.co...

Android 数据存储-本地数据库SQLite具体使用(参考代码)_❀Xiamii❀的博客-程序员信息网

我最近做项目用到了这个SQLite本地数据库,所以写篇博客总结一下,希望也能对小白有所帮助涉及问题:什么时候用SQLite? SQLiteDatabase数据库管理类。 SQLiteOpenHelper数据库帮助器。 数据库操作的工具类:在这个类中,封装保证数据库安全的必要方法,包括获取单例对象、打开数据库连接、关闭数据库连接,并且封装对表记录进行增加、删除、修改、查询的操作方法。

afl入门(一)_kelinshide的博客-程序员信息网

afl入门(一)转载 原文地址 https://blog.csdn.net/yalecaltech/article/details/88752848原文地址本次测试程序test.c#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;int main(int argc,char **argv){ char ptr[20]; if(argc&gt;1){ FILE *fp=fopen(argv[1],"r"); fgets(ptr,size

Verilog中的parameter_qq_16923717的博客-程序员信息网_verilog parameter

1. 概述在Verilog中我们常常会遇到要将一个常量(算法中的某个参数)赋给很多个变量的情况,如:x = 10;y = 10;z = 10;如果此时10要改为9,就需要在代码中修改3个地方,非常的不方便,并且这个10是没有任何意义的,我们不知道它代表什么,所以为了代码的易重用、易读性,我们应常量参数化的形式,如:parameter MAX = 10;x = MAX;...