JSP和JSTL

一.JSP概念

Servlet是j2ee提供的动静资源开发技术,是以java的程序的模式进行开发,在java中书写HTML标签是一件非常头疼的事件,所以人们开发出了JSP,看起来像是HTML一样,然而通过服务器的编译最终能够生成Servlet。

输入以后工夫:

<%              Date date = new Date();              String dateStr = date.toLocaleString();            out.write(dateStr);%>
二.JSP的组成部分

1.模版元素

间接书写在JSP中的HTML内容,看起来就像写HTML一样的不便,然而最终会在被翻译成Servlet的过程中 out.write()间接输入。

2.脚本表达式

<%= 表达式%> 承受的是一段java表达式,在JSP翻译到Servlet的过程中,将会计算表达式的值,利用out.write()输入进来。

输入以后工夫:

<%= new Date().toLocaleString() %>
3.脚本片段

<% %>间接能够在脚本片段中书写java源代码,其中的源代码将会间接拷贝到翻译过去的servlet中的响应地位上。

4.JSP申明

<%! %>在其中能够写java代码,其中的源代码会被拷贝到servlet中的service办法之外,能够利用它来为servlet减少成员办法、成员变量、动态代码块。

5.JSP正文

<%-- --%>被jsp正文包围起来的内容将不会被服务器翻译到servlet之中,要留神辨别html正文和java正文的区别。
1)jsp正文不会被翻译到servlet中,会在翻译时遗弃。
2)java正文(<%// %>)不会被编译到class文件中,会在编译时遗弃。
3)html正文(<!-- -->)将会当作模版元素,间接输入到浏览器中,浏览器将不会显示html正文中的内容。

<% int i = 0; %><!--  <%  i=i+100; %>  --><%=i %> 浏览器输入:100 因为是HTML正文,会被执行,过后不会显示,所以i+100会被执行,最初输入100
三.JSP指令

1)Page指令

page指令(https://segmentfault.com/a/11...

Tips:

1.errorPage能够设置谬误提醒界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" errorPage="/error.jsp" %>

也能够在web.xml中配置

<error-page>        <error-code>404</error-code>        <location>/error/404.jsp</location></error-page>

2.pageEncoding="utf-8"能够解决JSP中所有的中文乱码问题

2)include指令

<%@ incluede file=""%> 动态引入其余页面的内容
动态引入:在源文件级别进行合并,多个jsp生成一个servlet,最终由这一个servlet生成响应,举荐应用。

3)taglib指令
四.九大隐式对象(config,reponse,request,application,session,out,page,pageContext,exception)

1)out对象

能够将它了解成response.getWriter()取得的PrintWriter,在JSP页面中,只用它去输入数据,不要用response.getWriter()

<%              Date date = new Date();              String dateStr = date.toLocaleString();            out.write(dateStr);%>
2)PageContext对象

(1)获取其它八大隐式对象,能够认为是一个入口对象。(在自定义标签中应用)

getException办法返回exception隐式对象
getPage办法返回page隐式对象
getRequest办法返回request隐式对象
getResponse办法返回response隐式对象
getServletConfig办法返回config隐式对象
getServletContext办法返回application隐式对象
getSession办法返回session隐式对象
getOut办法返回out隐式对象

(2)域对象,四大作用域的入口,能够操作四大作用域中的域属性
作用范畴: 以后jsp页面
生命周期: 当对jsp页面的拜访开始时,创立代表以后jsp的
PageContext,当对以后jsp页面拜访完结时销毁代表以后jsp的pageContext
作用:在以后jsp中共享数据

public void setAttribute(java.lang.String name,java.lang.Object value)public java.lang.Object getAttribute(java.lang.String name)public void removeAttribute(java.lang.String name)public void setAttribute(java.lang.String name, java.lang.Object value,int scope)public java.lang.Object getAttribute(java.lang.String name,int scope)public void removeAttribute(java.lang.String name,int scope)                    PageContext.APPLICATION_SCOPEPageContext.SESSION_SCOPEPageContext.REQUEST_SCOPEPageContext.PAGE_SCOPE 

(3)findAttribute(name)办法 -- 搜查四大作用域中的属性,如果找到则返回该值,如果四大作用域中都找不到则返回一个null,搜查的程序是从最小的域开始向最大的域开始寻找(application>session>request>pageContext)

(4)提供了申请申请蕴含和转发的快捷办法

pageContext.include("/index.jsp");pageContext.forward("/index.jsp");
Tips:

1.JSP映射

<servlet>            <servlet-name>index</servlet-name>            <jsp-file>/index.jsp</jsp-file></servlet><servlet-mapping>            <servlet-name>index</servlet-name>            <url-pattern>/jsp/*</url-pattern></servlet-mapping>通过"http://localhost:8080/Day01/jsp/任意字符"都能够拜访这个jsp。

2.域的总结(由大到小)
servletContext (application)
session (session)
request (request)
pageContext

如果一个数据只在以后jsp页面应用,能够应用pageContext域存储。

如果一个数据,除了在以后Servlet中应用,还要在申请转发时带到其余Servlet解决或jsp中显示,这个时候用request域。

如果一个数据,除了当初我本人要用,过一会我本人还要用,存在session域。

如果一个数据,除了当初我本人要用过一会其他人也要用,存在ServletContext域中。