本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** 谢谢配合!

day07 JSP

全称 :Java Server Pages ,jsp实际就是一个servlet

jsp运行机制: 用户访问jsp页面,服务器将其转换成servlet,也就是java文件,然后编译成class文件,最后运行,最后响应给用户。

工程jsp中很多波浪线报错,是因为找不到jar包。

jsp也是一个servlet

public final class HelloJSP_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {

在G:\eclipse项目.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\employeePro\org\apache\jsp 中找到当前项目的jsp文件,可以看到jsp被编译成了java和class文件,修改jsp,运行,可以看到被编译之后的java文件已修改。在_jspService方法下修改了。

我们去tomcat的lib目录找到org.apache.jasper.runtime.HttpJspBase,然后对其反编译,public abstract class HttpJspBase extends HttpServlet implements HttpJspPage { 发现jsp继承的HttpJspBase也继承了HttpServlet,说明jsp也继承了HttpServlet。

JSP设置编码格式

右键文件->properties->other utf-8

设置jsp默认编码:windows->preference->搜索jsp->jsp file->encoding修改utf-8

一般不直接复制文件,会乱码,ctrl+A,复制全部代码然后粘贴到同类名的文件中

JSP脚本元素

<% 普通java代码,局部变量,放在了jspService方法中 %>

<%! 全局变量,放在_jsp_Service方法外边%> 非静态,只是定义在类中的全局变量,在jsp声明中不可以使用javaService方法中的9个隐式对象.

<%= 表达式,输出时候使用%> 比如 : <tr><td><%=rs.getInt(1) %></td><td><%=rs.getString(3) %></td></tr>

JSP注释

1.HTML注释 注释在翻译的java文件也存在,在页面也存在

2.Java注释,在翻译成的java文件中也存在,在页面不存在.

  1. <%
  2. 1.//
  3. 2./* */
  4. 3./** **/
  5. %>

3.JSP注释:<%-- --%>只存在于jsp页面

JSP指令

语法 : <%@ 指令元素 属性名=属性值 %>

 如果一个指令有多个属性,这多个属性可以写在一个指令中,中间用空格隔开。即上面两条指令等价表示如下

JSP共有3个指令:

1.page指令: page指令用于定义JSP页面的各种属性,import属性可以出现多次,其他属性只能出现一次,重点:session,import,contentType,pageEncoding,isELIgnonred

  • session属性为true时,翻译后的servlet中会自动创建session对象,false则不创建。
  • errorPage属性:指定错误页面
  • isErrorPage属性 :为true时,表示该页面是处理错误页面,JSP引擎在翻译成servlet时,会定义一个exception对象,从而就可以用exception隐式对象获得出错信息。
  • import属性:引入java中的jar包(使用多次)
  • language属性:JSP文件允许嵌入的语言,只支持一种JAVA语言.
  • extends:JSP翻译成Servlet文件时servlet继承的类.(不需要改变)
  • buffer属性:设置缓冲区大小
  • aotoFlush:设置默认刷新缓冲区(不需要修改)
  • contentType属性:服务器端输出所有内容采用的编码
  • pageEncoding属性:JSP翻译成Servlet文件时采用的编码
  • isElIgnored属性:是否忽略EL表达式(false不忽略)

2.include指令,静态引入其他JSP页面,

  • 语法:<%@ include file="要包含文件的地址(静态包含)" %>

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

3.taglib指令:引入标签库文件语法:<%taglib %>

属性:

  • uri :引入标签库文件的名称
  • prefix:标签库的前缀名

JSP9大隐式对象(直接使用)

  • request://就是Servlet里的HttpServletRequest , 方法setAttribute() getAttribute()

  • response: //就是Servlet里的HttpServletResponse,方法:addCookie() , getWriter()

  • session: //就是Servlet里的HttpSession,方法setAttribute() ,getAttribute()

  • application: //就是servlet里的 servletContext,方法setAttribute() , getAttribute()

  • config: //就是Servlet里的servletConfig,方法getInitParameter(), getInitParameterNames()

  • page: //就是Servlet自己,Object

  • exception: //异常,只有errorPage才有,并且isErrorPage=true时才可以使用

  • out://JSP页面输出,JspWriter,方法 write() , print()

  • pageContext://pageContext方法setAttribute(), getAttribute(), 域对象,自己存取值 , 向其他的域存取值。可以获取其他8个对象。编写框架或者通用性较高代码。

    • pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
    • setAttribute(String name, Object value, int scope)
    • getAttribute(String name, int scope)
    • findAttribute(String name)
      • 返回page隐式对象

      • getRequest() //方法返回request隐式对象

      • getResponse() //方法返回response隐式对象

      • getgetServletContext() //方法返回 application隐式对象

      • getServletConfig() //方法返回config隐式对象

      • getSession() //方法返回session隐式对象

      • getOut() //方法返回out隐式对象

      • 另外还有个findAttribute方法(*重要,查找各个域中的属性,EL表达式就依赖于这个方法),可以直接调用pageContext.findAttribute(String name),首先会从pageContext里找该属性,如果没有,会依次按照下面顺序在相应的域中查找:request, session, servletContext,如果没找着,返回null,否则返回属性值。

      •  pageContext类中定义了一个forward方法和两个include方法分别简化和替代RequestDispatcher.forward方法和include方法,方法接收的资源如果以"/"开头,"/"代表当前web应用。不过这里的include是动态包含,不建议使用include。

JSP4个域对象

  1. ServletContext application域,整个web应用,servletContext中存的数据在整个应用程序范围内都可以取出
  2. session session域,一次会话,/session中存的数据在会话范围内都可以取出
  3. request request域,一次请求,request中存的数据在请求范围内都可以取出
  4. pageContext page域,当前页面,pageContext中存的数据在页面范围都可以取出

JSP3大标签(动作)

它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码造成JSP页面难以维护。

1.jsp:include标签 : 页面的包含(动态包含)

  • 属性:page 要包含的页面
  • 语法:

<jsp:include page="index.html"></jsp:include>

  相当于调用pageContext.include("relativeURL")

2.jsp:forward标签 : 转发

  • 属性:page 要转发的页面
  • 语法: <jsp:forward page=""></jsp:forward>

3.jsp:param标签 : 当使用jsp:includejsp:forward标签引入或将请求转发给其它资源时,可以使用jsp:param标签向这个资源传递参数。

  • 属性 : name:参数名称 value:参数值
  • 语法 :

    <jsp:include page="index.jsp"> <jsp:param value="" name=""/> </jsp:include>

    相当于index?name=...&value=....

或者

<jsp:forward page="index.jsp"> <jsp:param value="" name=""/> </jsp:forward>

JSP映射

JSP也可以像Servlet那样映射,因为JSP本来就是Servlet。

  1. <servlet>
  2. <servlet-name>SimpleJspServlet</servlet-name>
  3. <jsp-file>/jsp/simple.jsp</jsp-file>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>SimpleJspServlet</servlet-name>
  7. <url-pattern>/xxx/yyy.html</url-pattern>
  8. </servlet-mapping>

/jsp/simple.jsp表示在webRoot/jsp目录下的simple.jsp文件

include指令与include动作区别

include指令:<%@include file="top.jsp" %>

include标准动作:<jsp:include page="top.jsp"></jsp:include>

include指令:是在编译之前就把包含文件的代码合并在了一起,共同生成一个.java文件,所以在编译的时候会出现重复定义了本地变量的情况。而include动作先将主页面独立生成一个.class文件,运行时候和包含的文件合并在一起,所以不会出现重复定义变量的错误信息。

设置404 500错误提示页面

在xml中加入:

  1. <error-page>
  2. <error-code>404</error-code>
  3. <location>/error404.jsp</location>
  4. </error-page>

然后在错误指定的页面page指令中输入isErrorPage="true"

JavaWeb_day07_JSP的更多相关文章

随机推荐

  1. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  2. linux拷贝命令,移动命令

    http://blog.sina.com.cn/s/blog_7479f7990101089d.html

  3. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  4. Linux基础介绍【第三篇】

    更改SSH服务端远程登录的配置 windows服务端的默认远程管理端口是3389,管理员用户是administrator,普通用户是guest.Linux的管理用户是root,普通用户默认有很多个,远 ...

  5. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  6. eclipse,myeclipse 误删文件,回滚历史文件操作

    昨天因为误操作把一个写了一上午的代码给删了,找到的这个,以前竟然还没发现有这个功能- -! 具体操作: 1.建立同路径同名的文件 2.文件上右键 --> Compare With --> ...

  7. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  8. 不使用Ajax,如何实现表单提交不刷新页面

    不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...

  9. Android开发学习之路-动态高斯模糊怎么做

    什么是高斯模糊? 高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪 ...

  10. .NET Core的文件系统[3]:由PhysicalFileProvider构建的物理文件系统

    ASP.NET Core应用中使用得最多的还是具体的物理文件,比如配置文件.View文件以及网页上的静态文件,物理文件系统的抽象通过PhysicalFileProvider这个FileProvider ...