首页 > 代码库 > JSP笔记

JSP笔记


溪云初起日沉阁,山雨欲来风满楼。—-唐代许浑《咸阳城东楼 / 咸阳城西楼晚眺 / 西门》


JSP基本语法

脚本标识

JSP 表达式

<%= 表达式%>  向页面输出信息

声明标识

<%!
     声明的方法和变量的代码
 %>
<%!
    String s = "胖子";
    int add(int x,int y){
        return x+y;
    }
%>

代码片段

<%
    java代码或是脚本代码
%>
<%
    out.print("这里是代码片段");
%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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=utf-8">
<title>创建一个发布JSP网站</title>
</head>
<body>
    <h2>火星理工大学南昌校区</h2>
    http://www.jxust-nc.cn/
    <hr>
    <%!
        String s = "胖子";
        int add(int x,int y){
            return x+y;
        }
    %>
    <%
        out.print("这里是代码片段");
    %>
    <br>
    你好,<%= s %>
    x+y=<%=add(2,4) %>
    <%="x+y="+add(2,6) %>
</body>
</html>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.text.*"%>
<!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=UTF-8">
<title>My JSP page</title>
</head>
<body>
    <%!
    String printMul() {
        String s = "";
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                s += j + "×" + i + "=" + i * j;
                s += "&nbsp;&nbsp;";
            }
            s += "<br/>";
        }

        return s;
    }
    void printMul(JspWriter out)throws Exception{
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                out.print( j + "×" + i + "=" + i * j+
                        "&nbsp;&nbsp;");
            }
            out.print("<br/>");
        }
    }
    %>

    <h2>JSP 九九乘法表</h2>
    <%=printMul()%>
    <% printMul(out);%>


</body>
</html>

注释

HTML中的注释

<!-- -->

隐藏注释
查看源代码看不到

<%-- --%>

动态注释
HTML注释对 JSP 嵌入代码不起作用

<!-- <%=new Date()% >-->

代码片段注释

//

/* */

提示文档注释,鼠标焦点在类、方法上有提示信息
/**
 *
 */

指令标识

语法格式

<%@ 指令名 属性1="属性值1"  属性2="属性值2"...%>

page 指令

定义整个JSP页面的相关属性。

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

include 指令

可以在一个JSP页面中包含另一个JSP页面。

<%@ include file="path" %>

<%@ include file="top.jsp" %>

taglib 指令

声明该页使用的标签库。

<%@ taglib prefix="tagPrefix" url="tagURI" %>

//引用JSTL中的核心标签库
<%@ taglib prefix="c" url="http://java.sum.com/jsp/jstl/core" %>

动作标识

JSP 动作标识是在 JSP 的请求处理阶段按照在页面中出现的顺序被执行的,用于实现某些特殊用途(例如,操作JavaBean、包含其他文件、执行请求转发等)的标识。

操作 JavaBean 的动作标识

创建JavaBean实例
第一次实例化时执行

<jsp:useBean  id="实例名" class="完整类名" scope="范围" beanname="完整类名" type="数据类型">
</jsp:useBean>

读取 JavaBean 属性值

<jsp:getProperty name="JavaBean实例名" property="JavaBean中的属性值"/>

设置 JavaBean 属性值

<jsp:setProperty name="JavaBean实例名" property="属性名" value="属性值" param="request请求中的参数" />

示例

不能传递中文字符

deal.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="user" scope="page" class="com.wgh.UserBean"
    type="com.wgh.UserBean">
    <jsp:setProperty name="user" property="*" />

    <%-- 这是获取request所有的参数<jsp:setProperty name="user" property="*" /> --%>
    <jsp:setProperty name="user" property="name" param="name"/>
    <jsp:setProperty name="user" property="pwd" param="pwd"/>
</jsp:useBean>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>显示用户登录信息</title>
</head>
<body>
    用户名:<%=user.getName()%><br> 
    密码:<%=user.getPwd()%>
</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
<style type="text/css">
body {
    font-size: 12px;
}
</style>
</head>
<body>
    <form name="form1" method="post" action="deal.jsp">
        用户名: <input name="name" type="text" style="width: 120px">(请输入英文用户名)
        <br>
        <br> 
        密&nbsp;&nbsp;&nbsp;&nbsp;码: <input name="pwd"
            type="password" style="width: 120px"> 
            <br>
             <br> 
        <input type="submit" name="Submit" value="提交">
    </form>
</body>
</html>

UserBean.java

//package com.wgh;

public class UserBean {
    private String name; // 用户名
    private String pwd; // 密码

    // name属性对应的get方法
    public String getName() {
        return name;
    }

    // name属性对应的set方法
    public void setName(String name) {
        this.name = name;
    }

    // pwd属性对应的set方法
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    // pwd属性对应的get方法
    public String getPwd() {
        return pwd;
    }

}

包含外部文件的动作标识< jsp:include>

通过JSP 动作标识< jsp:include> 可以向当前页中包含其他文件。被包含的文件可以是动态文件,也可以是静态文件。

<jsp:include page="url" flush="false|true" />
或者
<jsp:include page="url" flush="false|true" >
    子动作标识<jsp:param>
</jsp:include>

page 属性:指定包含文件的相对路径
flush 属性:可选属性,设置是否刷新缓冲区,默认值为false,如果设置为true,在当前页面输出使用了缓冲区的情况下,先刷新缓冲区,然后再执行包含工作。
子动作标识< jsp:param> : 用于向被包含的动态页面中传递参数。

示例
图片素材:
技术分享
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>使用&lt;jsp:include&gt;动作标识包含文件</title>
<style>
section{
    background-image: url(images/center.JPG);   /*设置背景图片*/
    height:279px;   /*设置高度*/
    width:781px;    /*设置宽度*/
}
footer{
    background-image: url(images/copyright.JPG);    /*设置背景图片*/
    height:41px;    /*设置高度*/
    width:761px;    /*设置宽度*/
    padding: 20px 0px 0px 20px;     /*设置内边距*/
}
body{
    margin-left:100px;  
}
</style>
</head>
<body >
<jsp:include page="top.jsp"/>
<section></section>
<jsp:include page="copyright.jsp"/>
</body>
</html>

top.jsp

<%@ page pageEncoding="UTF-8"%>
<img src="images/banner.JPG">

copyright.jsp

<%@ page pageEncoding="UTF-8"%>
<%
String copyright="&nbsp;All Copyright &copy; 2012 吉林省明日科技有限公司";
%>
<footer>
    <%= copyright %>
</footer>

效果图:
技术分享

执行请求转发的动作标识< jsp:forward>

通过 < jsp:forward> 动作标识可以将请求转发到其他的Web资源。

<jsp:forward page="url"/>
或者
<jsp:forward page="url">
    子动作标识<jsp:param>
</jsp:forward>

设置参数的子动作标识< jsp:param>

JSP 的动作标识< jsp:param> 可以作为其他标识的子标识,用于为其他标识传递参数。

<jsp:param name="参数名" value="参数值" />
<jsp:forward page="modify.jsp">
    <jsp:param name="uerId" value="7" />
</jsp:forward>

上面的代码中,实现了在请求转发到 modify.jsp 页面的同时,传递了参数 userId ,其参数值为7。

示例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String[] dept = { "策划部", "销售部", "研发部", "人事部", "测试部" }; //声明并初始化一维数组
%>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>应用Java代码片段动态添加下拉列表的列表项</title>
<style type="text/css">
body {
    font-size: 12px;
}
</style>
</head>
<body>
    <h3>员工信息查询</h3>
    员工姓名:
    <input type="text" name="name" size="10" /> 年龄:
    <input type="text" name="age" size="3" /> 所在部门:
    <select>
        <%
            //遍历数组并且数组元素作为下拉列表的列表项显示
            for (int i = 0; i < dept.length; i++) {
        %>
        <option value="<%=dept[i]%>"><%=dept[i]%></option>
        <%
            }
        %>
    </select>
    <input type="button" value="查 询" />
</body>
</html>

效果图:
技术分享

查看源代码:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>应用Java代码片段动态添加下拉列表的列表项</title>
<style type="text/css">
body{
    font-size: 12px;
}
</style>
</head>
<body>
<h3>员工信息查询</h3>
    员工姓名:
    <input type="text" name="name" size="10" /> 年龄:
    <input type="text" name="age" size="3"/> 所在部门:
    <select>

        <option value="策划部">策划部</option>

        <option value="销售部">销售部</option>

        <option value="研发部">研发部</option>

        <option value="人事部">人事部</option>

        <option value="测试部">测试部</option>

    </select>
    <input type="button" value="查 询" />
</body>
</html>

嵌入 java 程序,实现动态效果。

JSP页面的生命周期

技术分享

jspService()方法被调用来处理客户端的请求。对每个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应的一个线程。以多线程方式执行可以大大降低系统的资源需求,提高系统给的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该Servlet始终驻于内存,所以响应是非常快的。

Eclipse 动态网站项目的 jsp 的字节码文件目录。(Myeclipse 在Tomcat的work目录下)

D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost

一个 index.jsp 生成的是index_jsp.javaindex_jsp.class两个文件。

JSP内置对象

JSP九大内置对象

技术分享

  • 用户发送请求( request )
  • 服务器给用户响应( response )
  • out对象是JSPWriter类的实例,是向客户端输出内容常用的对象。

技术分享

request 对象

获取访问的请求参数

request 对象用于处理 HTTP 请求中的各项参数。在这些参数中,最常用的就是获取访问的请求参数。

发送一个请求到 deal.jsp

<a href="deal.jsp?id=1119 & user=peng">处理页</a>

在 deal.jsp 页面可以获取传递的参数值。

<% 
    request.getParameter("id");
%>

示例:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>使用request对象获取请求参数值</title>
</head>
<body>
<a href="deal.jsp?id=119&user=你好">处理页</a>
</body>
</html>

deal.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%request.setCharacterEncoding("utf-8"); %>
<%

    String user = new String(request.getParameter("user").getBytes("iso-8859-1"),"utf-8"); //获取id参数的值
    String id = request.getParameter("id");//获取user参数的值
    String pwd = request.getParameter("pwd");//获取pwd参数值
%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>处理页</title>
</head>
<body>
    id参数的值为:<%=id%><br> user参数的值为:<%=user%><br> pwd参数的值为:<%=pwd%>
</body>
</html>

deal.jsp 页面效果:

id参数的值为:119
user参数的值为:你好
pwd参数的值为:null 

2016 10 19 21点52分

< TODO> p137

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    JSP笔记