JSP知识点(一)

1 JSP的由来

1.1 为什么有JSP规范

Servlet技术产生以后,在使用时最麻烦的是使用大量的out.print语句输出页面。这样的形式在系统变更、维护、预览效果时都不能方便快捷的完成任务,于是推出JSP这种技术,用来将Servlet中负责显示的语句抽取出来。

class xxxServlet{
    ...service(){
        ...
        out.println("");
        ...
        out.println("");
        ...
}

1.2什么是JSP

Sun公司制定的一种服务器端动态页面技术的组件规范。
JSP是一个以“. jsp”为后缀的文件,在该文件中,主要是HTML和少量的Java代码。JSP文件会被容器转换成一个Servlet类,然后执行。

< html>
    
    
        
        java代码...
        
java代码...

2. JSP编写规范

2.1 如何编写JSP

step1:写一个以” .jsp”为后缀的文件
step2:在该文件中可以包含如下内容:

- HTML(CSS、JavaScript)
- 注释
- Java代码
- 指令
- 隐含对象

2.2 JSP页面中的HTML 代码

作用:控制页面在浏览器中显示的效果

转译成Servlet时的规则:成为Servlet中的service()方法的out.write语句

2.3 JSP页面中的注释

语法:
1)
HTML注释,注释中的内容如果包含Java代码,这些Java代码,会被忽略

2)<%-- 注释内容 --%>
JSP特有的注释,如果注释的内容中出现Java代码,会被忽略

2.4 JSP页面中的Java代码

JSP页面中的Java代码,包含以下三种:

  • JSP表达式
  • JSP小脚本
  • JSP声明

编写位置:页面的任意位置

作用:控制页面中可变内容的产生

2.5 JSP表达式

语法规则:<%= ... ... %>
合法内容:

变量、变量加运算符组合的表达式、有返回值的方法

转译成Servlet时的规则:
service( )方法中用out.print语句输出该变量、表达式、方法的值
Eg:

<p>The square root of 5 is <%=Math.sqrt(5)%>p>

转换成

out.write("

The square root of 5 is "); out.write(Math.sqrt(5)); out.write("

"
);

2.6 JSP小脚本

语法规则:<% ... ... %>

合法内容:能够写在方法里的Java代码片段都可以作为小脚本

转移成Servlet时的规则:原封不动成为Servlet类的service( )方法里面的一段代码
Eg:

<%
    String name = request.getParameter("name");
    if(name!=null && !name.equals("")){
%>
    <p>Your name is <%=name %>p>
<%
    }
%>

转换成如下代码插入到service方法中

    String name = request.getParameter("name");
    if(name!=null && !name.equals("")){
        out.write("

Your name is"); out.print(name); out.write("

"
);

2.7 JSP声明

语法声明:<%! ... ... %>

合法内容:成员属性或成员方法的声明

转译成Servlet时的规则:成为JSP页面转译成的Servlet类中成员属性或成员方法
Eg:

<%!
        public String getResult(){
            //...
        }
%>

将代码整体插入到Servlet类中

    public class Index_JSP extends JSPBase{
        public String  getResult(){
            //...
        }
        public void service()...
    }

2.8 JSP页面中的指令

语法规则:<% @指令名 属性=值 %>

常用指令:

  • page指令
  • include指令
  • taglib指令

作用:控制JSP 在转译成Servlet类时生成的内容

2.9 page指令

作用:用于导包、设置页面属性
Eg:

<%-- 导包 -->
<%@ page import="java.util.*" %>
<%@ page import="java.util.*,java.sql.*" %>

<%-- 设置response.setContentType()方法的参数值 -->
<%@ page contentType = "image/gif" %>

<%-- 设置容器读取该文件时的解码 -->
<%@ page pageEncoding="UTF-8" %>

2.10 include指令

作用:在JSP页面转换成Servlet时,能够将其他文件包含进来,可以包含JSP文件也可以是静态的HTML文件。

通过该语句能方便的在每一个JSP页面中包含导航栏、版权声明、logo等
语法:

<%@ include file = "url" %>

Eg:

<%@include file = "header.html" %>
<%@include file = "footer.html" %>

2.11 JSP页面中的隐含对象

什么是隐含对象?

容器自动创建,在JSP文件中可以直接使用的对象

作用:JSP预先创建的这些对象可以简化对HTTP请求,响应信息的访问

JSP知识点(一)_第1张图片

JSP知识点(一)_第2张图片

3. JSP运行原理

3. 1 JSP是如何运行的

JSP知识点(一)_第3张图片

3. 2 JSP是如何转换成Java

JSP知识点(一)_第4张图片

3. 3 如何将静态页面转化成动态页面

step1:拷贝静态页面代码到JSP页面

step2:添加page指令pageEncoding和contentType

step3:修改页面内容与目标内容一致

step4:将需要动态生成的内容删除,替换为Java代码

4. 转发

4. 1 什么是转发

一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另一个Web组件继续完成

常见问题:一个Servlet获得数据之后(比如通过调用dao),将这些数据转发给一个JSP,由这个JSP来展现这些数据(比如,以表格的方式来展示)

4. 2 如何实现转发

  • 1)绑定数据到request对象
  • 2)获得转发器
  • 3)转发

4. 3 绑定数据到request对象

实现绑定

request.setAttribute(String name,Object obj);

name : 绑定名
obj : 绑定值

读取绑定值

Object request.getAttribute(String name)

如果绑定名对应的值不存在,返回null

4. 4 获得转发器

RequestDispatcher rd = request.getRequestDispatcher(String path);

path:转发的目的地,即将未完成的处理继续下去的另一个组件,比如一个JSP文件

4. 5 转发

实现转发:rd.forward(request,response);

通常情况下第2步和第3步合并为一行语句,如下:

request.getRequestDispatcher(path).forword(request,response);

4. 6 转发的原理

JSP知识点(一)_第5张图片

4. 7 转发的特点

转发以后,地址栏不会发生变化。原因是转发的过程是发生在服务器内部的,浏览器并不知道。
转发的目的地必须是同一个应用内部的某个地址
转发所涉及的各个web组件会共享同一个request对象和response对象
注意:在forward之后的其他语句还会执行吗?
答:一定会执行,只要不报异常。

4. 8 转发和重定向的区别

  • 重定向是浏览器发送请求并收到响应以后再次向一个新地址发请求;转发是服务器收到请求后为了完成响应收到新的地址

  • 重新定向中有两次请求对象,不共享数据,转发只产生一次请求对象且在组件间共享数据

  • 重定向后地址栏地址改变,而转发则不会

  • 重定向的新地址可以是任意地址,转发到的新地址必须是同一个应用内的某地址

JSP知识点(一)_第6张图片

5 JSP开发常见问题

5.1 异常处理

1)编程式的异常处理

使用转发跳转到指定页面进行提示说明

    try{
        //... ...
    }catch(Exception e){
        request.getRequestDispatcher(url).forward(request,response);

2)容器中的声明式处理
step1:将异常抛给容器,但底层的错误提示不要返回给用户

注意:异常只允许抛service指定的异常,不能超出指定范围
使用如下写法:
throw new ServletException(e);

step2:在web.xml文件中配置错误处理页面节点


<error-page>
    <exception-type>
        java.servlet.ServletException
    exception-type>
    <location>/error.jsplocation>
error-page>

5.2 路径问题

1)路径使用

  • 链接地址

  • 表单提交

  • 重定向 response.sendRedirect(url)

  • 转发 request.getRequestDispatcher(url)

2)相对路径

  • 从当前文件出发到达目标文件所经过的路径叫做相对路径

  • 书写格式不以“ / ”开头

  • 退至上一级目录以“ . . / ”开头

JSP知识点(一)_第7张图片

3)绝对路径

  • 以 ” / ” 开头的路径都是绝对路径,不以当前文件的位置作为起- 始,而是以一个固定位置作为起始到达目标文件所经过的路径

  • 这个固定的位置可能是应用名,也可能是应用名之后

JSP知识点(一)_第8张图片

4)路径的处理技巧
在使用绝对路径时:

  • 链接地址、表单提交、重定向是从应用名开始写

  • 转发 是从应用名之后开始写

  • 获得应用的实际部署名称可使用如下方法:

String request.getContextPath();

你可能感兴趣的:(JavaWeb—学习笔记)