java web笔记之与JSP的热恋

1.JSP简介

JSP是一种基于文本的程序,其特点时html代码与java程序共同存在。执行时JSP会被Tomcat自动编译,这个过程对开发者是透明的,不需要关注。编译后的JSP跟HttpServlet一样,都是javax,servlet.Servlet接口的子类,因此JSP是另一种形式的Servlet.
一般意义上,在提到JSP与Servlet时,Servlet一般是指HttpServlet而不是Servlet接口。

2.JSP工作原理

JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下的,先编译后部署。而JSP则是先部署源代码后编译为class文件的,先部署后编译

3.JSP指令

3.1 page指令

page指令是最常用的指令,用来声明JSP页面的属性等。JSP属性可以写在一个page指令里,也可以写在多个指令里,每个指令且保持唯一除import指令。
如:
<%@ page language="java" %>


属性名称取值范围描述
pageEncodingutf-8,gbk,iso8859-1等等设置编码格式
languagejava指明解释该JSP文件时采用的语言。一般为java语言。默认为java
extends任何类的全名指明编译该JSP文件时继承哪个类。JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init和destroy等方法
import任何包名,类名引入该JSP中用到的类、包等。import是唯一可以声明多次的page指令属性。一个import属性可以引用多个类,中间用英文逗号隔开,如<%@ page import="java.util.List,java.util.ArrayList" %>.JSP中下面四个包里的类可以直接使用:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*
sessiontrue,false指明该JSP时候内置Session对象。如果为true,则内置Session对象,可直接使用。否则不内置Session对象。默认为true。
autoFlushtrue,false是否运行缓存。如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存在缓存里,缓存满或者程序执行完毕或执行out.flush()操作时才到达客户端。默认为true.
buffernone或者数字+kb指定缓存大小,当autoFlush设为true时有效,例如<@page buffer="10kb"%>
isThreadSafetrue,false指定是否线程安全。如果为true,则运行多个线程同时运行该JSP程序,否则只运行一个线程运行,其余线程等待。默认为false
isErrorPagetrue,false指定该页面是否为错误处理页面。如果为true,则该jsp内置有一个Exception对象exception,可直接使用,否则没有。默认为false.
errorPage某个jsp页面的相对路径指明一个错误显示页面,如果该jsp程序抛出了一个未捕捉的异常,则转到errorPage指定的页面。errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常。
contentType有效的文档类型客户端浏览器根据该属性判断文档类型,例如:
HTML格式为 text/html
纯文本格式为 text/plain
JPG图像为 image/jpeg
GIF图像为 image/gif
WORD文档为 application/msword
info任意字符串指明JSP的信息。该信息可以通过Servlet.getServletInfo()方法获取到
trimDirectiveWhitespacestrue,false是否去掉指令前后的空白字符。默认为false


3.2include指令

用来实现jsp区块化,一个jsp中引入另一个jsp.
<%@ include file="head.jsp" %>

3.3 taglib 指令

JSP标签库
<%@ 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">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>

</head>
<body>
	<c:forEach var="item" items="arrays">
	
		<c:out value="item"></c:out>
	</c:forEach>

</body>
</html>

4.JSP行为

4.1 <jsp:include/>行为

属性page是必须的,为被包含的相对路径,必须为本web应用程序内部的文件。
属性flush取值范围为true或者false,默认为false,设置读入被保存文件内容前是否清空缓存。
<jsp:include flush="true" page="/head.jsp"></jsp:include>
这里是正文

<jsp:include flush="true" page="/foot.jsp"></jsp:include>
注意:<jsp:include> 与<@ include file="">的区别, <jsp:include>是在运行时包含的,而且只包含运行结果(先运行后包含)是使用request.fetRequestDispatcher("url").forward(request.response)来执行被包含文件,<@ include file="">是在编译时包含的,包含的是源代码(先包含后运行)

5.使用java bean(POJO)

属性名取值范围描述
id合法的java变量名指明javabean对象名称。jsp中可以使用该名称引用该java bean 对象
classjava bean 类的全名java bean类的全名
scopepage,request,session,application该java bean 对象的取值范围。当为page时,只在该jsp内有效。当为request 时,只在当前的request中有效。当为session时,对当前用户有效。当为application时,当前web程序内有效。默认我为page
person.java
package com.wang.userBean;

public class Person {
	private String name;
	
	private String age;
	
	private String sex;
	
	private String secret;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getSecret() {
		return secret;
	}

	public void setSecret(String secret) {
		this.secret = secret;
	}
	
	

}<strong>
</strong>
userBeanA.jsp
<%@ 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>userBean测试</title>
</head>
<body>
<div align="center">
	<form action="userBeanB.jsp" method="post">
		<fieldset >
			<legend>请填写Person信息</legend>
				<table align="center" >
					<tr>
						<td align="right" style="font-weight: bold;">姓名:</td>
						<td><input type="text" name="name" value="" /></td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;">年龄:</td>
						<td><input type="text" name="age" value="" /></td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;">性别:</td>
						<td>
							<input type="radio" name="sex" value="male" />male
							<input type="radio" name="sex" value="female" />female
						
						</td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;"></td>
						<td>
							<input class="button" type="submit" name="search" value="提交Person信息" style="width:200px;"/>
						
						</td>
					
					</tr>
				
				</table>
	</fieldset>
	
	</form>



</div>

</body>
</html>
userBeanB.jsp
<%@ 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>userBeanB</title>
</head>
<body>
<!-- 声明Person类对象 -->
<jsp:useBean id="person" class="com.wang.userBean.Person" scope="page"></jsp:useBean>
<!-- 设置person类的所有属性,属性值从request中获取,*表示所有属性 -->
<jsp:setProperty property="*" name="person"/>

<fieldset >
			<legend>请填写Person信息</legend>
				<table align="center">
					<tr>
						<td align="right" style="font-weight: bold;">姓名:</td>
						<td>
								<jsp:getProperty property="name" name="person"/>
						</td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;">年龄:</td>
						<td><jsp:getProperty property="age" name="person"/></td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;">性别:</td>
						<td>
							<jsp:getProperty property="sex" name="person"/>
						
						</td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;"></td>
						<td>
							<input  type="button" οnclick="history.go(-1)" value="返回" style="width:200px;"/>
						
						</td>
					
					</tr>
				
				</table>
	</fieldset>
</body>
</html>

Scope实现各种计数器
Counter.java
package com.wang.userBean;

public class Counter {
	private int count;

	public int getCount() {
		return ++count;
	}

	public void setCount(int count) {
		this.count = count;
	}
}

personCount.jsp
<%@ 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>userBean测试</title>
</head>
<body>
<div align="center">
	<!-- 声明Person类对象 -->
<jsp:useBean id="personCount" class="com.wang.userBean.Counter" scope="session"></jsp:useBean>
<jsp:useBean id="totalCount" class="com.wang.userBean.Counter" scope="application"></jsp:useBean>

<fieldset >
			<legend>计数器</legend>
				<table align="center">
					<tr>
						<td align="right" style="font-weight: bold;">您的访问次数:</td>
						<td>
								<jsp:getProperty property="count" name="personCount"/>
						</td>
					
					</tr>
					<tr>
						<td align="right" style="font-weight: bold;">总共的访问次数:</td>
						<td><jsp:getProperty property="count" name="totalCount"/></td>
					
					</tr>
				</table>
	</fieldset>



</div>

</body>
</html>
以上项目下载地址:http://download.csdn.net/detail/wangxuewei111/8514959

6.EL表达式


类别

标识符

描述

示例

请求参数

Param

包含所有参数的Map.可以获取参数(返回String)

${param.foo}

${param[‘foo’]}

paramValues

包含所有参数的Map.可以获取参数(返回String[])

当提交多个参数,例如el.jsp?a=first&a=second,提交的参数a为多个值{“frist”,”second”}.使用param只能获取第一个值,而使用paramValues能够获取到其他的值。${param.a[0]},将输出first, ${param.a[1]},将输出second

头信息

Header

包含所有头信息的Map,可以获取头信息(返回 String)

${header.host}可能返回localhost:8080

headerValues

包含所有头信息的Map,可以获取头信息(返回 String[])

${header.host[0]}.当头信息为数组时可以取多个值

Cookie

Cookie

包含所有cookie的Map,key为cookie的name属性

使用<% response.addCookie(new Cookie(“userName”,”wangdawei”)); %>

设置cookie后,${cookie.userName}返回该cookie,而$(cookie.userName.vakue)返回“wangdawei”,$(cookie.userName.name)返回“userName”

初始化参数

initParam

包含所有初始化参数的Map.可以获取初始化参数

${initParam.encoding}

作用域

PageScope

包含page作用域内变量的Map

使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”page/”>声明pageScope范围内的Person对象后,${pageScope.person.age}将输出该对象的age属性

requestScope

包含request作用域内变量的map

使用<jsp:userBean id=”person” class=”com.wang.Person” /”>声明pageScope范围内的Person对象后,${pageScope.person.age}将输出该对象的age属性。UserBean的默认作用域为request

sessionScope

包含session作用域内变量的map

使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”session/”>声明pageScope范围内的Person对象后,${ sessionScope.person.age}将输出该对象的age属性

applicationScope

包含application作用域内变量的map

使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”application/”>声明pageScope范围内的Person对象后,${ applicationScope.person.age}将输出该对象的age属性

 

pageContext

包含页面内的变量的Map,包含request,response,page,application,config等所有隐藏对象

${pageContext.request.remoteAddr}将返回客户端ip地址。相当于执行<%= pageContext.getRequest().getRemoteAddr() %>

 









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值