JSP的基本原理
2016-02-29 19:28
681 查看
JSP的本质是Servlet
JSP的本质是Servlet,当用户向指定的Serlet发送请求时,Servlet利用输出流动态生成HTML页面包括每一个静态的HTML标签和所有在HTML页面出现的内容JSP页面内容包括两部分:
静态部分:html标签,静态的页面内容
动态部分:受Java程序控制的内容,这些由Java脚本动态生成JSP页面代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage=""%> <html> <head> <title> web </title> <body> 这是一个简单的web应用<br> 现在时间为:<% out.println(new java.util.Date());%> </body> </head> </html>
JSP页面是Servlet的一种简化,其实还是使用了Servlet,在Web应用中每个JSP页面都会有Servlet容器生成对应的Servlet,在Tomcat中,JSP页面生成的Servlet放在work路径对应的Web应用下
JSP的四种基本语法
JSP注释
两种注释格式:<%– 注释内容 –%>
<!– 注释内容 –>
JSP声明
语法格式:<%! //声明部分 //声明一个方法 public String prin(){ return "这是一个声明"; } %>
注意:JSP页面的声明部分将转换成对应的成员或成员方法,其中不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应的Servlet变成抽象类,从而无法实例化
JSP输出表达式
用输出的简单表达式,相当于out.println,表达式语法后没有分号<%=表达式%>
JSP脚本
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage=""%> <html> <head> <title> web </title> <body> Jsp脚本<br> <% for(int i=1;i<10;i++){ %> 脚本输出:<%=i%> <br> <% } %> </body> </head> </html>
JSP脚本声明的变量是局部变量,但是不可以使用private,public 等控制访问修饰符,也不能用static,JSP脚本里不能定义方法
JSP的三个编译指令
语法格式<% 编译指令名 属性名=”属性值”····%>
page指令
page指令各属性的意义:extends:指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口
import:导入包,默认导入的包有:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*
session:是否需要HTTP Session
buffer:指定输出缓冲区大小,默认8KB
autoFlush:输出缓冲区溢出时,是否需要强制输出缓冲区内容
info:设置该JSP程序的信息,在jsp中可以直接调用getServletInfo()获取
errorPage:指定错误处理页面
isErrorPage:设置JSP页面是否为错误处理程序
contentType:指定文件格式和编码字符集
pageEncoding:指定编码字符集
include指令
include编译指令语法<%@include file=”relativeURLSpec”%>
静态的includeb编译指令,会把目标页面的其他编译指令包含起来加入到本页面,融合成一个页面,也就是说被包含页面的内容完全融入了包含页面所生成的Servlet中,所以被包含页面甚至不需要一个完整的页面,但两个页面的编译指令冲突,那么页面就会出错。
JSP的七个动作指令
include指令
该指令是一个动态include指令,也用于包含某个页面,它不会导入被include页面的编译指令,仅仅将导入页面的body内容插入到本页面<jsp:include page="{relativeURL|<%=experssion%>}" flush="true"/>
flush属性用于指定输出缓存是否转移到被导入文件中,对与JSP1.1以前版本,只能设置成flase
forward,param指令
forward用于将页面响应转发到另一个页面,可以转到HTML静态页面,动态的JSP页面和转发到容器中的Servlet对于JSP1.0 <jsp:forward page="{relative|<%=expression%>}"/> 对于JSP1.1 <jsp:forward page="{relative|<%=expression%>}"> <jsp:param name="paramName" value="paramValue"/> </jsp:forward>
执行forward指令时,用户请求的地址栏依然没有发生改变,但页面的内容却完全被forward目标页的内容
param指令用于设置参数值,这个指令不能单独使用,可以和jsp:include,jsp:forward,jsp:plugin这三个指令结合使用
useBean,setProperty,getProperty指令
都是和JavaBean相关的指令,其中useBean指令用于在JSP页面中初始化一个Java实例,setProperty指令用于为JavaBean实例的属性设置;getPorperty指令用于输出JavaBean实例属性package jspDemo; public class Person { private String name="wee"; private int age=21; private String ad="meizhou"; 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 getAd() { return ad; } public void setAd(String ad) { this.ad = ad; } }
index.jsp
<%@page import="jspDemo.Person"%> <%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="" %> <html> <head><title>javaBean test</title></head> <body> //第一种方法 <jsp:useBean id="id" class="jspDemo.Person" scope="page"/> <jsp:setProperty name="id" property="name" value="zy"/> <jsp:setProperty name="id" property="age" value="23"/> <jsp:getProperty name="id" property="name"/> <jsp:getProperty name="id" property="age"/> <jsp:getProperty name="id" property="ad"/> //--------------------------------------------- //第二种方法 <% Person per = new Person(); pageContext.setAttribute("pe",per); per.setName("hlc"); per.setAge(22); %> <%=per.getName()%> <%=per.getAge()%> <%=per.getAd() %> </body> </html>
JSP脚本中的内置对象
这九个内置对象都是ServletAPI接口的实例,是JSP规范对它们进行了默认初始化,可以直接使用。application对象
application对象代表Web应用本身,使用application操作web应用相关数据,主要有两个作用1.在整个web应用的多个jsp,servlet之间共享数据。
2.获取web应用配置参数
config对象
config对象代表当前jsp配置信息,但jsp页面通常无需配置,因此就不存在配置信息,但Servlet需要在web.xml中配置参数。获取配置信息的方法:getInitParameter(String paramName)
<%@ page contentType="text/html; charset=utf-8" errorPage="" %> <html> <head><title>config</title></head> <body> name:的配置参数:<%=config.getInitParameter("name") %> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>config</display-name> <servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <jsp-file>/confitest.jsp</jsp-file> <init-param> <param-name>name</param-name> <param-value>lcy</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping> </web-app>
jsp页面获取web.xml配置文件中的信息,需要通过jsp配置的路径来访问。
pageContext对象
pageContext可以访问page,request,session,application范围的变量getAttribute(String name)获取page范围内的name的属性值
getAttribute(String name ,int scope):获取指定范围内的name属性,其中scope可以有:
PageContext.PAGE_SCOPE 对应page范围
PageContext.REQUEST_SCOPE 对应request范围
PageContext.SESSION_SCOPE 对应session范围
PageContext.APPLICATION_SCOPE 对应application范围
<%@ page contentType="text/html;charset=utf-8" language="java" errorPage="" %> <html> <head><title>pageContext</title></head> <body> <% pageContext.setAttribute("page","p"); request.setAttribute("request","p"); pageContext.setAttribute("request2","p",pageContext.REQUEST_SCOPE); session.setAttribute("session","p"); pageContext.setAttribute("session2","p",pageContext.SESSION_SCOPE); application.setAttribute("application","p"); pageContext.setAttribute("application2","p",pageContext.APPLICATION_SCOPE); out.println(pageContext.getAttributesScope("page")+"<br>"); out.println(pageContext.getAttributesScope("request")+"<br>"); out.println(pageContext.getAttributesScope("request2")+"<br>"); out.println(pageContext.getAttributesScope("session")+"<br>"); out.println(pageContext.getAttributesScope("session2")+"<br>"); out.println(pageContext.getAttributesScope("application")+"<br>"); out.println(pageContext.getAttributesScope("application2")+"<br>"); out.println(pageContext.getAttribute("page",pageContext.PAGE_SCOPE)+"<br>"); out.println(pageContext.getAttribute("request",pageContext.REQUEST_SCOPE)+"<br>"); out.println(pageContext.getAttribute("request2",pageContext.REQUEST_SCOPE)+"<br>"); out.println(pageContext.getAttribute("session",pageContext.SESSION_SCOPE)+"<br>"); out.println(pageContext.getAttribute("application",pageContext.APPLICATION_SCOPE)+"<br>"); %> </body> </html>
request对象
1.获取请求头/请求参数服务器端负责解析请求头/请求参数的就是JSP或Servlet,而JSP和Servlet取得请求参数的途径就是request。request是HttpServletRequest的接口实例,提供了几个方法获取参数:
String getParameter(String paramName):获取paramName请求参数的值.
Map getParameterMap():获取所有请求参数名和参数值所组成的map对象
Enumberation getParameterNames():获取所有请求参数名所组成的Enumeration对象
String[] getParameterValues(String name):parameter请求参数值,有多个值是,返回一个数组
获取访问请求头
String getHeader(String name):请求头的值
java.util.Enumeration < String > getHeaderNames():获取所有请求头的名称
java.util.Enumeration < String > getHeaders(String name):获取指定请求头的多个值
int getIntHeader(String name):获取指定请求头的值,并将该值转为整数值。
相关文章推荐
- JSP/PHP基于Ajax的分页功能实现
- 开发阶段Jetty运行Jsp报错且响应空白
- jsp简单实现页面之间共享信息的方法
- Apache Web让JSP“动”起来
- JSP学习经验小结分享
- JSP 多条SQL语句同时执行的方法
- 在jsp页面中响应速度提高的7种方法分享
- (jsp/html)网页上嵌入播放器(常用播放器代码整理)
- JSP上传excel及excel插入至数据库的方法
- JSP中文乱码常见3个例子及其解决方法
- jsp实现将动态网页转换成静态页面的方法
- JSP避免Form重复提交的三种方案
- 纯jsp实现的倒计时动态显示效果完整代码
- JSP自定义标签入门学习
- JSP实现添加功能和分页显示实例分析
- JSP中param标签用法实例分析
- JSP实现从不同服务器上下载文件的方法
- jsp 标准标签库简析