码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb 后端 <五> 之 JSP 学习笔记

时间:2016-03-01 22:43:30      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:

 

一、JSP简介

1、也是SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一。由于原理上是Servlet, 所以JSP/Servlet在一起。

二、HTML、Servlet和JSP

1、HTML:静态页面,不能包含java代码,只能有HTML有关的标记

2、Servlet:写java代码,做页面的输出,不是很方便(开发效率很低)

3、JSP:HTML+java

三、输出当前的时间

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>第一个JSP,输出当前的时间</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    现在是:
    <%
        Date now = new Date();
        //out.write(now.toLocaleString());
    %>
    <%=now%>
  </body>
</html>

 

四、JSP的原理及生命周期

技术分享

1、JSP就是Servlet,学习好JSP的关键(语法),时刻想到他对应的Servlet。

 

2、时常翻阅JSP对应的Servlet源码

Work 中查找

五、JSP的语法

5.1模板元素

指JSP中的那些HTML。开发时先编写模板元素,因为他们决定页面的外观。

5.2Java程序片段

语法:<%java程序%>

出现在JSP对应Servlet的service方法中。

<%声明的变量:局部%>

 技术分享

技术分享

5.3Java表达式

语法:<%=表达式%>

 

 技术分享技术分享

小练习:作业

 Java程序片段和表达式练习

技术分享
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     <title>第一个JSP,输出当前的时间</title>
 7     
 8     <meta http-equiv="pragma" content="no-cache">
 9     <meta http-equiv="cache-control" content="no-cache">
10     <meta http-equiv="expires" content="0">
11     <!--
12     <link rel="stylesheet" type="text/css" href="styles.css">
13     -->
14 
15   </head>
16   
17   <body>
18     现在是:
19     <%
20         Date now = new Date();
21         //out.write(now.toLocaleString());
22     %>
23     <%=now%>
24   </body>
25 </html>
View Code

 

5.4JSP声明

语法:<%!

 

%>

作用:定义JSP对应Serlvet的成员(变量和方法、静态方法)

 

技术分享
<%@page import="java.lang.reflect.Method"%>
<%@ page language="java" import="java.util.*" session="true" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP声明</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <%!
    int i=100;//不建议
    
    public void m1(){
        //out.write("hello");//不可以,因为out是service中的局部变量
    }
    static{
        System.out.println("oyeah");
    }
     %>
     
     <!-- 
     hello
      -->
      <%--shit --%>
      
      <%=session.getId() %>
  </body>
</html>
View Code

 

注意:开发中很少用。面试和考试经常考。

5.5JSP注释

语法:<%--这是JSP注释--%>

 

作用:注释掉的代码,JSP引擎不会翻译到Servlet源码中。要注意和HTML注释的区别。

html注释:<!--这是html注释-->

5.6JSP指令:

简介:

指令是为JSP引擎设计的。而只是告诉引擎如何处理JSP页面中的其余部分(非指令部分);

基本语法格式:<%@指令 属性1=”值1” ....%>.

一般把指令放在JSP页面的顶部(不是必须的)

指令的属性可以写在一个指令的中,也可以分开写:比如:

<%@指令 属性1=”值1” 属性2=”值2”%>.

等价于:

<%@指令 属性1=”值1” %>.

<%@指令 属性2=”值2”%>.

 

page:

属性:

language:告知引擎,脚本用的是java。默认java,支持java。不写也行。

extends:告知引擎,JSP对应的Servlet的父类是哪个。不需要写,也不要改。

*import:告知引擎,导入哪些包。

注意:引擎自动导入:java.lang.*;javax.servlet.*;javax.servlet.http.*;javax.servlet.jsp.*;

 

导入的形式:

<%@page import=”java.util.Date,java.util.UUID”%>或者:

<%@page import=”java.util.Date”%>

<%@page import=”java.util.UUID”%>  用Eclipse:Alt+/ 自动导入

*session:告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认值true。

buffer:JspWriter用于输出JSP的内容到页面上。告知引擎,设定他的缓存大小。默认8Kb。

*errorPage:告知引擎,当前页面出现了异常,应该转发到哪个页面上(路径写法:/代表着当前应用)

 

配置全局错误页面:web.xml

 技术分享

*isErrorPage:告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception隐含对象,打印异常的详细信息。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="false"%>

 

<%=exception.getMessage()%>

 

*contentType:告知引擎,响应正文的MIME类型。

contentType=”text/html;charset=UTF-8” 相当于response.setContentType(“<%=exception.getMessage() %>”);

 

*pageEncoding:告知引擎,翻译JSP时(要从磁盘上读JSP文件)所用的码表。

pageEncoding 要和存在磁盘上的编码一致

在编译器中(myeclipse eclipse)不用担心,pageEncoding修改后 会自动转换为pageEncoding的编码

 技术分享

 

pageEncoding=”UTF-8”:相当于,告知了引擎用UTF-8读jsp,还response.setContentType(“text/html;charset=UTF-8”);

 

*isELIgnored:告知引擎,是否忽略EL表达式。默认值是false,不忽略。 ${1+1}

 

总结:属性众多。一般都用的默认值。用起来很简单,最简单的形式:

<%@ page  pageEncoding="UTF-8"%>

include:

包含

属性:file,以”/”开头,就代表着当前应用。

 

<%@include file="/07include.jsp"%>

 

taglib:

引入外部的标签。

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

 

uri:外部的标签的uri地址,好比名称空间

prefix:前缀。

 

六、JSP中的转发和包含

1、转发:

<jsp:forward page="/10forward.jsp"></jsp:forward>

JSP的内置标签。

2、参数:不能单独使用

向目标传递请求参数

 技术分享

3、包含:(面试题)

静态包含:<%@include%>

动态包含:其余的

<jsp:include page=””/>

 

总结:用标签可以少些java脚本。

七、JSP的九个隐含对象:(面试题)

JSP对应的Servlet的service方法中的局部变量

JSP隐含对象名称

类型

备注

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

page指令有开关

application

javax.servlet.ServletContext

 

config

javax.servlet.ServletConfig

 

page

javax.servlet.http.HttpServlet

当前jsp对应Servlet的实例引用

exception

java.lang.Throwable

page指令有开关

out

javax.servlet.jsp.JspWriter

字符输出流。相当于PrintWriter

pageContext

javax.servlet.jsp.PageContext

很重要

 

八、JSP中的异常处理

1、运行时异常

 技术分享

以上情况找JSP对应的Servlet源码。

2、出现的错误(语法不对)

 技术分享

九、PageContext抽象类(很重要)

1、本身是一个域(范围)对象,还能操作其他3个域对象中的属性

l  页面范围:

void setAttribute(String name,Object value);

void removeAttribute(String name);

Object getAttribute(String name);

l  操作其他域对象中的属性:

void setAttribute(String name,Object value,int scope);

void removeAttribute(String name,int scope);

Object getAttribute(String name,int scope);

 

int scope:常量,PageContext   PAGE_SCOPE(页面) REQUEST_SCOPE(请求)SESSION_SCOPE(会话)APPLICATION_SCOPE(应用)

l  在四个范围中依次查找指定名称对象的方法:

PAGE(页面) REQUEST(请求)SESSION(会话)APPLICATION(应用)

 

Object findAttribute(String name);

 

2、获取其他八个JSP隐含对象(自定义标签时用)

PageContext.getRequest();

getServletContext();

getServletConfig();

getException();

get...

3、提供转发和包含的简易方法

 

 技术分享

pageContext.include(String url);

十、四大域对象

 

实际开发中:存放数据的。

 

PageContext:页面范围。最小。开发中很少用。演示代码。

ServletRequest:请求范围。不同的资源,只有用转发。

HttpSession:会话范围。多次请求共享数据,但不同的客户端不能共享。

ServletContext:应用范围。最大。尽量少用。用时要做同步处理。

十一、JSP开发的最佳实践

Servlet:擅长写Java代码逻辑,不擅长输出html的内容。

开发中作为:控制器。

JSP:不擅长写Java代码逻辑,擅长显示结果。

开发中作为:视图(显示结果)

 技术分享

技术分享

 

十二、JavaBean的概念

1、JavaBean又称之为POJO(Plain Old Java Object)、VO(Value Object)、DO(Data Object)

2、JavaBean的书写规范

a、必须是public的

b、提供默认的构造方法

c、字段都是私有的: private String username;

d、提供公有的getter或setter方法:属性。

getUsername():读属性,属性名:username.

setUsername(String username):写属性,属性名:username。

 

注意:private boolean married;   getMarried()===isMarried()

e、一般需要实现java.io.Serializable接口。

 

结论:JavaBean在JavaEE开发中,主要担当封装数据用的。

十三、JSP中使用JavaBean

1、导入JavaBean:用page指令的import

2、声明JavaBean:

 技术分享

3、获取属性:

 技术分享

如果属性是null,那么界面就显示null。

4、设置属性:

注意:类型的转换问题

 技术分享

可以使用请求参数设置JavaBean的属性。

 技术分享

5、JavaBean的存活范围:

声明JavaBean时,指定scope属性。默认值page,当前页面范围。

可选值:page|request|session|application

 

总结:JSP+JavaBean,开发模型,Model1(模型1)

 

JavaWeb 后端 <五> 之 JSP 学习笔记

标签:

原文地址:http://www.cnblogs.com/FLFL/p/5232691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!