第2篇——JSP作业4之request动作

JSP作业4之request动作
前面三周一直在回顾HTML、CSS和JS的内容,也是为后面的的JSP做一些准备,只是还会用到部分的Java。

JSP基础
(我22号写了大半了没保存,现在想哭了!我以后一定写完保存发布再结束!!!)

- 基本构成

<!-- JSP中的指令标识 --> 
<%@ page language="java" contentType="text/html; charset=gb2312" %> 
<%@ page import="java.util.Date" %> <!-- HTML标记语言 --> 
<html> 
<head><title>JSP页面的基本构成</title></head> 
<body>
 <center> 
 <!-- 嵌入的Java代码 --> 
 <% String today=new Date().toLocaleString(); %> 
 <!-- JSP表达式 -->
  今天是:<%=today%> 
  <!-- HTML标记语言 -->
   </center> 
   </body> 
   </html> 

(1)指令标识:包含多个属性,有page、include、taglib三种指令。
(2)HTML标记语言:作为静态内容呈现在客户端浏览器中,负责页面布局、设计和美观等。
(3)嵌入的Java代码片段:在客户端浏览器不可见,需要被服务器执行,然后和HTML标记语言一起发送给客户端进行显示。可以使JSP页面生成动态的内容。
(4)JSP表达式:主要用于数据的输出;向页面输出内容以显示,也可以动态地指定HTML标记中属性的值。

- 指令标识
page(页面指令)、include指令、taglib指令。
通常以”<%@“标记开始,以”%>“标记结束。
(1)page指令。
有多种属性,除import属性外,其他属性只能在指令中出现一次。
<%@ page attr1=“v1” attr2=“v2” %>

  1. language属性:设置当前页面中编写JSP脚本使用的语言。默认为Java。
  2. contentType属性:设置页面响应的MIME类型,通常被设置为text/html;如果属性设置不正确(为text/css)时,客户端浏览器会直接显示HTML代码而没有进行解释执行。还可以设置JSP字符编码,默认为ISO-8859-1。
  3. import属性:相当于import语句用于导入包。
    默认导入以下包:
java.lang.*
java.servlet.*
java.servlet.jsp.*
java.servlet.http.*


若要在页面中使用JavaBean,也可以通过import属性来导入。
还可以通过 < jsp:useBean> 动作标识来创建一个JavaBean实例进行调用。

  1. extends属性:(引入类)指定一个将JSP页面转换为Servlet后继承的类。
  2. session属性:表明当前页面是否支持会话(用户识别,是否唯一,是否在线等)。默认为true。
  3. buffer属性:out对象/JspWriter类对象(向当前页面输出内容时)使用缓冲区的大小。
    none表示不使用缓冲区,直接通过PrintWriter对象进行输出。为数值时不小于默认值8KB。
  4. autoFlush属性。
    默认为true:当缓冲区满时,自动将内容输出到客户端。
    若为false:当缓冲区满时,产生”JSP Buffer overflow“异常。
    若buffer为none时,autoFlush属性不能为false。
  5. isThreadSafe属性:默认为true,(表明当前页面被转换为Servlet后),会以多线程的方式来处理来自多个用户的请求。否则转换后的Servlet会实现SigleThreadMode接口,并以单线程的方式来处理用户请求。
  6. info属性:设置任意字符串。
  7. errorPage属性:指定一个页面用于当前页面出现异常时进行跳转,
  8. isErrorPage属性:默认为false。
    出现在异常处理页面中的page指令中的属性。为true时,该异常页面可使用exception异常对象;否则不可使用exception对象。
  9. isELIgnored属性:
  10. pageCoding属性:

(1)include指令。
<%@ include file=“文件路径” %>
file属性:不支持任何表达式,不允许使用携带参数格式

- 脚本标识

(1)JSP表达式:<%= 变量或者有返回值的方法或Java表达式 %>
转换为Servlet后,该句转换为out。print()方法。表达式中不能有分号。
(2)声明标识:<%! 声明变量或者声明代码 %>

<%@ page contentType="text/html; charset=utf-8" %>
<%!
int num = 0;
synchronized void add(){
	num++;
	}
%>
<% add(); %>
<html>
<body><center>您是<%= num %>位访问该页的游客!</center></body>
</html>

(3)脚本程序:<% Java代码片段%>。所实现的额功能是JSP表达式无法实现的。

- JSP注释
(1)HTML中的注释:
<!-- 注释内容 -->
浏览器不可见,HTML源代码可见。
(2)带有JSP表达式的注释:
<!-- 注释内容 <%= expression %>-->
浏览器不可见,HTML源代码可见。
(3)隐藏注释:
<%-- 注释内容 --%>
浏览器不可见,HTML源代码不可见,JSP源文件可见。
(4)程序脚本中的注释:
1.单行注释 //注释内容
2.多行注释 /* 注释内容 */
3.提示文档注释
/** 注释内容 ... */

- JSP动作标识
< jsp:include>、< jsp:forward>、< jsp:param> 、< jsp:include> 、< jsp:useBean> < jsp:setProperty> < jsp:getProperty> < jsp:fallback> < jsp:plugin>

(1)< jsp:include> :引入文件(动态或静态文件,也可以是携带参数的文件路径)。
如果是静态文件,页面执行后该标识的位置会输出文件内容;如果是动态文件,可以识别出文件的类型。
<jsp:include page="filename" flush="true|false" />

<jsp:include page="filename" flush="true|false" />
<jsp:param name="name" value="value" />
</jsp:include>


该动作和include指令的差异:
1.是否支持 文件路径包含表达式
2.处理方式
使用include指令时:静态文件的内容会原封不动的插入到该指令的位置,然后对这个合成的文件进行编译。编译后的文件只有一个
使用include动作时:标识执行后,程序会将请求转发到被包含的页面,并将执行结果输出到浏览器中,然后返回到当前页面继续执行代码。服务器执行的是两个文件,需要对两个文件进行编译。
3.include指令为”静态包含“,对合成后的主文件进行编译,每一次执行都会对被包含重新编译(无部分执行可言)。include动作为”动态包含“,当该标识动作执行后,被包含文件才会被编译,否则文件不会被编译(还没有执行到该语句时)。
4.对被包含文件的约定 P65
include指令中contentType冲突会产生异常,而include动作不需要遵守约定。

(2)< jsp:forward>:将请求转发到另外一个JSP、HTML或相关的资源文件。该标识被执行后,当前页面不再被执行转而执行目标页面(但是当前页面参数信息可被保留)。
:该目标文件必须时内部的资源(当前应用中的资源)。

<jsp:forward page="filename" >
<jsp:param name="name" value="v">
</jsp:forward>

请求转发和请求重定向:
forward转发:转发时,存储在request对象中的信息会被保留并被带到目标页面中;sendRedirect()重定向时 会重新生成一个request请求,然后将该请求重定向到目标文件的URL,故事先存储在request对象中的信息都不存在了。
(3)< jsp:useBean>:在JSP页面中创建一个Bean实例,并且通过设置属性可以将实例存储到JSP页面指定范围内。如果在指定范围内已经存在了指定的Bean实例,那么已存在的实例将被使用而不会重新创建。

今天的就先到这里。useBean和后面的setProperty都没使用过,读起来也玄乎。
关于实验
功能要求
1.主要是使用include动作引入一个head.html文件(不需要携带参数)
<jsp:include page="head.html"/>
2.在process.jsp中对输入的数字进行判断然后用forward转发输出值。
3.如果输入的不是数字或者范围不合转发到异常处理页,并且获取抛出的异常类(看了资料说使用toString()函数获取,但是用了和getMessage都没有任何输出,只有用printStackTrace(response.getWriter())输出异常流)。

过程
1.one.jsp中输入框的name设置参数,
<input type="text" name="num">
2.process.jsp获取参数(String类型)
request.getParameter("num");
3.利用类的成员方法将String类型转为Int整型
Integer.valueOf(参数)
4.,page指令标识,设置属性 errorpage
errorPage="error.jsp"
5.抛出异常
throw new NumberFormatException("request.getParameter('num')");
照理来说,在error.jsp中通过
exception.toString();
是可以得到要求的页面的。
在这里插入图片描述
但是尝试过getMessage也没有任何输出。
仍然使用了
exception.printStackTrace(response.getWriter());
输出异常流。

另:
关于一个解决乱码问题(链接找不到,后面补写一个)

参考链接:
JSP异常处理
https://www.w3cschool.cn/jsp/jsp-exception-handling.html

代码已上传
https://github.com/little-talks/little-projects/tree/master/test04

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值