JSP基本语法
记录一下自己复习到的知识点,以后看起来也方便。
指令
JSP中三个指令,page,include,taglib
page 用于定义页面相关的信息,比如下面的代码:
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
language定义了页面的使用语言;
import引用页面中使用的工具类;
contentType定义页面的编码格式;
pageEncoding定义JSP的编码格式。
inlcude 指令用于引用其他的JSP页面;taglib 指令用于定义标签,在struts中比较常用。
注释
在JSP中有几种注释:
1 HTML版:
<!-- 客户端可见 -->
这种注释在查看html代码时,是可以看到的。
2 JSP版:
<%-- 客户端不可见 --%>
3 JAVA版:
//单行注释 ————————————————快捷键ctrl+/
/* 多行注释 ____________快捷键ctrl+shift+/ */
标签
如何在HTML中使用JSP语句呢,JSP中有以下几种标签:
1 定义变量、函数标签
<%!
String s = "xingoo";//声明变量
int add(int a,int b){//声明函数
return a+b;
}
%>
在这种标签下定义的内容,会当做变量和方法,其他部分的JSP可以随意的引用。
2 JSP主体
<%
out.println("s="+s+"<br>");
out.println("<h1>test for buffer</h1>");
out.println("没那么简单<br>");
%>
这种标签时主要的逻辑处理区域。
3 JSP输出
s=<%=s %><br> <%--表达式不以分号结束 --%>
1+2=<%=add(1,2) %><br>
这种可以直接输出变量的值,以及方法的返回值。
JSP中的内置对象
JSP中有一些内置的对象,可以直接使用:
1 out 输出内容
2 request 请求对象,获取请求的相关信息
3 response 应答对象,设置响应的内容及信息
4 session 会话对象
5 application
6 Page
7 pageContext
8 exception
9 config
先说说前面三个,其他的后面继续。
out对象
out对象可以直接把信息输出到页面中,在输出到页面之前,out中的内容被放置在缓冲区中,缓冲区大小为8192个字节。
下面是out对象常用的方法:
缓冲区大小:<%=out.getBufferSize() %>byte<br>
<%
out.println("s="+s+"<br>");
out.println("<h1>test for buffer</h1>");
out.println("没那么简单<br>");
out.flush();
//out.clear();
out.clearBuffer();
out.println("就能找到聊得來的伴<br>");
%>
缓冲区大小:<%=out.getBufferSize() %>byte<br>
缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
是否自动清空:<%=out.isAutoFlush() %>
getBufferSize()方法用于获取当前缓冲区的大小;
println()方法用于向页面打印内容;
flush()方法用于刷新缓冲区,把缓冲区中的内容刷到页面中,并清空缓冲区;
clear()方法用于清空缓冲区,如果flush之后调用该方法会报错。
clearBuffer()方法用于清空缓冲区,如果flush之后不会报错。
getRemaining()方法用于获取当前剩余的缓冲区大小;
isAutoFlush()方法用于判断是否自动清空缓冲区;
参考代码:
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%--
language 脚本使用的语言
import 加载类文件
contentType 编码方式
--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>out内置对象</title>
</head>
<body>
<h1>JSP</h1>
缓冲区大小:<%=out.getBufferSize() %>byte<br>
<!-- 客户端可见 -->
<%-- 客户端不可见 --%>
<%!
String s = "xingoo";//声明变量
int add(int a,int b){//声明函数
return a+b;
}
%>
s=<%=s %><br> <%--表达式不以分号结束 --%>
1+2=<%=add(1,2) %><br>
<%
//单行注释 ————————————————快捷键ctrl+/
/* 多行注释 ____________快捷键ctrl+shift+/ */
out.println("s="+s+"<br>");
out.println("<h1>test for buffer</h1>");
out.println("没那么简单<br>");
out.flush();
//out.clear();
out.clearBuffer();
out.println("就能找到聊得來的伴<br>");
%>
缓冲区大小:<%=out.getBufferSize() %>byte<br>
缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
是否自动清空:<%=out.isAutoFlush() %>
</body>
</html>
运行结果:
request内置对象
request对象,通常用于进行请求的处理。比如提交表单后,通过request对象提取表单中的内容。
例如有如下的注册表单:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="jspRequest.jsp" method="post">
<table>
<tr>
<td>username</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>favorite</td>
<td>
<input type="checkbox" name="favorite" value="read"/>read
<input type="checkbox" name="favorite" value="music"/>music
<input type="checkbox" name="favorite" value="movie"/>movie
<input type="checkbox" name="favorite" value="game"/>game
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="submit"/></td>
</tr>
</table>
</form>
<br>
<br>
<a href="jspRequest.jsp?username=lisi">url test request(en)</a><br>
<a href="jspRequest.jsp?username=李四">url test request(zh)</a>
</body>
</html>
在jsp中可以使用setCharacterEncoding("")设置编码格式后,通过getParameter或者getParametervalues获取指定名称的内容。
<%
request.setCharacterEncoding("utf-8");//解决中文乱码问题
//无法解决url传递的中文乱码
request.setAttribute("password","12300");
%>
用户名:<%=request.getParameter("username") %><br>
爱好:<%
if(request.getParameterValues("favorite")!=null){
String[] favorites = request.getParameterValues("favorite");
for(int i=0; i<favorites.length; i++){
out.println(favorites[i]+" ");
}
}
%><br>
密码:<%=request.getAttribute("password") %><br>
MIME类型:<%=request.getContentType() %><br>
协议类型:<%=request.getProtocol() %><br>
请求的服务器名:<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort() %><br>
字符编码:<%=request.getCharacterEncoding() %><br>
<!-- 只有POST才能获取到字节数,如果是GET方式则会显示-1 -->
请求的长度(字节):<%=request.getContentLength() %><br>
客户端IP:<%=request.getRemoteAddr() %><br>
请求的真实路径:<%=request.getRealPath("jspRequest.jsp") %><br>
上下文路径:<%=request.getContextPath() %><br>
样例的代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>request内置对象</title>
</head>
<body>
<h1>request内置对象</h1>
<%
request.setCharacterEncoding("utf-8");//解决中文乱码问题
//无法解决url传递的中文乱码
request.setAttribute("password","12300");
%>
用户名:<%=request.getParameter("username") %><br>
爱好:<%
if(request.getParameterValues("favorite")!=null){
String[] favorites = request.getParameterValues("favorite");
for(int i=0; i<favorites.length; i++){
out.println(favorites[i]+" ");
}
}
%><br>
密码:<%=request.getAttribute("password") %><br>
MIME类型:<%=request.getContentType() %><br>
协议类型:<%=request.getProtocol() %><br>
请求的服务器名:<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort() %><br>
字符编码:<%=request.getCharacterEncoding() %><br>
<!-- 只有POST才能获取到字节数,如果是GET方式则会显示-1 -->
请求的长度(字节):<%=request.getContentLength() %><br>
客户端IP:<%=request.getRemoteAddr() %><br>
请求的真实路径:<%=request.getRealPath("jspRequest.jsp") %><br>
上下文路径:<%=request.getContextPath() %><br>
</body>
</html>
请求结果:
需要注意只有POST方式才能获取到请求的长度。
response内置对象
如果想模拟response的过程,可以直接创建一个如下的JSP,然后直接通过HTTP请求该页面:
<%@ page language="java" import="java.io.*" contentType="text/html; charset=utf-8"%>
<%
//设置编码格式
response.setContentType("text/html;charset=utf-8");
out.println("<h1>response内置对象</h1><hr>");
//out.flush();//强制输出,保证out输出的内容在response的输出流对象之前
PrintWriter outer = response.getWriter();
outer.println("response输出流输出的对象");//在out之前打印
//response.sendRedirect("reg.jsp");//请求重定向,需要把前面的flush方法注释掉
%>
注意的是,response有一个PrintWriter对象,这个对象默认会在out内置对象之前打印内容;
如果使用out.flush强制刷新缓冲区,则可以在PrintWriter之前打印。
重定向与转发
重定向是response的方法:
response.sendRedirect("jspRequest.jsp");//新的请求,数据都没了
重定向相当于一次新的请求,但是最开始请求的数据都没有了。URL地址栏也会变成重定向后的地址。
转发是request的方法:
request.getRequestDispatcher("jspRequest.jsp").forward(request,response);//服务器端行为
它会传送请求中的数据,并且URL地址栏不会发生变化,在用户看来,仿佛是没有经过转发一样。
参考
【1】慕课网:http://www.imooc.com/learn/166
- 数据库简介
- sql server实现自定义分割月功能
- jdbc基础 (三) 大文本、二进制数据处理
- 如何修改自增列值以及相应的解决方法
- linux下安装openssh-server
- jdbc基础 (二) 通过properties配置文件连接数据库
- SQL Server 存储过程的几种常见写法分析
- servlet请求转发、包含以及重定向
- servlet设置缓存时间以及文件的下载
- 用python做科学计算之pandas入门简介
- Servlet响应的中文字符集问题
- jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用
- JDBC
- ASP.NET Core 性能对比评测(ASP.NET,Python,Java,NodeJS)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 5行Python就能爬取 3000+ 上市公司的信息?
- iOS 代码染色原理及技术实践
- 微信小程序【常用组件及自定义组件】
- 虚拟机字节码执行引擎,JVM的马达图,是爱情呀
- 微信小程序【浅提WXSS样式】
- Kubernetes Liveness and Readiness Probes
- Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
- pytest文档59-运行未提交git的用例(pytest-picked)
- pytest文档57-单元测试代码覆盖率(pytest-cov)
- pytest文档58-随机执行测试用例(pytest-random-order)
- Kubernetes探针踩坑记
- 大揭秘| 我司项目组Gitlab Flow && DevOps流程
- 离线安装Superset 0.37(截图详细版)
- 如何高速转储、索引和第7层网络流量过滤?
- 爬虫 | JS逆向某验滑动加密(二)