【读书笔记】《Java Web整合开发实践》第3章 JSP
1. JSP:Java Server Pages
2. JSP注释:<%--注释内容--%>
3. page指令(页面指令):定义JSP页面的全局属性。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
常见属性见下表:
属性 |
定义 |
language=”ScriptLanguage” |
指定JSP Container用什么语言来编译,目前只支持JAVA语言。默认为JAVA |
extends=”className” |
定义此JSP网页产生的Servlet是继承哪个 |
import=”importList” |
定义此JSP网页要使用哪些Java API |
session=”true|false” |
决定此页面是否使用session对象。默认为true |
buffer=”none|size in kb” |
决定输出流(Input stream)是否又缓冲区。默认为8kb |
autoFlush=”true|false” |
决定输出流的缓冲区慢了后是否需要自动清除,缓冲区慢了后会产生异常错误(Exception).默认为true |
isThreadSafe=”true|false” |
是否支持线程。默认为true |
errorPage=”url” |
如果此页发生异常,网页会重新指向一个url |
isErrorPage=”true|false” |
表示此页面是否为错误处理页面。默认为false |
contentType=”text/html;charset=gb2312” |
表示MIME类型和JSP的编码方式。笔者使用例左 |
pageEncoding=”ISO-8859-1” |
编码方式。(笔者已经加入使用的编码) |
isELLgnored=”true|false” |
表示是否在此JSP页面中EL表达式。true则忽略,反之false则支持。默认为false |
4. include文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP文件合并成一个新的JSP页面。被插入的文件可以是一个文本文件,一个HTML文件或一个JSP文件。插入文件的路径,一般不用"/"开头,而使用相对路径。
<%@include file = "被包含文件的地址"%>
例如:
<%@ include file="a.txt"%>
<%@ include file="a.html"%>
<%@ include file="a.jsp"%>
5. taglib标签指令,引入标签库并设置标签库前缀。
<%@ taglib uri="tagLibraryURI" prefix="tagPrefix"%>
6. JSP脚本元素:通过JSP脚本元素可以将Java代码嵌入到JTML页面中。所有可执行的Java代码,都可以通过JSP脚本来执行。JSP脚本主要包含:声明语句,表达式,Scriptlets。
(1)JSP声明语句用于声明变量和方法,该变量或方法在整个JSP页面中都有效。
<%! java变量的声明语句%>
例如:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>WebProject</title>
</head>
<%!
public int a;
public String printStr(){
return "JSP method";
}
%>
<body>
<%
out.println(printStr());
%>
</body>
</html>
(2)JSP表达式,插入一个表达式,必须能够求值,并且计算结果会以字符串形式发送到客户端显示出来。
<%= 表达式 %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>WebProject</title>
</head>
<%!
String str = "JSP expression";
%>
<body>
<!-- JSP expression -->
<%=
str
%>
</body>
</html>
(3)JSP Scriptlet是一段Java代码段。在JSP Scriptlet中声明的变量是JSP页面的局部变量,调用JSP Scriptlet时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。
<% Java代码 %>
7.<JSP:include>JSP动作元素:当JSP页面运行时才会载入该文件,并不是简单地将被包含文件与JSP页面合并成一个新的JSP页面。
<jsp:include page="relative URL" flush="true|false"/>
page属性:指定被包含文件的url地址,是一个相对路径。
flush属性:指定当缓冲区满时,是否将其清空,默认值是false。
<body>
<jsp:include page="hello.txt"></jsp:include>
<jsp:include page="hello.jsp"></jsp:include>
</body>
8. <jsp:forward>页面重定向动作元素:停止当前JSP页面的执行,将客户端请求转交给另一个JSP页面。
<jsp:forward page="转向页面的URL地址"/>
<body>
<%
System.out.println("跳转前");
%>
<jsp:forward page="forward.jsp"></jsp:forward>
<%
System.out.println("跳转后");
%>
</body>
上述代码中第7行就不会执行了,因为此时页面已经跳转到了forward.jsp。
9. <jsp:param>提供参数的附属动作元素:通常和<jsp:include>,<jsp:forward>和<jsp:plugin>一起使用来传递参数。
<jsp:param name="参数名字" value="指定给param的参数值">
在index.jsp中有如下代码:
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<body>
<!-- JSP forward -->
<jsp:forward page="forward.jsp">
<jsp:param name="username" value="jack"/>
<jsp:param name="age" value="27"/>
</jsp:forward>
</body>
</html>
在跳转的页面forward.jsp中有如下代码:
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<body>
<P>USE INFORMATION IS AS FOLLOWS:
<br>
<%="User name is "+request.getParameter("username")%>
<%="User age is "+request.getParameter("age")%>
</body>
</html>
可以看到username和age就从index.jsp页面传到了forward.jsp页面了。
10.JSP内置对象
(1)request对象:获取客户端信息,包含的主要方法如下:
一下的例子显示form表单和reaquest结合用法:
index.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>表单页</title>
</head>
<body>
<form action="forward.jsp" method="post">
<p>用户名<input type="text" name="username"/></p>
<br>
<p>年龄<input type="text" name="age"/></p> <input type="submit" value="提交"/>
</form>
</body>
</html>
forward.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>receptive page</title>
</head>
<body>
<%request.setCharacterEncoding("gb2312"); %>
User name is:<%=request.getParameter("username")%>
Age is:<%=request.getParameter("age") %>
</body>
</html>
其中第7行是为了防止中文乱码的。
这样forward.jsp就可以从index.jsp页面获取到用户的姓名和年龄了。
如果不知道跳转前的页面有多少个参数,叫什么名字,则可以用 Enumeration params = request.getParameterNames(); 获得所有的参数,再用循环的方法遍历。
(2)response对象
void sendRedict(String url):重定向JSP文件。
与<jsp:forward>动作元素的最大区别在于<jsp:forward>只能在本网站内跳转,而response.sendRedict则可以跳转到任何一个地址的页面。
(3)out对象:向客户端返回信息。
11.JavaBean
JavaBean是用Java语言描述的软件组建模型,是一种特殊的Java类,具有一下几个语法特征:
(1)JavaBean是一个public类
(2)应该包含一个无参的构造方法
(3)JavaBean中属性的获取和设置需要使用标准格式定义的getXxx()方法和setXxx()方法。对于boolean类型的成员变量,可以使用isXxx()来代替。
在JSP中调用JavaBean有3个标准的动作指令:<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>
JavaBean实现用户登录的DEMO如下:
JavaBean类对应的User.java文件
package javabean;
public class User {
private String username;
private String password; public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
} }
index.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>表单页</title>
</head>
<body>
<form action="forward.jsp" method="post">
<p>用户名<input type="text" name="username"/></p>
<br>
<p>密码<input type="password" name="password"/></p> <input type="submit" value="提交"/>
</form>
</body>
</html>
forward.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>User Information</title>
</head>
<body>
<jsp:useBean id="userbean" scope="page" class="javabean.User"/> <!-- pass username from request object to username in JavaBean userbean -->
<jsp:setProperty property="username" name="userbean" param="username"/>
<jsp:setProperty property="password" name="userbean" param="password"/> <!-- get username from userbean -->
Username
<jsp:getProperty property="username" name="userbean"/><br>
Password
<jsp:getProperty property="password" name="userbean"/> </body>
</html>
注意User.java这个类文件一定不能放在默认的包里面,要新建一个包把它放进去。
【读书笔记】《Java Web整合开发实践》第3章 JSP的更多相关文章
- Java Web整合开发实战:基于Struts 2+Hibernate+Spring 目录
第1篇 Java Web开发基础第1章 Web的工作机制( 教学视频:31分钟) 1.1 理解Web的概念 1.1.1 Web的定义 1.1.2 Web的三个核心标准 1.2 C/S与B/S两种软件体 ...
- Java Web整合开发王者归来(JSP + Servlet + Struts + Hibernate + Spring) - 读书笔记
第1章 状态码表示响应类型: 保留 表示请求成功地接收 完成请求客户需进一步细化请求 客户错误 服务器错误 Web服务器: Apache服务器,特长是处理静态页面,效率非常高. Tomcat提供对JS ...
- 读书笔记--大规模web服务开发技术
总评 这本书是日本一个叫hatena的大型网站的CTO写的,通过hatena网站从小到大的演进来反应一个web系统从小到大过程中的各种系统和技术架构变迁,比较接地气. 书的内容 ...
- 《轻量级Java Web整合开发入门SSH》 - 快速理解Java框架的又一积木
学习JAVA不难,难的是没有多余的时间给你仔细学习. 伴随着项目的不断跟进,责任重于泰山,必须快速提升. 我不能期望把一本书或者一个项目完全吃透,只希望能用数量去 ...
- java web 整合开发王者归来学习总结
第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...
- [Java Web整合开发王者归来·刘京华] 1、 Java Web开发
目录: 1.Web技术简介 2.动态网站与静态网站 3.Java Web开发模式 4.JavaScript简介 1.Web技术简介 PS: 最近还有更凶残的技术,即整个操作系统都是基于Web的,如 ...
- Java Web整合开发(79) -- Struts 2
一. Struts 2.x 概述 不继承任何类的Action Struts 2的Action并不一定要实现Action接口或者继承ActionSupport,任何POJO都可以做Action,只要这个 ...
- Java Web整合开发(3) -- Servlet
Servlert基本程序架构: (FirstServlet.java + web.xml) FirstServlet.java package com.helloben.servlet; import ...
- <读书笔记>《Web前端开发最佳实践》
P77 P89 CSS Reset P94 给CSS样式定义排序 排序工具:CSScomb P97 什么是CSS的权重?权重是指选择符的优先级 P100 工具:Sass Less P101 框架 ...
随机推荐
- C++之类的静态成员变量和静态成员函数
static静态成员函数 在类中.static 除了声明静态成员变量,还能够声明静态成员函数. 普通成员函数能够訪问全部成员变量.而静态成员函数仅仅能訪问静态成员变量. 我们知道.当调用一个对象的成员 ...
- linux 命令之 ping
ping命令主要用于检測主机的连通性. 语法: ping [-dfnqrRv] [-c <完毕次数>] [-i <间隔秒数>] [-I <网络接口>] [-l &l ...
- erlang 洗牌 shuffle
很简单的一个场景:一副扑克(54张)的乱序洗牌 shuffle_list(List) -> [X || {_, X} <- lists:sort([{random:uniform(), N ...
- 如何用MathType编辑圆圈符号
数学往往是由很多的公式和符号组成的,一些用户朋友在写文章需要用到一些符号的时候,发现一般的编辑器很难满足一些比较专业的需求.这个时候就需要一款专业的数学公式编辑器.公式编辑器MathType就是这样诞 ...
- Nginx系列之负载均衡和反响代理
NGINX介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行 其特点是占有内存少,并发能力强,事实上nginx ...
- 构造方法与构造块的执行顺序(区别于static)
小面试题:在类的实例化时,会调用类的构造块(类中的构造块)和构造方法,无论构造方法在前还是在后,都先执行构造块 class Person{ public Person(){ System.out.pr ...
- 编写自己的ls命令
····要编写ls命令,首先要了解它能做什么,完成了什么工作,是如何完成这些工作的···· 一.ls命令能做什么? 我们在命令行输入ls,ls默认找出当前目录中所有文件的文件名,并且按照字典序排序后 ...
- 《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?
原创文章,欢迎转载.转载请注明:关东升的博客 看下面的示例代码是不是使用过: var studentList: String[] = ["张三","李四",&q ...
- js split 的用法和定义 js split分割字符串成数组的实例代码
关于js split的用法,我们经常用来将字符串分割为数组方便后续操作,今天写一段广告判断代码的时候,竟然忘了split的用法了,特整理下,方便需要的朋友, 关于js split的用法其它也不多说什么 ...
- Vue.js之组件嵌套
Vue.js中组件嵌套有两种方式 第一种:注册全局组件 例如在components文件夹下新建一个User.vue组件,然后在main.js文件中注册全局组件 //注册全局组件 Vue.compone ...