首页 > 代码库 > jsp

jsp

一、JSP的简单介绍
JSP 是java server pages。称为java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。

原来使用Servlet,接收用户的请求,处理完业务逻辑之后,需要response回去给客户端浏览器HTML的时候,就是用流写出,但是写出是一件非常麻烦的事情,可能处理业务代码只需要三两行java代码,但是输出html页面就需要占用很大的篇幅。因此提出假设,如果可以反过来,将java代码写在html页面中,这样可以很大程度的减轻编程人员的编程压力。
因此 jsp就诞生了。

所以所谓的jsp = html+java,servlet=java+html.其实就是在html页面中嵌套java代码。


二、jsp的执行流行。

翻译 编译
jsp-----------》.java文件-------------》.class文件

java代码想要执行一定要先编译成字节码文件,才能够执行。jsp因为包含了java代码,因此必须让他能够先变成java文件,然后再编译成.class文件。才能执行。jsp翻译过后就是一个servlet对象。符合servlet标准。


流程:
1.服务器接受到客户端的请求,判断访问的jsp页面是否存在,如果不存在返回404。
2.把jsp页面首先翻译成xx_jsp.java文件(其实就是一个servlet),然后再将.java文件编译成一个.class文件(字节码)。servlet生命周期
翻译: jsp ---- > .java

编译: .java --- >.class

构建xx_jsp对象,调用init,service()
所以对于jsp页面而言,第一请求的时候反应比较慢。下次在调用直接执行service

3.jsp如果实例存在,直接执行_jspService方法
4.如果jsp页面发生变化,需要重新执行,翻译,以及编译的过程

jsp:翻译,编译,执行
注意:翻译,编译是在第一次访问jsp页面的时候执行,在jsp页面发生变化的时候也会执行

三、jsp语法
1.脚本元素
1.1).声明
语法:<%!content%>
作用:可以声明成员变量,成员方法,成员内部类
1.2).脚本
语法:<%content%>
作用:声明service方法里边的局部变量,java脚本。
1.3).表达式
语法:<%=exp%> 相当于out.print(exp);
作用:取值,输出内容(可以被打印的所取值)到页面
2.指令元素
2.1).page:
<%@page attriName="attriValue"%>
language="java":
目前来说只能是java
contentType="text/html; charset=UTF-8"
用来控制页面输出时的格式和编码

pageEncoding="UTF-8":设置当前文件的编码

import="java.util.Date,java.util.ArrayList"
:和普通java类中的import操作一致,用来导入所使用的对象。这是允许出现多次的属性
如果需要导入多个包中的内容,import的值可以使用‘,’隔开
extends="":用来指明当前jsp页面所要继承的父类

session="true":控制当前页面的内置session对象是否可用

info=“”:这个info中的信息可以使用getServletInfo来获取

errorPage="test1.jsp":设置如果当前页面发生异常后,要跳转到的页面

isErrorPage="true":表明当前页面是否是errorpage,如果设置为true,那么当前页面的内置Exception对象可以使用。

isELIgnored="false: 当前页面是否忽略EL表达式:
isThreadSafe="true":是否是线程安全

2.2).include:
静态包含:包含发生在jsp翻译成.java文件的时候,只生成一个.java文件
效率高
2.3).taglib
导入标签库(jstl,struts2)
prefix="别名"
uri="路径"

3.动作元素:
3.1).<jsp:include page="/beInclude.jsp"></jsp:include>
包含:动态包含,包含发生在执行阶段

3.2).<jsp:forward>
服务器内部跳转

3.3).<jsp:param value="http://www.mamicode.com/testforward" name="test"/>
用于在<jsp:include><jsp:forward>
后边携带参数,使用getParameter(String name)获取


3.4).可重用的组件:useBean
<jsp:useBean>
id:bean实例的名字
class:全类名
beanName:全类名
type:全类名
beanName,type联合使用:
type a = new beanName();
scope:范围 page/request/session/application
分两种情况:
默认是从scope所指定的范围查找以id命名的属性是否存在。
id:所代表的bean实例存在
useBean 相当于scope.getAttribute("id");
id:所代表的bean实例不存在
new出一个新的实例

<jsp:setProperty>
User
property:bean的属性名
name:bean实例的名字
value:赋的值
param:获取参数
<jsp:getProperty>
propery:bean的属性名
name:bean实例的名字

四、jsp中的注释:
1.html注释:
<!-- comment -->
注释不了脚本<%%>,注释不了声明

2.隐藏注释:
语法:<%-- comment --%>
可以注释掉所有的内容,包括可执行的内容都不再执行

3.脚本注释:
<%

//1.单行注释

/*
2.多行注释
*/

/**
3.文档注释
*/

%>

html 隐藏注释 脚本注释
浏览器页面: 看不到 看不到 看不到
页面源代码(右键): 可以看到 看不到 看不到
翻译后的.java文件: 可以看到 看不到 看到

 

五、jsp九大内置对象(重要):
jsp的内置对象是指有些固定名字的变量在jsp代码中可以直接拿过来使用,比如之前用的out,request等
out:PrintWriter(JspWriter)
page:代表的是jsp实例(this)
pageContext:代表当前页面的范围
request:代表的是HttpServletRequest(一次请求的范围)
response:HttpServletResponse
session:HttpSession(一次回话范围)
application:ServletContext(整个应用的范围)
config:ServletConfig
exception

jsp