IT虾米网

Day9 JSP详解

developer 2018年06月25日 编程语言 124 0

JSP概述

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。

jsp = html + java

html:静态内容

servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容--苦逼。

jsp:适合编写输出动态内容,但不适合编写java逻辑。

JSP运行原理

a)当访问index.jsp时,数据是如何进行返回的?

经过翻译和编译的过程,通过流将数据写回。

b)html代码部分

JspWriter.write()

c)java代码部分

原样

d)9大内置对象(service方法)

JSP基本语法

a) jsp指令  <%@   %>

b) jsp模板   html代码

c) jsp的脚本片段

  <%  java  %>

  部分脚本片段的代码可以不完整,但是作为整体必须完整。

  脚本片段之间可以互相访问。

d) 脚本表达式:输出

  <%=表达式|变量   %>

  但是不能出现;等字符

e) jsp声明

  <%!  java  %>

  翻译到成员位置。

  定义成员变量,成员方法,静态方法等

  不能使用内置对象。

JSP的指令

控制jsp执行。<%@ page  %>

a) page:页面行为

作用:用于定义JSP页面的各种属性

属性

1.1、 import 和java代码中的import是一样的 
<%@ page import="java.util.Date,java.util.List"%> 
或者: 
<%@ page import="java.util.Date"%> 
<%@ page import="java.util.List"%> 
JSP会自动导入以下的包: 
import java.lang.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import javax.servlet.jsp.*; 
1.2、 session: 是否会自动创建session对象。默认值是true; 
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb. 
1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。 
errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。 
如果不写“/”则代表相对路径。 
    1.5、 isErrorPage: 是否创建throwable对象。默认是false; 
1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8"); 
1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。 
1.8、 isELIgnored: 是否支持EL表达式。 默认是false

 

<error-page> 
       <error-code>500</error-code> 
       <location>/error.jsp</location> 
  </error-page> 
   
  <error-page> 
      <exception-type>java.lang.Exception</exception-type> 
      <location>/error.jsp</location> 
  </error-page> 
 
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8" import="java.io.File" %>

 

b) include:包含(静态包含)

<%@include file="header.jsp" %> 
 
文件在翻译的时候进行合并

c) taglib: 导入标签库(jstl)

作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

JSP标签

使用标签的形式来表示一段java代码。

如: <jsp:include page="2.jsp"></jsp:include>

 

<jsp:include > 动态包含

<jsp:forward> 请求转发

<jsp:param> 设置请求参数

 

<jsp:useBean> 创建一个对象

<jsp:setProperty> 给指定的对象属性赋值

<jsp:getProperty> 取出指定对象的属性值

JSP的内置对象

指在JSP的<%=%> 和<% %>中可以直接使用的对象

对象名

类型

说明

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

由session="true"开关

application

javax.servlet.ServletContext

 

exception

java.lang.Throwable

由isErrorPage="false"开关

page

java.lang.Object当前对象this

当前servlet实例

config

javax.servlet.ServletConfig

 

out

 javax.servlet.jsp.JspWriter

字符输出流,相当于 printWriter对象

pageContext

 javax.servlet.jsp.PageContext

 

pageContext

本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据

//设置其他域的数据 
        pageContext.setAttribute("user", "request", PageContext.REQUEST_SCOPE); 
 
<!-- 获取其他域的数据 --> 
    <%-- <%=pageContext.getAttribute("user", PageContext.SESSION_SCOPE) %> --%> 
 
pageContext.findAttribute("user") 
遍历所有的域获取数据 
page   request   session   application

 

四大域对象

PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。

ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。

HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。

ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

最佳实践

servlet

java代码方便(数据),展示数据(printWriter)不方便

jsp

java繁琐,展示数据方便

 

servlet获取数据;

jsp展示数据。

EL表达式

 EL表达式:expression language 表达式语言

 要简化jsp中java代码开发。

 它不是一种开发语言,是jsp中获取数据的一种规范

获取域中的值

pageContext.findAttribute()

${book.bname }   <!--获取对象属性  --> 
${books[1].bname }   <!-- 获取集合中的数据 --> 
${maps.name }   <!-- 获取map中的值 -->

 

实现计算

<%--  ${sum + 2 }  
${sum >= 1 } 
${1>2 and 2>3 } --%> 
${empty books }  <!--判断是否为空  null   ""    -->

 

JSTL标签库

标签库的jar

standard.jar    jstl.jar

导入标签库

<%@taglib %>

core:标准标签库

fmt:格式化标签库

%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"% 
 
 
<!-- 页面输出   
        value:输出的值  支持el表达式    
        default:默认值 
        escapeXml:是否转义(默认转义) 
        --> 
     
    <% 
      request.setAttribute("name", "<p>aa</p>"); 
    %> 
   <%-- <c:out value="${name }"  default="aaa" ></c:out> --%> 
    
   <!-- 用于判断 
       test:支持el表达式 
    --> 
  <%--  <c:if test="${1 == 1 }"> 
            哈哈 
   </c:if> --%> 
    
   <c:choose> 
        <c:when test="${1 == 1 }"> 
            哈哈 
        </c:when> 
     <c:otherwise> 
         呵呵 
     </c:otherwise> 
   </c:choose> 
    
   <% 
     List<Book> books = new ArrayList(); 
     Book book = new Book(); 
     book.setBname("ls"); 
     books.add(book); 
     book = new Book(); 
     book.setBname("ww"); 
     books.add(book);  
     request.setAttribute("books", books); 
   %> 
    
   <!-- 用于遍历 
        items:遍历的内容  支持el表达式 
        var:每一项的name值 
        varStatus:状态信息的保存变量 
        begin:开始的位置 
        end:结束的位置 
        step:步长 
    --> 
   <c:forEach var="book" items="${books }" varStatus="status"  > 
         bname=${book.bname } &nbsp;  ${status.index }<br/> 
   </c:forEach> 
 
<% 
      Date date = new Date(); 
      request.setAttribute("date", date); 
   %> 
   <fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss" />

 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Day7 Tomcat和servlet详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。