JSP


JSP 概述

JSP是Servlet编写的一种技术,将Java代码和HTML语句混合在同一文件中编写。对动态产生的内容采用Java代码编写,静态的内容采用静态HTML的方式编写。

  • JSP的运行原理:JSP本质上是一个Servlet。每一个JSP页面第一次被访问是,JSP引擎将它翻译成一个Servlet源程序,接着把这个Servlet源程序编译成Servlet的class类文件。然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这些由JSP页面翻译成的Servlet程序。
  • JSP可以放在WEB应用程序中除WEB-INF及其子目录外的其他任何目录中,JSP页面访问路径与普通HTML页面访问路径形式完全一样。

JSP 页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>A jsp page</title>
</head>
<body>
    <%
        // java代码
    %>
</body>
</html>

JSP 中9个隐含对象

JSP页面中有9个隐含对象,这些对象没有声明就可以直接使用

对象含义
requestHttpServletRequest的一个对象
responseHttpServletResponse的一个对象
pageContext页面的上下文,是PageContext的一个对象,可以从该对象中获取其他的8个隐含对象
session代表浏览器和服务器的一次会话,是HttpSession的一个对象
application代表当前WEB应用,是ServletContext对象
config当前JSP页面对应的Servlet对象的ServletConfig对象(几乎不用
outJspWriter对象,调用out.println()可以直接把字符串打印到浏览器上
page指向当前JSP对应的Servlet对象的引用,但作为Object类型,只能调用Object类的方法(几乎不用
exception在声明了isErrorPage="trus"时,才能使用

JSP 语法

  • JSP模板元素:JSP页面中静态HTML内容

  • JSP表达式:将Java变量或表达式写在<%=%>中,可以将结果输出到HTMl页面中

  • JSP脚本片段:嵌套在<%%>之中的一条或多条Java程序代码。多个脚本片断中的代码可以相互访问

    <% 
        Integer age = 16;
        if(age >= 18){
            %>成人<%
        }else{
            %>未成人<%
        }
    %>
  • JSP 声明: JSP 声明将 Java 代码封装在<%%>之中,它里面的代码将被插入进 Servlet的 _jspService 方法的外面。使用JSP声明可以在JSP页面中定义函数,但通常不这样使用。

  • JSP注释的格式:

    <%-- JSP 注释 --%> 
    <!-- HTML 注释 -->

    区别: JSP 注释可以阻止 Java 代码的执行.

JSP 域对象的属性操作

pageContextrequestsessionapplication 是域对象,都具有下面四种方法

<%
    void setAttribute(String name, Object o);   // 设置属性
    Object getAttribute(String name);           // 获取属性
    Enumeration getAttributeName();             // 获取所有属性名字
    void removeAttribute(String name);          // 删除属性
%>

域对象的作用域:

域对象作用域
pageContext当前JSP页面
request同一个请求
session当前会话
application当前WEB应用

JSP 请求转发和重定向

<%
    // 请求转发
    request.getRequestDispatcher(url).forward(request, response);
    // 请求重定向
    request.sendRedirect(url);
%>

区别:

请求转发请求重定向
请求数量(本质区别)一次请求
地址栏表现初次发起请求的地址
最终Servlet中的request和中转的那个 request 是同一个对象
目标给当前 WEB 应用的的资源
根目录/代表的是当前 WEB 应用的根目录

JSP 指令

JSP指令是为JSP引擎设计的,并不产生任何输出,只是告诉引擎如何处理JSP页面中的其余部分

<%@ 指令 属性="值" %>
  • page

    page指令用于定义JSP页面的各种属性, 无论page指令出现在JSP页面中的什么地方, 它作用的都是整个JSP页面, 为了保持程序的可读性和遵循良好的编程习惯, page指令最好是放在整个JSP页面的起始位置。

    属性含义
    importJava Class Name指定当前JSP页面对应的Servlet需要导入的类
    *JSP默认导入的包 : javax.servlet.*
    sessiontrue or false指定当前页面的session隐藏变量是否可用.
    errorPagepage path指定若当前页面出现错误时的实际响应页面。出现错误时转发到errorPage
    isErrorPagetrue or false标定当前页面是不是错误页面,如果为true,则可以使用exception 隐藏对象
    contentTypetext/html; charset=UTF-8指定当前JSP页面的响应类型,实际上调用的是respose.setContentType()方法.文档类型可以在tomcat的config目录下的web.xml文件包含所有文档类型<mime-mapping>
    pageEncodingUTF-8指定当前JSP页面的字符编码,通常与contentType中一致
    isElIngoertrue or false指定是否使用EL表达式,默认为false

    放在WEB-INF目录下的页面不能直接访问,但通过请求转发可以访问;

    在web.xml文件中配置错误页面:

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/error.jsp</location>
    </error-page>
    <error-page>
        <exception-type>404</exception-type>
        <location>/WEB-INF/error.jsp</location>
    </error-page>
  • include

    用于通知JSP引擎在翻译当前JSP页面时,将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称为静态引入,当前JSP页面与静态引入的页面紧密结合为一个servlet

    <%@ include file="relativeUrl" %>

    file属性值如果以 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

    如果a页面包含b页面,在a页面中定义的变量,b页面可以访问

JSP 标签

  • <jsp:include>

    <jsp:include>动态引入。会将包含的页面单独翻译为一个java文件。如果a页面包含b页面,在a页面中定义的变量,b页面不可以访问

    <jsp:inlcude page="fileUrl"></jsp:inlcude>
  • <jsp:forward>

    <jsp:forward> page="fileUrl">
        <jsp:param name="param-name" value="param-value">
    </jsp:forward>

    相当于,但<jsp:forward>可以传入参数

    <%
        request.getRequestDispatcher("fileUrl").forward(request,response);
    %>
  • <jsp:param>

    <jsp:param>可以为传<jsp:forward><jsp:include>入一个参数

    <jsp:param name="param-name" value="param-value">

JSP 中文乱码处理

  1. 保证contentTypecharsetpageEncoding的编码一致,且都支持中文,通常选择UTF-8。浏览器的编码设置一致

    <% @page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
  2. 获取中文参数值,默认参数在传输过程中使用的编码为ISO-8859-1

    <%
        // 对于POST请求,在获取请求信息前
        request.setCharacterEncoding("UTF-8");
        // 对于GET请求
        String val = request.getParameter("name");
        String nameVal = new String(val.getBytes("iso-8859-1"),"UTF-8");
        // 对于GET请求,还可以修改tomcat的server.xml文件,为Connector添加useBodyEncodingForURI="true"属性即可
    %>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值