分享

JSP知识汇总

 太极混元天尊 2018-06-22

本期小编将带你走进JSP,学习到Java的前后端交互的时候,我们会接触到JSP,今天我们来学习一下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:

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

转换成

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('')){%>

Your name is <%=name %>

<% }%>

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

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

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

');

前几天有私信我要Java的学习资料,我连夜整理了一些有深度的Java教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Java的同学可以免费下载学习学习。文件下载方式:点击我的头像,关注后私信回复'资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。 “编程是门手艺活”。什么意思?得练啊。

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知识汇总

JSP知识汇总

3. JSP运行原理

3. 1 JSP是如何运行的

JSP知识汇总

3. 2 JSP是如何转换成Java

JSP知识汇总

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知识汇总

4. 7 转发的特点

转发以后,地址栏不会发生变化。原因是转发的过程是发生在服务器内部的,浏览器并不知道。

转发的目的地必须是同一个应用内部的某个地址

转发所涉及的各个web组件会共享同一个request对象和response对象

注意:在forward之后的其他语句还会执行吗?

答:一定会执行,只要不报异常。

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

  • 重定向是浏览器发送请求并收到响应以后再次向一个新地址发请求;转发是服务器收到请求后为了完成响应收到新的地址
  • 重新定向中有两次请求对象,不共享数据,转发只产生一次请求对象且在组件间共享数据
  • 重定向后地址栏地址改变,而转发则不会
  • 重定向的新地址可以是任意地址,转发到的新地址必须是同一个应用内的某地址

JSP知识汇总

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文件中配置错误处理页面节点

java.servlet.ServletException /error.jsp

5.2 路径问题

1)路径使用

  • 链接地址
  • 表单提交
  • 重定向 response.sendRedirect(url)
  • 转发 request.getRequestDispatcher(url)

2)相对路径

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

    相对路径

  • 书写格式不以“ / ”开头
  • 退至上一级目录以“ . . / ”开头

JSP知识汇总

3)绝对路径

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

JSP知识汇总

4)路径的处理技巧

在使用绝对路径时:

  • 链接地址、表单提交、重定向是从应用名开始写
  • 转发 是从应用名之后开始写
  • 获得应用的实际部署名称可使用如下方法:
String request.getContextPath();

谢谢阅读本文哦,如果喜欢本问可以收藏哦,让我们一起学习进步!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多