JSP(JavaServer Pages)

示例文档

  1. 简化Servlet编写的一门技术
  2. .jsp文件会被转换成.java文件,然后编译生成.class文件。
  3. 实际处理请求时会加载.class文件,然后创建对象去处理
  4. 通过URL直接访问。http://..../xx.jsp

语法

  1. <% %>。可嵌入java代码
<%
    int a = 5;
    out.println(a);
%>
  1. <%= %>。可嵌入表达式
<%=1+3+5*6 %>

MyEclipse新建.jsp文件

  1. 新建Java Web项目
    Package Explorer -> 右键选择 Web Project -> Project Name处输入项目名称 -> Finish
  2. 新建.jsp文件
    WebRoot -> 右键选择 New -> Other -> 选择 JSP(Basic templates)
    会看到生成的文件中包括如下的内容(默认编码“ISO-8859-1”,不能输入中文)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<!DOCTYPE html>
<html>
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title></title>
      </head>
      <body>
      </body>
</html>
  1. 修改MyEclipse配置
  • 修改jsp编辑器
    .jsp文件 -> 右键 Open With -> MyEclipse JSP Editor(无预览效果)
  • 修改jsp默认编码
    window -> Preferences -> MyEclipse -> Files and Editors -> JSP -> 修改Encoding 值为UTF-8

原理分析

浏览器请求的资源,是由服务器处理后返回的。所以服务器使用的文件和开发环境中的文件是两个文件。如下图所示的方式打开服务器端文件路径:\work\Catalina\localhost\项目名\org\apache\jsp

jsp.png

打开.java文件,可以看到如下图所示内容(很明显,它是继承自HttpJspBase类的子类。它是Tomcat的一个类)

java.png

通过查看源码可以看到如下定义(其实它也是一个Servlet)

public abstract class HttpJspBase extends HttpServlet

在 _jspService 方法中可以看到request, response, out的定义,HTML标签的处理,java代码的处理

_jspService.png

归纳

访问 http://..../xx.jsp 时,Tomcat服务器会根据xx.jsp来生成一个xx_jsp.java的文件,所有的html标签,java代码等都在_jspService方法中进行翻译拼接。然后服务器会加载该java文件,生成Servlet对象来处理请求、响应结果。


page指令

指令 含义
@ page
language="java" 生成java文件
contentType="text/html; charset=utf-8" response.setContentType("text/html;charset=utf-8")。<br />返回给浏览器指示编码
pageEncoding="UTF-8" 该.jsp文件的编码
import="java.io.FileOutputStream" 引入第三方包
extends="" 指定jsp继承的Servlet类
session="true\false" 是否创建session
autoFlush="true\false" 指定out对象的缓冲区是否自动刷新
buffer="8kb" 指定out对象的缓冲区大小
errorPage="xx.jsp" 此jsp执行出错时跳转的错误页面
**isErrorPage="true\false" ** 此jsp是否是错误页面

自定义错误页面

// error.jsp
<% @ page isErrorPage="true" %>

<%
    //TODO 使用log4j来记录错误日志
    exception.printStackTrace();
%>
// index.jsp
<% @ page errorPage="error.jsp" %>
全局配置:
// web.xml
<web-app>
    // 可以写多个 error-page 标签,但一般使用一个来处理所有5xx异常
    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error.jsp</location>
    </error-page>
    
    //根据HTTP状态码处理错误(一般针对404)
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>
</web-app>

简例

public class XXServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throw ServletException, IOException
    {
        // ...
        // 在服务器内部传递数据到jsp
        req.setAttribute("persons", list);
        req.getRequestDispatcher("/xx.jsp").forward(req, resp);

        // ...
        // 302重定向
        resp.sendRedirect("url");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throw ServletException, IOException
    {
        //...
    }
}
<body>
    <%=request.getAttributes("msg") %>

    <%
        List<Person> persons = (List<Persons>)request.getAttribute("persons");
        for (Person person : persons)
        {
    %>
            // <tr><td><%=person.getId() %><td></tr>
    <%
        }
    %>
</body>

下一节 JSTL

简化jsp编写,大项目编码更友好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,537评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,782评论 0 11
  • 1.什么是JSP (1)jsp全称是Java Server Pages,它和Servlet技术一样都是sun公司定...
    yjaal阅读 3,626评论 5 99
  • 关于图片轮播器的思路,大部分人会直接想到collectionView或者scrollView使用极大数设置cont...
    Tr2e阅读 1,913评论 0 14
  • 城市清晨 城市 还在沉睡 一只灰色的兔子 推开一扇蓝色的门 用一只粉红色的眼睛 不安的张望 露天电影 清晨的柏油路...
    蓝钥匙阅读 851评论 4 18