新人详解JSP

一、什么是JSP:

1.1、JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。

        jsp: 作为请求发起页面,例如显示表单、超链接。 
                   作为请求结束页面,例如显示数据。

1.2、jsp的组成 :

        jsp = html + java脚本 + jsp标签(指令)

                   jsp中可直接使用的对象一共有9个,被称之为9大内置对象:request、response、page、out、session、application、exception、config、pageContext。

1.3、3种java脚本:

        <%…%>:写java代码片段,(类似方法) 

        <%=…%>:用于输出,用于输出一条表达式(或变量)的结果。 

        <%!…%>:声明,用来创建类的成员变量和成员方法(类似与类)

1.4、jsp注释:<%– … –%>

        当服务器把jsp编译成java文件时已经忽略了注释部分!

二、JSP原理

JSP其实是一种特殊的servlet,当它第一次被服务器访问的时候,服务器会将其转为java文件,然后再编译为class文件,之后便是创建该类的对象,调用它的service方法。当JSP第二次被访问到时,上述流程就不会再执行,服务器会直接执行该类的service方法。

三、jsp三大指令:page <%@page language=”java” info=”xxx”…%>

pageEncoding和contentType: 

        pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! 

        contentType:它表示添加一个响应头:Content-Type!等同与response.setContentType(“text/html;charset=utf-8”); 

        如果两个属性只提供一个,那么另一个的默认值为设置那一个。 

        如果两个属性都没有设置,那么默认为iso

import:导入java包!可以出现多次的指令,总之就是你的JSP需要多少java包就能写多少次。

errorPage和isErrorPage:

        errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定 

        isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面

        可以使用9大内置对象中的exception!

autoFlush和buffer :

        autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认为true,如果为false,那么在缓冲区满时抛出异常!

        buffer:指定缓冲区大小,默认为8kb,通常不需要修改!

isELIgnored:是否忽略el表达式,默认值为false,不忽略,即支持!

language:指定当前jsp编译后的语言类型,默认值为java。 

info:信息! 

isThreadSafe:当前的jsp是否支持并发访问! 

session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象! 

extends:让jsp生成的servlet去继承该属性指定的类!

四、include –> 静态包含

与RequestDispatcher的include()方法的功能相似!

<%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!

RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!

作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

五、taglib : 导入标签库

说到taglib就不得不说JSTL了,JSTL是由SUM公司制定的一套标准标签库的规范。JSTL标签库,是由一些Java类组成的。(有兴趣的可以自己去了解,这里不再赘述,但是这个JSTL很重要!很重要!很重要!)

prefix:指定标签库在本页面中的前缀!由我们自己来起名称!

uri: 指定标签库的位置!

例:<%@taglib prefix=”s” uri=”/struts-tags”%> 前缀的用法<s:text>

六、九大内置对象以及四大域对象

6.1、九大内置对象:

在jsp中无需声明即可直接使用的9个对象 

        out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;

        config(ServletConfig):对应“真身”中的ServletConfig;

        page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;

        pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;

        exception(Throwable):只有在错误页面中可以使用这个对象;

        request(HttpServletRequest):即HttpServletRequest类的对象;

        response(HttpServletResponse):即HttpServletResponse类的对象;

        application(ServletContext):即ServletContext类的对象;

        session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。

        pageContext(一个顶9个!) 

6.2、四大域对象

       Servlet中有三大域,而JSP中有四大域! 

       ServletContext:整个应用程序 

       session:整个会话(一个会话中只有一个用户) 

       request:一个请求链! 

       pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!

       代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE); 

       全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找!

6.3、四大域对象的作用范围(从大到小)

       application(ServletContext)>session>request>pageContext

七、JSP动作标签:

动作标签是由tomcat(服务器)来解释执行!而html标签由浏览器来执行!

  • <jsp:include> 
    例如:<jsp:include page="xxx"/>,用来包含指定的页面。假如有两个jsp. 分别为a.jsp和b.jsp,他们分别编码成Servlet,然后在执行Servlet时才会执行包含过程。这也是include指令与include标签的区别。 
    • 注意:<jsp:include page="<%=myfile%>">,这是可以的!因为include指令是在执行时才完成的包含,在执行时已经可以确定myfile这个变量的值。
    • 该标签内部使用的是RequestDispatcher#include()方法完成的包含
  • <jsp:forward> 
    例如:<jsp:forward page="xxx"/>,用来转发到指定页面 
    例如在a.jsp中存在如下内容:<jsp:fowrad page="b.jsp"/> 
    a.jsp中的内容不会显示在浏览器上,而只是显示b.jsp的内容。而且在<jsp:forwad>标签下面的内容不会被执行。
  • <jsp:param> 
    该标签是和的子标签,用来向其他页面传递参数。

八、JavaBean

  • 必须有public的无参的构造器
  • 如果成员变量提供了getter/setter方法,那么称之为javabean属性。

JavaBean主要是用来通过反射操作的类! 
因为需要通过Class的newInstance()方法来创建类的实例,所以要求类必须提供public的无参构造器

九、内省

  • 内省类 –> Bean信息 –> 属性描述符 –> 属性的get/set对应的Method! — > 反射 
    1. 通过Class对象获取BeanInfo 
      BeanInfo info = Introspector.getBeanInfo(User.class);
    2. 通过BeanInfo获取所有属性描述符对象 
      PropertyDescriptor[] pds = info.getPropertyDescriptors();
    3. PropertyDescriptor: 
      • String name getName():获取当前属性名称
      • Method getReadMethod():获取get方法反射对象
      • Method getWriteMethod():获取set方法反射对象
    1. jar包 commons-beanutils.jar、commons-logging.jar
    2. 通过反射设置Javabean 
      Class<User> clazz = User.class; 
      Object user = clazz.newInstance(); 
      BeanUtils.setProperty(user, “username”, “admin”); 
      BeanUtils.setProperty(user, “password”, “admin123”);
    3. 获取属性值 
      String username = BeanUtils.getProperty(user, “username”);
    4. 把Map数据封装到JavaBean对象中
 
  1. Map<String,String> map = new HashMap<String,String>();

  2. map.put("username", "admin");

  3. map.put("password", "admin123");

  • 1
  • 2
  • 3

User user = new User(); 
BeanUtils.populate(user, map);

要求:map的key名称必须与User类的属性名称相同。不要无法赋值!

十、JSP中与JavaBean相关的标签

 

 剩余的就是EL表达式和JSTL的内容了,这两个部分随便挑一个都可以当作一个模块来详述了,所以这里不再赘述。但是JSTL+EL真的是威力无穷,希望这篇博客能够帮到其他初学者。博客中部分资料来源于网络,部分为个人总结,如有错误欢迎您指出。

  • <jsp:useBean>
  • <jsp:setProperty>
  • <jsp:getProperty>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值