JavaWeb开发04——JSP和JSTL

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 %>
 
浏览器输出: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中配置


        404
        /error/404.jsp

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_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE 

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

(4)提供了请求请求包含和转发的快捷方法

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

1.JSP映射


            index
            /index.jsp


            index
            /jsp/*


通过"http://localhost:8080/Day01/jsp/任意字符"都可以访问这个jsp。

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

如果一个数据只在当前jsp页面使用,可以使用pageContext域存储。

如果一个数据,除了在当前Servlet中使用,还要在请求转发时带到其他Servlet处理或jsp中显示,这个时候用request域。

如果一个数据,除了现在我自己要用,过一会我自己还要用,存在session域。

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

你可能感兴趣的:(java,后端,java-web)