表示层JSP【JavaEE】


       JSP是一种动态网页技术标准,它是在静态网页HTML代码中加入Java程序片段(Scriptlet)和JSP标签(tag),构成JSP网页文件,其扩展名为“.jsp”。

一、JSP语法

       JSP页面是将JSP代码放在“<%”与“%>”的标签中,然后嵌入到HTML代码中而形成。在“<%”与“%>”标签中定义JSP元素的的行为。

       1》JSP变量、方法的声明

              语法格式:<%! 声明变量、方法和类 %>

       2》显示JSP表达式的值

              语法格式:<%=表达式%>

       3》JSP代码块

             语法格式:<% 符合java语法的代码块 %>

       4》JSP注释

              在JSP程序中,为了增加JSP程序的可读性,给出了注释元素。

              语法格式1:<%-- 要添加的文本注释 --%>

              语法格式2:

              语法格式3:<%//要添加的文本注释%> <%/*要添加的文本注释*/%>

二、JSP指令元素

       JSP指令标记被服务器解释并被执行。

       JSP 指令的语法格式:        <%@ 指令名称 属性1="属性值1" 属性2="属性值2" … 属性n="属性值n"%>

       1》page指令

              Page指令用来定义JSP页面中的全局属性,它描述了与页面相关的一些信息       

属性

说明

设置值示例

language

指定用到的脚本语言,默认是Java

<%@page language="java"%>

import

用于导入java包或java类

<%@page import="Java.util.Date"%>

pageEncoding

指定页面所用编码,默认与contentType值相同

UTF-8

session

指定该页面是否参与到HTTP会话中

true 或 false

errorPage

设置当页面出错后要跳转到的页面

/error/jsp-error.jsp

contentType

设计响应jsp页面的MIME类型和字符编码

text/html;charset=gbk

isErrorPage

设置是否是一个错误处理页面

true 或 false

isELIgnord

设置是否忽略正则表达式

true 或 false

       2》include指令 

              include指令称为文件加载指令,可以将其他的文件插入JSP网页,被插入的文件必须保证插入后形成的新文件符合JSP页面的语法规则

              include指令语法格式:  <%@ include file="filename"%>    【 include指令只有一个file属性,filename指被包含的文件的名称(相对路径),被插入的文件必须与当前JSP页面在同一Web服务目录下

三、JSP动作元素

       JSP动作元素是用来控制JSP引擎的行为,JSP标准动作元素均以“jsp”为前缀。

       1》 动作

              语法格式:

              功能:

                     当前JSP页面动态包含一个文件,即将当前JSP页面、被包含的文件各自独立编译为字节码文件

                     当执行到该动作标签处,才加载执行被包含文件的字节码。

       2》

              用于停止当前页面的执行,转向另一个页面。 

              语法格式: 

四、JSP内置对象

       在JSP中为了便于数据信息的保存、传递、获取等操作,专门设置了9个内置对象。 

对象名称

有效范围

说明

application

javax.servlet.ServletContext

application

应用程序上下文,JSP页面以及在同一应用程序中的任何Web组件共享信息

config

javax.servlet.ServletConfig

page

允许将初始化数据传递给JSP页面

exception

java.lang.Throwable

page

该对象含有只能由指定的JSP“错误处理页面”访问的异常数据

out

javax.servlet.jsp.JspWriter

page

提供对输出流的访问

page

javax.servlet.jsp.HttpJspPage

page

代表JSP页面对应的Servlet类实例

pageContext

javax.servlet.jsp.PageContext

page

JSP页面本身的上下文

request

javax.servlet.http.HttpServletRequest

request

提供对请求数据的访问,同时还提供用于加入特定请求数据的上下文

response

javax.servlet.http.HttpServletResponse

page

该对象用来向客户端输入数据

session

javax.servlet.http.HttpSession

session

用来保存在服务器与一个客户端之间需要保存的数据,当客户端关闭网站的所有网页时,session变量会自动消失

       1》request对象的常用方法 

              request对象的各种方法主要用来处理客户端浏览器提交的请求信息,以便做出相应的处理。

方法

说明

setAttribute(String name, Object obj)

设置request中的属性及其属性值

getAttribute(String name)

返回name指定的属性值,若不存在指定的属性,就返回null。

removeAttribute(String name)

删除请求中的一个属性

getParameter(String name)

获得客户端传送给服务器端的参数值

getParameterNames()

获得客户端传送给服务器端的所有参数名字(Enumeration类的实例)

getParameterValues(String name)

获得指定参数的所有值

getCookies()

返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding()

返回请求中的字符编码方式

getRequestURI()

获取发出请求字符串的客户端地址

getRemoteAddr()

获取客户端IP地址

getRemoteHost()

获取客户端名字

getSession([Boolean create])

返回和请求相关的session。参数若为true,若没有session,新建session

getServerName()

用于获取服务器的名字

getServletPath()

用于获取客户端所请求的脚本文件的文件路径。

getServerPort()

用于获取服务器的端口号

       2》response 对象的常用方法

              response对象提供了页面重定向(sendRedirect)方法、设置状态行(setStatus)方法和设置文本类型(setContentType)方法等 

方法

说明

SendRedirect(String url)

使用指定的重定向位置url向客户端发送重定向响应

setContentType(String type)

为响应设置内容类型,其参数值可以为text/htmltext/plainapplication/x_msexcelapplication/msword

setContentLength(int len)

为响应设置内容长度

setLocale(java.util.Locale loc)

为响应设置地区信息 

三、session对象主要方法

       session对象其主要作用是存储、获取用户会话信息 

方法

说明

Object getAttribute(String attriname)

获取指定属性的属性值,若属性不存在,返回null

void setAttribute(String name,Object value)

设定指定名字的属性值,并且存储在session中

void removeAttribute(String attriname)

删除指定的属性(包含属性名、属性值)

Enumeration getAttributeNames()

返回session对象中存储的每一个属性对象

long getCreationTime()

返回session对象被创建时间,单位为毫秒

long getLastAccessedTime()

返回session最后发送请求的时间,单位为毫秒

String getId()

返回Session对象在服务器端的编号

long setMaxInactiveInterval()

返回session对象的生存时间,单位为秒

boolean isNew()

判断目前session是否为新的Session

void invalidate()

销毁session对象,使得与其绑定的对象都无效

四、使用样例

设计一个网上答题及其自动评测系统。
本案例设计一个简单的网上答题与评测,该程序包括两部分,
首先是试题页面的设计及其解答的提交,
其次是,当提交解答后,系统自动评阅并给出评阅结果。

该案例的设计,需要设计两个JSP页面:
一个是提交信息页面,
另一个是获取提交信息并进行处理显示结果页面。

其设计关键是如下两点:
(1)对于互斥的单选框、只允许的单选的列表框,只传递一个参数。
(2)对于复选框、可多选列表框,需传递多个参数,通过数组保存并获取参数值。


代码:
(1)提交信息页面程序:ch02_5_input.jsp,《代码》。
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




简单的网上试题自动测评——试题

   
	
一、 2+3=?
3   4   5
二、下列哪些是偶数?
   2   3   4   5
三、下列哪些是动态网页?
   
四、下列组件哪个是服务器端的?
   
五、在服务器端用来接受用户请求的对象是:
(2)获取提交信息并进行处理页面:ch02_5_show.jsp,《代码》 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 简单的网上试题自动测评——测评 <% String s1 = request.getParameter("r1"); if (s1 != null) { out.println("一、解答为:2+3=" + s1 + " "); if (s1.equals("5")) out.println("正确!" + "
"); else out.println("错误!" + "
"); }else out.println("一、没有解答!"); out.println("---------------------------
"); String[] s21 = request.getParameterValues("c1"); if (s21 != null) { out.println("二、解答为:偶数有:"); for (int i = 0; i < s21.length; ++i) {out.println(s21[i] + " ");} if (s21.length == 2 && s21[0].equals("2") && s21[1].equals("4")){ out.println("正确!" + "
"); }else{ out.println("错误!" + "
"); } }else{ out.println("二、没有解答!"); } out.println("---------------------------
"); String[] s31 = request.getParameterValues("list1"); if (s31 != null) { out.println("三、解答为:动态网页有:"); for (int i = 0; i < s31.length; ++i) {out.println(s31[i] + " ");} if (s31.length == 3 && s31[0].equals("asp") && s31[1].equals("php") && s31[2].equals("jsp")){ out.println("正确!" + "
"); }else{ out.println("错误!" + "
"); } } else out.println("三、没有解答!"); out.println("---------------------------
"); String s4 = request.getParameter("list5"); if (s4 != null) { out.println("四、解答为:服务器端的组件是有:"); out.println(s4 + " "); if (s4 != null && s4.equals("servlet")) out.println("正确!" + "
"); else out.println("错误!" + "
"); } else out.println("四、没有解答!"); out.println("---------------------------
"); String s5 = request.getParameter("text1"); if (s5 != null) { out.println("五、解答为: "); out.println(s5 + " "); if (s5 != null && s5.equals("request")) out.println("正确!" + "
"); else out.println("错误!" + "
"); } else out.println("五、没有解答!"); out.println("---------------------------
"); %>

 

你可能感兴趣的:(JavaEE笔记)