JSP模板元素定义了网页的基本骨架,即定义了页面的结构和外观。
jsp的几大对象
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
[JSP的脚本,如下]
<%
request.setAttribute("name", "张三");
request.getRequestDispatcher("/one02.jsp").forward(request, response);
%>
在【<% ****** %>】之前的java代码称作为jsp脚本
[JSP表达式,如下]
脚本表达式(输出一个变量):<%=request.getAttribute("name") %>
在【<%=这里写表达式 %>】这样的表示jsp表达式,注意:表达式不是语句,所有最后不能有“;”号
例如:如下代码
<%
for(int i=0;i<4;i++){
%>
<%=i %>
112
<%
}
%>
显示结果为:
在jsp页面中,可以用上述方法巧妙的运用HTML页面标签和jsp的java脚本和表达式组成循环,输出table
[jsp声明]
<%!
int a=0;
public void add(){
System.out.println("大家好");
}
public class A{
public void add1(){
System.out.println("大家好,我是内部类");
}
}
%>
<%
this.add();
A a=new A();
a.add1();
%>
后台自动编译后会变成:
可以发现jsp声明中的变量,会变成类的属性,而类会变成内部类。
在【<%! ****** %>】里面的java代码里面可以定义方法和属性
[jsp注释]
<%-- 我是jsp注释 --%>
JSP引擎在将jsp页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
[JSP指令]
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP2.0规范中共定义了三个指令:
静态指令
page指令
lnclude指令
taglib指令
例如:
<%@ page import="java.awt.*" %>
可以使用page指令引用java包到页面上。
在【<%@ *** %>】中的属性又如下:
【pageEncoding="UTF-8"】设置jsp页面的默认编码和客户端页面的默认编码为UTF-8
【contentType="text/html;charset=ISO-8859-1"】设置客户端编码,默认是ISO-8859-1和pageEncoding在页面的显示上没有任何区别
【import=""】用来在当前jsp页面中引入jar包
【language="java"】 指定当前页面支持的脚本语言为java(目前jsp只支持java脚本语言)
【autoFlush="true"】是否自动刷新,由服务端向客户端自动发送数据(一般不要修改)
【buffer="8kb"】指定缓冲区大小默认是8kb
【extends】继承,可以修改继承的类,可以自己写类继承。默认继承了一个类。
【info】键值对,可以在服务端拿到。一般很少用
【isELIgnored="false"】是否支持EL表达式,如果是true,表示不支持EL表达式。
【isThreadSafe="true"】是否是线程安全,默认是true,表示是线程安全
【session="true"】是否可以在页面中使用session。默认是true,表示在jsp页面上可以直接使用。
【isErrorPage】定义当前页面是否是错误处理页面。默认是false 不是错误处理页面
【errorPage】指定当前页面jsp脚本发送错误时,错误处理页面时那个。一般和isErrorPage一起使用。相当于错误处理机制
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好放在整个JSP页面的起始位置。
errorPage属性的设置值为一路径(相对或者绝对),如果以“/"开头,表示相对于当前WEB应用程序的根目录(注意站点根目录,否则,表示新队路径)
可以在web.xml文件中使用
在web.xml配置全局的应该如下:
404
/one04.jsp
如下是演示一种error错误处理
触发错误页面代码为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="one05.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
演示error异常处理
<%
out.write("aaa你好");
out.write(10/0);//保证一定会出现异常
%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
本页面为异常处理页面
服务器正忙,请一会访问!
<%
String str=exception.getMessage();
out.write(str);
%>
include包含
1.静态包含:指代码级别的包含,指将目标页面的源码拷贝一份包含进来
2.动态包含:指是执行目标页面,将结果包含进来
例如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page import="java.awt.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
jsp指令标签3个
<%-- 我是jsp注释 --%>
<%@ include file="one06.jsp" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
include指令《静态包含》
静态包含,我是页面one06
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
include动态包含
我也页面07
【JSP标签】
JSP标签也称之为JspAction(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难维护。
JSP常用的标签:
[
用于吧另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入
语法:
page属性用于指定引入资源的相对路径,它也可以通过执行一个表达式来获得。
flush属性指定在次啊如其它资源的输出内容时,是否先将当前JSP页面的以输出的内容刷新到客户端。
而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在原文件级别进行合并。
不管是
[
语法:
page属性用于指定引入资源的相对路径,它也可以通过执行一个表达式来获得。
当使用
语法1:
语法2:
例如如下示例:
JAction01.jsp代码为:
JSP的动作标签
<%
request.setAttribute("name", "小龙女");
%>
JAction02.jsp代码为:
<%
out.write("name="+request.getAttribute("name"));
%>
age=<%=request.getParameter("age") %>
weight=<%=request.getParameter("weight") %>
页面显示结果为:
上面示例,中使用了
【[jsp:userBean][jsp:setProperty][jsp:getProperty]标签】
语法:
示例:
jsp手动封装参数
<%
request.setCharacterEncoding("UTF-8");
%>
姓名:
年龄:
性别:<%=juser.getSex() %>
地址:<%=juser.getAddress() %>
java 自定义类Juser代码为:
package com.gdy.jjsp;
import java.io.Serializable;
/**
* 创建一个类,方便jsp封装参数
* @author Administrator
*
*/
public class Juser implements Serializable{
private String name;//姓名
private int age;//年龄
private String sex;//性别
private String address;//地址
@Override
public String toString() {
return "Juser [name=" + name + ", age=" + age + ", sex=" + sex
+ ", address=" + address + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
上述封装方式还可以如下封装
jsp自动封装
姓名:<%=zduser.getName() %>
年龄:<%=zduser.getAge() %>
性别:<%=zduser.getSex() %>
注意:
如下:
jsp存储,使用session存放
姓名:
年龄:
性别:<%=user2.getSex() %>
>跳转JUserBing03
将页面传递过来的值是有session接收的页面可以正常使用jsp:getProperty来获取。但入过再通过超链传递到达其他页面,那么获取值应该如下:
获取JuserBing02存储在session里面的数据
<%
Juser user=(Juser)session.getAttribute("user2");
%>
<%--
注意,这时不能使用 再来获取user的值了。
只能使用<%=user.getAge() %>这种方式来获取值
--%>
姓名:<%=user.getName() %>
年龄:<%=user.getAge() %>
性别:<%=user.getSex() %>