JSP学习总结

JSP

  • JSP起源

    • 在动态网页中,绝大部分内容是固定不变的,只用局部内容需要变化。
    • Servlet写静态代码会是程序十分臃肿,编写和维护都很困难。
    • HTML语言需要美工设计和编写,不属于程序员的工作。
    • 为弥补Servlet的缺陷, SUN公司在Servlet的基础上推出了JSP(java server pages)技术作为解决方案。
  • JSP定义

    • JSP是简化Servlet编写的一种技术,它讲java代码和HTML语句混合在同一个文件中编写,只对动态产生的内容采用Java代码来编写。
  • JSP文件位置

    • JSP可以放置在WEB程序中除了WEB-INF极其子目录外的任何其他目录中,JSP页面的访问路径与普通的HTML页面访问路径的形式相同。
  • JSP的运行原理

    • JSP本质上是一个Servlet,每个JSP页面第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着在将这个servlet源程序编译成Servlet的class类文件。让后再由WEB容器像调用普通的Servlet程序一样的方式来装载和解释执行这个有JSP页面翻译成的Servlet程序。
  • JSP的隐含变量:没有声明即可使用。

    • respose(少用)
    • request
    • pageContext:页面的上下文,是PageContext的一个对象,可以从该对象获取到其他8个隐含对象,也可以获取当前页面的其他对象。
    • session:浏览器和服务器的会话
    • application:当前web应用,ServletContext对象
    • config: ServletConfig对象。若访问当前JSP的初始化参数,需要通过映射的地址才可以。
      • 映射JSP:
        <servlet>
        	<servlet-name>hellojsp</servlet-name>
        	<jsp-file>/hello.jsp</jsp-file>
        	<init-param>
        		<param-name>key</param-name>
        		<param-value>vlaue</param-value>
        	<init-param>
        </servlet>
        
        <servlet-mapping>
        	<servlet-name>hellojsp</servlet-name>
        	<url-pattern>/hellojsp</url-pattern>
        </servlet-mapping>
        
    • out: JspWriter对象。调用out.println()可以直接把字符串打印的html页面上。
    • page: 指向当前JSP对应的Servlet对象的引用,为object对象(少用),有点类似于this
    • exception, 表示发生错误的JSP页面对应的异常对象
  • JSP语法

    • JSP页面的静态HTML内容称为模板元素
    • JSP表达式(expression)
      <%Date date = new Date();
      out.println(date);%>
      <%= date %> <!--与上面的out.println等价-->
      
    • JSP脚本片段指嵌套在<%%>之中的一条或多条java程序代码。
    • JSP声明: JSP声明封装在<%! %>之中,它里面的代码将被插入Servlet的_jspService方法的外面。(少用)
    • 注释, HTML注释中的JSP脚本会执行。
      <%-- JSP注释 --%>
      <!--HTML注释-->
      
  • JSP中和属性相关的方法

    • Object getAttribute(String name)
    • Enumeration getAttributeName()
    • removeAttribute(String name): 移除指定属性
    • void setAttribute(String name, Object o)设置属性
      这几种方法域对象(pageContext, request, session, application)都有!
  • 几种域对象的作用范围

    • pageContex: 当前页面
    • request: 同一个请求
    • session:限于一次会话(浏览器打开到关闭)
    • application: 当前web应用
  • 请求的重定向与转发

    • RequestDistpatcher接口的forward()方法实现请求的转发
    //请求的转发
    // 调用HttpServletRequest的getRequestDispatcher()方法获取RequestDistpatcher对,调用getRequestDispatcher() 需要传入转发的地址。
    String path = "xxx"
    RequestDispatcher requestDispatcher= request.getRequestDispatcher(path);
    // 调用HttpServletRequest的forward(request, response)进行请求的转发。
    requestDispatcher.forward(request, response)
    
    • response.sendRedirect()方法实现请求重定向

    两者进行比较:

请求转发请求重定向
地址栏为初次发出请求的地址地址栏为最后响应的那个地址
在Servlet中,request和中转的request是同一个对象在最终的Servlet中request对象和中转的requst对象不同
请求转发只能转发到当前WEB应用的资源可以重定向到任何资源
/代表当前web应用的根目录当前web站点的根目录
  • JSP指令page
    (JSP指令是为JSP引擎而设计的,它们并不直接产生任何可见的输出,而是告诉引擎如何处理JSP页面中的其余部分。 )

    • page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面的什么地方,它的作用都是整个JSP页面,最好放到JSP页面的起始位置。
      如:
      • <%@ page contentType=“text/html;charset=gb2312”%>
      • <%@ page import “java.util.Date”>
      • <%@ page language="java"contentType=“text/html;charset=gb2312” import=“java.util.Date” pageEncoding=“utf-8”>

    完整语法:

<% page contentType = "text/html;charset=gb2312"
    session = "false"
    import="java.util.Date"  # 要导入的包
    language="java" # 无用
    extends="package.class"  # 当前jsp被翻译成源文件后可以继承哪些类(少用)
    session="true|false" # 是否允许使用session, 是否生成HttpSession
    isErrorPage="true" # 是否是错误页面。
    errorPage="/error.jsp" # 指定当前页面出现错误实际响应的是什么。(请求转发的方式)
    isErrorPage=”true“ #指定当前页面是否为错误处理页面,可以说明当前页面是否可以使用exception隐藏变量。 
    contextType="tesxt/html;charset=UTF-8" : 指定当前JSP页面的响应类型。实际调用的是response.setContentType("text/html;charset=UTF-8")
    pageEncoding: 指定当前JSP页面的字符编码类型
    isELIgnored=”True“: 指定当前JSP页面是否可以使用EL表达式。

错误页面也可以在web.xml中定义:

		<error-page>
		    <!--指定错误代码-->
			<error-code>404</error-code>
			<location>/hello.jsp</location>
		</error-page>
		
		<error-page>
			<!--指定错误类型-->
			<exception-type>java.lang.ArithmeticException</exception-type>
			<location>/WEB-INF/error.jsp</location>
		</error-page>
		```
  • include指令

    • <%@ include file=“relativeURL”%> 源码级包含(静态包含,生成一个源文件)
  • JSP标签

    <jsp:include page="relativeURL"></jsp:include> #动态包含,生成两个servlet源文件,被引入的资源必须式一个能独立被WEB容器调用和执行的资源。
    
    <jsp:forward page="path">
    	<jsp:param vlaue="abcd" name="username"/>
    </jsp:forward> # 转发, 可以使用jsp:param向子标签传参, 子标签可以通过request.getParameter(name)获取参数
    
  • 中文乱码问题

    • 保持pageEncoding 与 contentType中的charset保持一致
    • 浏览器显示的字符编码也和请求的JSP页面编码一致
    • 对于post请求,在获取请求信息前加上request.setCharacterEncoding(“UTF-8”)
    • 对于get 请求,修改Tomcat server.xml文件。参考: http://localhost:8989/docs/config/index.html文档中的useBodyEncodingForURI属性为true即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值