JavaWeb之路03--JSP

JSP基础知识

JSP概述

JSP全名Java Server Page,本质就是一个servlet,JSP是为了简化Servlet的工作而出现的替代者。虽然Servlet能够完成大部分工作,但是Servlet中不能直接嵌套HTML代码,输出太困难,且部署过程复杂。为了克服这种困难,Sun公司在1999年初推出了JSP1.0。

JSP包括很多技术,包括Java Bean,自定义标签(Custom Tags),EL表达式(Expression Language),JSTL标准标签类库(Java Standard Tag Library)等等。

一个JSP文件由三部分组成:java+HTML+JSP特有内容。

JSP作用

作为Servlet的补充,JSP在生成HTML代码的过程比Servlet方便了许多,并且JSP不用特殊部署,只需要复制到服务器下即可。在后来JSP的段优化升级,其功能也越来越强大。

总的来说,JSP的作用就是将内容的生成和信息的展示相分离。

JSP工作流程

当第一次访问JSP文件时,服务器加载web.xml文件。

通过反射机制找到servlet-name为jsp的Servlet(org.apache.jasper.servlet.JspServlet)进行处理。

服务器会将该* . jsp文件转化生成相应*_jsp.java文件。

服务器将后者转化为*_jsp.class文件运行,生成一个响应把结果传给服务器。

再由服务器响应给浏览器,进行解析。

JSP生命周期

JSP也是一个Servlet,运行时只会有一个实例。跟Servlet一样,JSP实例初始化、销毁时也会调用Servlet的init()方法与destroy()方法。另外,JSP还有自己的初始化方法与销毁方法_jspInit()_jspDestroy(),例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!//注意这里是%!
	public void _jspInit() {
		//初始化时运行的代码
	}

	public void _jspDestory() {
		//销毁时运行的代码
	}
%>



JSP特有的内容

JSP脚本

这里我们讲述3个部分:Java程序片段的格式、输出表达式的格式、声明方法与属性的格式。

Java程序片段

JSP脚本生成在service()方法中,必须用“<%”与“%>”括起来,否则会被认为是模板数据。内部书写Java程序片段,JSP脚本可以出现在JSP文件的任意位置,例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        int num = 5;
        int result = 1;
        for (int i = 0 ; i < num ; i++) {
            result *= num;
        }
        out.println(num + "的" + num + "次方为" + result);
    %>
</body>
</html>

运行结果如下:在这里插入图片描述
相当于输出到客户端浏览器的HTML代码为:

<html>
<head>
    <title>Title</title>
</head>
<body>
    5的5次方为3125
</body>
</html>

输出表达式

输出表达式也是生成在service()方法中,在源程序中是使用out.println()方法输出的,类似于Servlet中的输出。JSP中还可以使用"<%=“与”%>"输出各种类型的数据,包括int、double、boolean、String、Object等,例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        int num = 5;
        int result = 1;
        for (int i = 0 ; i < num ; i++) {
            result *= num;
        }
    %>

    <%= num %><%= num %>次方为<%= result %>
</body>
</html>

运行结果如下:在这里插入图片描述

注意:输出表达式中输出的变量后面不能有“;”,输出时调用该对象的toString()方法。


声明方法与属性

JSP中可以声明方法和属性(全局变量),但是不能在“<%”与“%>”之间声明,也不能在“<%=”与“%>”之间声明。JSP声明方法和全局变量时使用另一组符号“<%!”与“%>”,例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Calculator</title>
</head>
<body>
	<%!
	    private int add(int firstNumber, int secondNumber) {
	        return firstNumber + secondNumber;
	    }
	
	    private int subtract(int firstNumber, int secondNumber) {
	        return firstNumber - secondNumber;
	    }
	
	    private int multiply(int firstNumber, int secondNumber) {
	        return firstNumber * secondNumber;
	    }
	
	    private double divide(int firstNumber, int secondNumber) {
	        return firstNumber * 1.0 / secondNumber;
	    }
	%>
	
	<%!
	    private String result = "";
	%>
	
    <form action="/xjm/demo1.jsp" method="post">
        <table>
            <tr>
                <td>firstNumber:</td>
                <td><input type="text" name="firstNumber" value="0" style="width: 100px;height: 20px"/></td>
            </tr>

            <tr>
                <td>secondNumber:</td>
                <td><input type="text" name="secondNumber" value="0" style="width: 100px;height: 20px"/></td>
            </tr>

            <tr align="center">
                <td><input type="submit" value="add" name="calculate" style="width:70px;height:20px"/></td>
                <td><input type="submit" value="subtract" name="calculate" style="width:70px;height:20px"/></td>
            </tr>

            <tr align="center">
                <td><input type="submit" value="multiply" name="calculate" style="width:70px;height:20px"/></td>
                <td><input type="submit" value="divide" name="calculate" style="width:70px;height:20px"/></td>
            </tr>

            <%
                String firstStr = request.getParameter("firstNumber");
                String secondStr = request.getParameter("secondNumber");
                String calculateStr = request.getParameter("calculate");

                if (firstStr != null && secondStr != null && calculateStr != null) {
                    int firstNumber = Integer.parseInt(firstStr);
                    int secondNumber = Integer.parseInt(secondStr);

                    if (calculateStr.equals("add")) {
                        result = firstNumber + " + " + secondNumber + " = " + add(firstNumber, secondNumber);
                    } else if (calculateStr.equals("subtract")) {
                        result = firstNumber + " - " + secondNumber + " = " + subtract(firstNumber, secondNumber);
                    } else if (calculateStr.equals("multiply")) {
                        result = firstNumber + " * " + secondNumber + " = " + multiply(firstNumber, secondNumber);
                    } else if (secondNumber == 0) {
            %>
            分母不能为零
            <%
                    } else {
                        result = firstNumber + " / " + secondNumber + " = " + divide(firstNumber, secondNumber);
                    }
                }
            %>

            <tr>
                <td align="center" colspan="2"><%= result %></td>
            </tr>
        </table>
    </form>
</body>
</html>

运行结果如下:
在这里插入图片描述
注意:
1. 这里有一句if (firstStr != null && secondStr != null && calculateStr != null) { }。是为了防止空指针异常导致500错误
2. JSP中Java的if语句中需嵌套HTML代码时,if语句块前后必须使用“{”与“}”。同理for循环、while循环也是如此,这里就不再一一赘述了。

JSP注释

JSP注释有别于HTML注释“<!–注释文本–>”,以及Java注释“//注释文本    /*注释文本*/    /**注释文本*/”,JSP注释格式如下:

<%--注释文本--%>

JSP指令

JSP指令(点击浏览)用来声明JSP页面的一些属性等,例如编码方式、文档类型。JSP指令由“<%@”开始,“%>”结束。JSP指令格式如下:

<%@ directive {attribute=value}* %>

注意星号表示可以有0或多个属性。例如前面例子中的指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

该指令directive位置是page,因此该指令是一个page指令。该指令包含language和contentType两个属性。常见的指令有page、taglib、include等。


JSP隐藏对象

Servlet与JSP中获取上下文数据都需要servletContext对象,Servlet中的servletContext对象是通过getServletContext()方法获取的。而JSP中没有定义getServletContext对象,却可以直接使用。这是因为getServletContext是JSP内置的隐藏对象(Implicit Object)(点击浏览)。JSP中内置了9个隐藏对象,使得JSP比Servlet使用起来更方便,更方便。
JSP中内置的隐藏对象有out、request、response、config、session、application、page、pageContext、exception。


JSP的行为

JSP的行为(JSP Actions)(点击浏览)是一组JSP内置标签,只需要书写很少的标记代码就能使用JSP提供的丰富功能。JSP行为是JSP功能的抽象与封装,包括两种,自定义JSP行为与标准JSP行为。标准JSP行为格式如下:

<jsp:elements {attribute="value"}* />

一个JSP行为可以指定0或多个属性对。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值