JSP初步

来源:互联网 发布:雅典奥运 女排 知乎 编辑:程序博客网 时间:2024/06/16 01:49

JSP

Java Server Pages    java服务页面

和Servlet技术一样,都是SUN公司定义的一种用于开发动态web页面(资源)的技术

写JSP就像写html,但JSP技术允许在页面中编写java代码,并且允许开发人员在页面中获取request,response等web开发常用对象,实现与浏览器的交互

JSP调用和运行原理

jsp在后台会被翻译成servlet运行


JSP最佳实践

在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,把JSP技术作为数据显示模版来使用
其原因为:程序的数据通常要美化后再输出
1.让JSP既用java代码产生动态数据又做美化,会导致页面难以维护
2.让servlet既产生数据,又在里面嵌套html代码美化数据,同样会导致程序可读性差难以维护
3.最好的办法让它们各自负责各自的,servlet只负责响应请求产生数据并把数据通过转发技术带给JSP,数据的显示让JSP来做

JSP语法

JSP模版元素 JSP页面中的html内容 定义了网页的基本骨架(页面的结构和外观)

JSP表达式     expression 用于将程序数据输出到客户端 <%= 变量或表达式 %>
      翻译:转成字符串用out.print(...)传输数据给客户端
      变量或表达式后面不加分号(;)
JSP脚本片段 用于在JSP页面中编写多行java代码 <% 多行代码 %>
              翻译时脚本片段中的java代码会原封不动的放到servlet的jspService方法中
                      所以只能出现java代码,不能出现其他模版元素
              且java代码必须严格遵循java语法(要有分号)
              脚本片段之间可以嵌入其他内容
              多个脚本片段可以相互访问(像放在同一个<% %>中)
              单个脚本片段java语句可以不完整(多个组合后必须完整)
JSP声明       <%! java代码 %>翻译到jspService方法外面
            用于定义静态代码块,成员变量,方法
            多个静态代码块,成员变量,方法可以定义在一个或多个JSP声明中
            不能写隐式对象,隐式对象作用范围仅限jspService方法中
JSP注释     <%-- 注释信息 --%> 翻译时会忽略被注释的内容 
            html注释会打给浏览器(垃圾数据) 
JSP指令      为JSP引擎(类似tomcat)设计 不产生可见输出 
            告诉浏览器如何处理JSP页面中的其余部分
            <%@ 指令 属性名="值" %>
            多指令可以写一起也可以分开写
            JSP2.0规范中定义了三个指令
            page    定义JSP页面的各种属性 作用整个JSP页面 最好放在起始位置
               language语言
               extends继承
               import导包(自动导入java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*)
               session="true/false"
               buffer缓冲
               autoFlush是否自动刷新
               isThreadSafe线程是否安全
               info
               errorPage错误跳转页面 必须使用相对路径 "/"开头表示当前WEB应用 也可以在web.xml中用<error-page>为全局配置错误处理页面,可以为不同错误配置不同页面,jsp中的errorPage优先级高

          isErrorPage="true/false"  true错误页面会传递异常对象exception给后台记录

          contentType

          pageEncoding

          isELIgnored

        page指令解决JSP中文乱码 

        乱码出现:输出响应正文 读取浏览器传递的参数信息 JSP页面翻译成Servlet源文件(翻译用UTF-8 JSP源文件编写默认ISO8859-1)

        解决方法: contentType通知浏览器用什么码表打开翻译后的JSP pageEncoding通知服务器用什么码表翻译JSP

        include 用于引入其他JSP页面 静态引入 编译时包含 所有JSP翻译成一个Servlet

                    <%@include file="/xxx/aaa.jsp"%>做包含 性能好推荐
                    动态包含
                    <% request.getRequestDispatcher("/xxx/aaa.jsp").include(request,response)%> 
                    有多个servlet  运行时包含 展示时合并
taglib   用于在JSP页面导入标签库
JSP标签
JSP内置对象
如何查找JSP页面中的错误
原创粉丝点击