您的位置:首页 > Web前端 > JavaScript

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