2021-05-06

JSP内置对象及方法详解

目录

JSP内置对象及方法详解

一.JSP基本架构

1.JSP简介

2.JSP基础语法

3.JSP页面生命周期

二.JSP内置对象及其方法(标红的内置对象为常用对象)

 1.out内置对象及其方法

2.response内置对象及其方法

3.request内置对象及其方法

4.session内置对象及其方法

5. application内置对象及其方法

6.page内置对象及其方法

7.pageContext内置对象及其方法

8.config内置对象及其方法

9.Exception内置对象及其方法三.请求重定向和请求转发


一.JSP基本架构

1.JSP简介

JSP全名为Java Server Pages,实现了在java中使用HTML标签。JSP是一种动态网页技术,执行JAVAEE标准,在服务器端显示。

2.JSP基础语法

(1)JSP脚本

<1>Jsp脚本:在JSP页面中执行的java代码

<2>语法:<% java代码 %>

(2)JSP声明:

<1>Jsp声明:在JSP页面中定义变量或者方法

<2>语法:<%! java代码 %>

(3)JSP表达式:

<1>Jsp表达式:在JSP页面中执行的表达式

<2>语法:<%= java表达式 %>//注意表达式不以分号结尾

(4)JSP注释:

<1>HTML注释:<!-- html注释 --> 客户端可见

<2>JSP注释:<%-- html注释 --%> 客户端不可见

<3>JSP脚本注释:// 单行注释 /**/ 多行注释

3.JSP页面生命周期

对于每次单个客户端发出的请求,JSP会对该情趣予以判断。如果为第一次请求,则JSP引擎会把该JSP文件转换成一个Servlet生成字节码文件,并执行jspInit();否则直接访问已生成的字节码文件。最终两类请求都会被jspService()方法解析执行。

二.JSP内置对象及其方法(标红的内置对象为常用对象)

 1.out内置对象及其方法

out内置对象
out对象方法(标红为常用方法)
void println()向客户端打印字符串
void clear()清除缓冲区的内容,如果在flush之后调用会抛出异常
void clearBuffer()清除缓冲区的内容,如果在flush之后调用不会抛出异常
void flush()将缓冲区内容输出到客户端
int getBufferSize()以字节数返回缓冲区的大小
int getRemaining()返回缓冲区还剩余多少字节
boolean isAutoFlush()返回缓冲区满时,时自动清空还是抛出异常
void close()关闭输出流

2.response内置对象及其方法

response内置对象
response对象方法(标红为常用方法)
String getCharacterEncoding()返回响应用的是何种字符编码
void setContentType(String type)设置响应的MIME类型
PrintWriter getWriter()返回可以向客户端输出字符的一个对象(注意比较:PrintWriter与内置对象out的区别)
sendRedirevt(java.lang.String location)重新定向客户端的请求,跳转到其他JSP文档
setHeader(String name,value)页面显示系统时间,并定时刷新

 

3.request内置对象及其方法

request内置对象
request对象方法(标红为常用方法)
String getParameter(String name)返回name中指定参数的参数值
String[] getParaameterValues(String name)返回包含参数name的所有值数组
void setAttribute(String,Object)储存此请求中的属性
object getAttribute(String name)返回指定属性的属性值
String getContentType()得到请求体的MIME类型
String getProtocol()返回请求用的协议类型及版本号
String getServerName()返回接受请求的服务器的主机名

4.session内置对象及其方法

session内置对象
session对象方法(标红为常用方法)
long getCreationTime()返回SESSION创建时间
public String getId()返回SESSION创建时JSP引擎为它设的唯一的ID号
public Object setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
public Object getAttribute(String name)返回与会话中的指定名称绑定在一起的对象,如果没有对象绑定再改名成下,返回null
String[] getValueNames()返回一个包含此SESSION种所有可用属性的数组
int getMaxInactiveInterval()返回两次请求间隔多长时间此SEESSION被取消
void setMaxInactiveInterval(int number)

设置session最大生存周期

 

以上四个内置对象在JSP出现频率较高,所以将为大家代码演示:

代码包含5个JSP页面,index.jsp页面存储登陆页面的form代码并跳转到response.jsp页面。response.jsp页面进行判断所属部门,若为前端,请求转发到front.jsp页面;否则请求转发到back.jsp。front.jsp与back.jsp两个页面会进行掌握语言form填写,最终将所有数据传入out.jsp页面输出

index.jsp 页面代码:

这里简单制作了一个登陆页面

​
<%@ page language="java" import="java.io.*" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.po.Users"%>
<html>
<head> <title> JSP</title></head>
<body>
<h1>登录页面</h1>
<form name="entrance" action="response.jsp" method="post" >
    <table>
        <tr>
            <td>姓名</td>
            <td> <input type="text" name="name"/> </td>
        </tr>
        <tr><td aligh="center">所属部门</td>
            <td>
            <input type="radio" name="department" value="front">前端
            <input type="radio" name="department" value="back">后端
            </td>
        </tr>
        <tr>
            <td>账号</td>
            <td> <input text="password" name="account"/> </td>
        </tr>
        <tr>
            <td>密码</td>
            <td> <input text="password" name="password"/> </td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="登录"/></td>
        </tr>
    </table>
</form>
</body>
</html>

​

效果如下图:

 

response.jsp页面代码: 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
</body>
</html>
<%!
    Object department = null;
%>
<%
    department = request.getParameter("department");//判断所属部门
    session.setAttribute("Name",request.getParameter("name"));
    session.setAttribute("Account",request.getParameter("account"));
    session.setAttribute("Password",request.getParameter("password"));
    session.setAttribute("Department",request.getParameterValues("department"));
%>
<%
    //response.sendRedirect("目标地址");//请求重定向
    if(department.equals("front")) {
        request.getRequestDispatcher("front.jsp").forward(request,response);//若为前端,请求转发front.jsp
    }
    else {
        request.getRequestDispatcher("back.jsp").forward(request,response);//请求转发,请求转发back.jsp
    }
%>

front.jsp页面代码:

这里同样制作了一个简单的fom表

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <form name="improvement" action="out.jsp" method="post">
        <table>
            <tr>
                <td colspan="2">前端掌握语言
                    <input type="checkbox" name="front_language" value="javascript">javascript语言
                    <input type="checkbox" name="front_language" value="PHP">PHP语言
                    <input type="checkbox" name="front_language" value="HTML">HTML语言
                    <input type="checkbox" name="front_language" value="CSS">CSS语言
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="提交"/> </td>
            </tr>
        </table>
    </form>
</body>
</html>

效果如下图:

 

 

back.jsp页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <form name="improvement" action="out.jsp" method="post">
        <table>
            <tr>
                <td colspan="2">后端掌握语言
                    <input type="checkbox" name="back_language" value="JAVA">java语言
                    <input type="checkbox" name="back_language" value="C++">C++语言
                    <input type="checkbox" name="back_language" value="C#">C#语言
                    <input type="checkbox" name="back_language" value="database">数据库语言
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="提交"/> </td>
            </tr>
        </table>
    </form>
</body>
</html>

效果如下图:

 

out.jsp页面代码:

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

</body>
</html>
姓名<% out.println(session.getAttribute("Name")); %>
账号<% out.println(session.getAttribute("Account")); %>
密码<% out.println(session.getAttribute("Password"));%>
掌握语言<%
    if(session.getAttribute("Department").equals("front")) {
         String []string1 = request.getParameterValues("front_language");
        if(request.getParameterValues("front_language")!=null)
            for(int i=0;i<=string1.length-1;i++) {
                out.println(string1[i]+"&nbsp;&nbsp;");
            }
    }
    else {
        String[] string2 = request.getParameterValues("back_language");
        if(request.getParameterValues("back_language")!=null)
            for (int i = 0; i <= string2.length - 1; i++) {
                out.println(string2[i]+"&nbsp;&nbsp;");
            }
    }
%>

​

​

​

​

最终程序运行截图如下:

     

 

5. application内置对象及其方法

application内置对象
application对象方法(标红为常用方法)
public void setAttribute(String name,Object value)使用指定名称将对象绑定
public Object getAttribute(String name)返回与此会话中指定名称绑定在一起的对象,如果没有对象绑定在该名称之下,则返回null
public Object getAttribute(String name)返回所有可能属性名的枚举
String getSererInfo()返回JSP引擎名及版本号

6.page内置对象及其方法

page内置对象
page对象方法
class getClass()返回此Object的类
int hashCode()返回此Object的hash码
boolean equals(Object obj)判断此Object是否与指定的Object对象相等
boolean equals(Object obj)把此Object拷贝到指定的Object对象中
Object clone()克隆此Object对象
String toString()把此Object对象转换成String类对象
void notify()唤醒一个等待的线程
void notify()唤醒所有等待的进程
void wait(int timeout)使一个线程处于等待直到timeout结束或被唤醒
void wait(int timeout)使一个线程处于等待直到被唤醒

 

7.pageContext内置对象及其方法

pageContext内置对象可以理解为之前所有内置对象的集大成者

pageContext内置对象
pageContext对象方法
JspWriter getOut()返回当前用户端响应被使用的JSPWriter流(out)
HttpSession getSession()返回当前页中的HttpSession对象(session)
Object getPage()返回当前页的Object对象
ServletRequest getRequest()返回当前页的ServletRequest对象(request)
ServletResponse getResponse()返回当前页的ServletResponse对象(response)
void setAttribute(String name,Object attribute)设置属性及属性值
Object getAttribute(String name,int scope)在指定范围内取属性值
int getAttributeScope(String name)返回某属性的作用范围
void forward(String relativeUrlPath)使当前页面重导到另一个页面
void include(String relativeUrlPath)在当前位置包含另一文件

 

8.config内置对象及其方法

config内置对象
conig对象方法
ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始话参数的值
Enumeration getInitParamterNames()

返回Servlet初始化所需所有参数的枚举

 

9.Exception内置对象及其方法

exception内置对象
exception对象方法
String getMessage()返回描述异常的消息
String toString()返回关于异常的简短描述消息
void printStackTrace()显示异常及其栈轨迹
Throwable FillInStackTrace()重写异常的执行轨迹

 

这里简单编写一个代码向大家展示pageContext内置对象和exception内置对象

该代码只是在原有基础上修改了response.jsp页面 out.jsp页面以及增加了Exception.jsp页面来处理异常状况

response.jsp页面代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
</body>
</html>
<%!
    Object department = null;
%>
<%
    department = pageContext.getRequest().getParameter("department");//判断所属部门
    pageContext.getSession().setAttribute("Name",request.getParameter("name"));
    pageContext.getSession().setAttribute("Account",request.getParameter("account"));
    pageContext.getSession().setAttribute("Password",request.getParameter("password"));
    pageContext.getSession().setAttribute("Department",request.getParameter("department"));
%>
<%
    if(department.equals("front"))
        response.sendRedirect("front.jsp");//这里使用请求重定向,前一次提交的内容会丢失
    else
        response.sendRedirect("back.jsp");
%>

out.jsp页面代码如下:

<%@ page contentType="text/html;charset=UTF-8" errorPage="Exception.jsp"%>
<html>
<head>
</head>
<body>
</body>
</html>
姓名<% pageContext.getOut().println(pageContext.getSession().getAttribute("Name"));
    //这里使用pageContext调用getSession方法显然没有直接用session调用getAttribute()方法简便
%><br>
账号<% pageContext.getOut().println(pageContext.getSession().getAttribute("Account")); %><br>
密码<% pageContext.getOut().println(pageContext.getSession().getAttribute("Password"));%><br>
<%
    String string = (String)session.getAttribute("Department");
%>
掌握语言<%
    if(string.equals("front")) {
            String []string1 = request.getParameterValues("front_language");
            for(int i=0;i<=string1.length-1;i++) {
                out.println(string1[i]+"&nbsp;&nbsp;");
            }
    }
    else {
            String[] string2 = request.getParameterValues("back_language");
            for (int i = 0; i <= string2.length - 1; i++) {
                out.println(string2[i]+"&nbsp;&nbsp;");
            }
    }
%><br>

Exception.jsp页面代码如下: 

<%@ page contentType="text/html;charset=UTF-8" errorPage="Exception.jsp"%>
<html>
<head>
</head>
<body>
</body>
</html>
<%
    Exception exception = new Exception();
%>
  异常信息  <% out.println(exception.getMessage()); %><br>
  异常字符串描述  <% out.println(exception.toString()); %><br>

运行结果如下图: 

  

(这里面使用到了请求重定向,因为我用了setAttribute()方法将首次登录信息存入了内存,才能够正常输出;否则首次输入的信息会丢失,无法在out.jsp页面显示) 

如果不使用setAttribute()方法时对应out.jsp页面如下(其他页面照常不变):

<%@ page contentType="text/html;charset=UTF-8" errorPage="Exception.jsp"%>
<html>
<head>
</head>
<body>
</body>
</html>
姓名<% pageContext.getOut().println(request.getParameter("name"));
    //这里使用pageContext调用getSession方法显然没有直接用session调用getAttribute()方法简便
%><br>
账号<% pageContext.getOut().println(request.getParameter("account"));%><br>
密码<% pageContext.getOut().println(request.getParameter("password"));%><br>
<%
    String string = (String)session.getAttribute("Department");
%>
掌握语言<%
    if(string.equals("front")) {
            String []string1 = request.getParameterValues("front_language");
            for(int i=0;i<=string1.length-1;i++) {
                out.println(string1[i]+"&nbsp;&nbsp;");
            }
    }
    else {
            String[] string2 = request.getParameterValues("back_language");
            for (int i = 0; i <= string2.length - 1; i++) {
                out.println(string2[i]+"&nbsp;&nbsp;");
            }
    }
%><br>

运行效果如下图 :

  

  

有关于请求重定向和请求转发请看第三点 

三.请求重定向和请求转发

1.请求重定向
客户端行为response.sendRedirect("目标地址"),
从本质上讲等同于两次请求(相当于让客户端发一个新请求,这会导致前一次请求的参数不会保留,前一次的请求对象不会保存,地址栏的URL地址会改变
2.请求转发
服务器行为request.getRequestDispatcher("目标地址").forward(request,response);
是一次请求,转发后请求对象会保存地址栏的URL地址不会改变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值