JSP 内置对象

  • JSP如何实现获取客户端请求及响应?

通过,请求与响应对象,请求与响应对象是通过内置对象存在的。

  • 内置对象

内置对象(也称隐含对象,有9个):不需要预先声明就可以在脚本代码和表达式中随意使用

一、HTTP协议

​ 针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范。规定了客户端在访问服务器端的时候,要带上哪些东西,服务器端返回数据的时候,也要带上什么东西。

  • 版本

1.0: 请求数据,服务器返回后,将会断开连接
1.1: 请求数据,服务器返回后,连接还会保持着。除客户端关闭连接。该连接有一定的时间限制,如果长时间空着,那么后面会服务器也会断掉。

在这里插入图片描述
在这里插入图片描述

1、Http请求数据

​ 请求的数据里面包含三个部分内容 : 请求行 、 请求头 、请求体。

  1. 请求行

    Request URL: 请求路径

    Request Method: 请求方式

  2. 请求头

    Accept: 客户端向服务器端表示,我能支持什么类型的数据。
    Referer: 真正请求的地址路径,全路径
    Accept-Language: 支持语言格式
    User-Agent: 用户代理 向服务器表明,当前来访的客户端信息。
    Content-Type: 提交的数据类型。经过urlencoding编码的form表单的数据
    Accept-Encoding: gzip, deflate (压缩算法) 。
    Host : 主机地址
    Content-Length: 数据长度
    Connection : Keep-Alive 保持连接
    Cache-Control : 对缓存的操作

  3. 请求体

    浏览器真正发送给服务器的数据,通常是键值对数据。

2、Http响应数据

​ 响应的数据里面包含三个部分内容 : 响应行 、 响应头 、响应体。

  1. 响应行

    Status Code: 状态码

  2. 响应头

    Server: 服务器类型
    Content-Type: 服务器返回给客户端内容类型
    Content-Length: 返回的数据长度
    Date: 通讯的日期,响应的时间

  3. 响应体

    Response服务器返回的html页面等信息。

二、request、out、response对象

  • request: 封装了由WEB浏览器或其它客户端生成HTTP请求的细节(参数,属性,头标和数据)
  • out: 代表输出流的对象
  • response: 封装了由WEB浏览器或其它客户端生成HTTP请求的细节(参数,属性,头标和数据)
  • request作用域:

用户的请求周期,指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。

1、request 对象及常用方法

​ request 对象代表来自客户端的请求信息,如在FORM表单中填写的信息,是最常用的对象。客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

方法(部分)描述
String getParameter(String strTextName)获取表单或URL提交信息
Enumeration getParameterNames()返回可用参数的枚举
String[] getParameterValues(String name)返回包含参数name的所有值的数组

更多参见:入口

2、response对象及常用方法

​ out 对象是JspWriter类的实例,是向客户端输出内容常用的对象。

方法(部分)描述
print(dataType dt)输出Type类型的值
println(dataType dt)输出Type类型的值然后换行
flush()刷新输出流
3、response对象及常用方法

​ response对象是对客户端的响应,可以通过response对象来组织发送到客户端的数据,需要向客户端发送文字时直接使用。它是HttpServletResponse类的实例。

方法(部分)描述
String getCharacterEncoding()返回响应用的是何种字符编码
ServletOutputStream getOutputStream()返回响应的一个二进制输出流
PrintWriter getWriter()返回可以向客户端输出字符的br/>一个对象
void setContentLength(int len)设置响应头长度

三、session、application、exception对象

1、session对象及常用方法

​ session对象是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication 开始,直到客户端与服务器断开连接为止,用于跟踪会话。它是HttpSession类的实例。

会话

会话是代表用户第一次进入当前系统直到退出系统或关闭浏览器,在此期间与服务器的一系列交互。

session作用域:会话期间

设置session有效时间的方法:
session.setMaxlnactivelnterval(int second)参数为秒
如果设置session有效时间为5分钟,则为:
​ session.setMaxlnactivelnterval(5*60);

方法(部分)描述
long getCreation Time()返回SESSION创建时间
public String getld()返回SESSION创建时JSP引擎为它设的惟一ID号
long getLastAccessed Time()返回此SESSION里客户端最近一次请求时间
int getMaxlnactivelnterval()返回两次请求间隔多长时间此SESSION被取消(s)
void setMaxlnactivelnterval()设置两次请求间隔多长时间此SESSION被取消(s)
2、application

​ application对象实现了用户间数据的共享,可存放全局变量,可用于页面访问量统计等。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

application: 提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径方式
application作用域: web容器的生命周期

方法(部分)描述
Object getAtribute(String name)返回给定名的属性值
Enumeration getAttributeNames()返回所有可用属性名的枚举
void setAttribute(String name,Object obj)设定属性的属性值
void removeAttribute(String name)删除属性及其属性值
3、exception对象及常用方法

​ exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。它实际上是java.lang.Throwable的对象。

<!-- 指定产生异常时跳转的页面 -->
<%@ page contentType="text/html;charset=UTF-8" language="java"  errorPage="error.jsp" %>
<!-- 指定该页面是异常处理页面 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
方法(部分)描述
String getMessage()返回描述异常的消息
String tostring()返回关于异常的简短描述消息
void printStackTrace()显示异常及其栈轨迹

四、page、pageContext、config对象

1、page对象

​ page对象指向当前JSP页面本身,类似于类中的this 指针,它是java.lang.Object类的实例。page对象代表了正在运行的由JSP文件产生的类对象。

2、pageContext对象及常用方法

​ pagecontext 对象提供了对JSP页面内所有的对象及名字空间的访问,可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

<%= request.getParameter("name")%>
<!-- 通过pageContext.getRequest()方法实现上句 -->
<%= pageContext.getRequest().getParameter("name")%>
方法(部分)描述
JspWriter getOut()返回当前客户端响应被使用的JspWriter 流(out)
HttpSession getSession()返回当前页中的HttpSession对象(session)
ServletRequest getRequest()返回当前页的 ServletRequest对象(request)
Object getPage()返回当前页的Object对象(page)
ServletResponse getResponse()返回当前页的ServletResponse对象(response)
Exception getException()返回当前页的Exception对象(exception)
ServletConfig getServletConfig()返回当前页的 ServletConfig对象(config)
servletContext getServletContext()返回当前页的 ServletContext对象(application)
void include(String relativeURLPath)在当前位置包含另一页面
3、config对象及常用方法

​ config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象。

方法描述
ServletContext getServletContext()返回包含服务器相关信息的所有servletContext对象
getInitParameter(String name)获取初始化参数值
getInitParameterNames()返回 servlet初始化所需所有参数的枚举
  • 配置JSP页面

    在web.xml文件中的进行,**JSP被当成Servlet配置,**为Servlet配置参数使用init-param元素,该元素可以接受param-name和param-value分别指定参数名和参数值。


<servlet>    
	<!--指定servlet的名字-->  
	<servlet-name>config</servlet-name>    
	<!--指定哪一个JSP页面配置成Servlet-->  
	<jsp-file>/abc.jsp</jsp-file>  
	<!--配置名为name的参数,值为Tim-->  
	<init-param>    
		<param-name>name</param-name>    
		<param-value>Tim</param-value>    
	</init-param>    
	<!--配置名为age的参数,值为15-->  
	<init-param>    
		<param-name>age</param-name>    
		<param-value>15</param-value>    
	</init-param>    
</servlet>    
<servlet-mapping>   
	<!--指定将config Servlet配置到/atthis路径-->   
	<servlet-name>config</servlet-name>    
	<url-pattern>/atthis</url-pattern>
</servlet-mapping>

注意:如果希望JSP页面可以获取web.xml配置文件中的配置信息就必须通过为该JSP页面在web.xml文件中分配的路径来访问页面,因为只有这样访问JSP页面才会让配置文件起作用。

五、案例分析

1、数据类 Emp、DBUtil
// Emp类
public class Emp {
    private String account;
    private String name;
    private String password;
    private String email;

    public Emp(String account, String name, String password, String email) {
        this.account = account;
        this.name = name;
        this.password = password;
        this.email = email;
    }

    public String getAccount() { return this.account; }
    public void setAccount(String account) {  this.account = account; }
    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
    public String getPassword() { return this.password; }
    public void setPassword(String password) { this.password = password; }
    public String getEmail() { return this.email; }
    public void setEmail(String email) { this.email = email; }
}
// DBUtil类
public class DBUtil {
    public static Map<String, Emp> map = new HashMap<>();
    static {  //静态代码块
        map.put("1001", new Emp("1001", "A1", "123", "A1@163.com"));
        map.put("1002", new Emp("1001", "B2", "123", "B2@163.com"));
        map.put("1003", new Emp("1001", "C3", "123", "C3@163.com"));
        map.put("1004", new Emp("1001", "D4", "123", "D4@163.com"));
    }

    // 判断用户名和密码是否正确
    public static boolean selectEmpByAccoutAndPassword(Emp emp){
        boolean flage = false;
        for(String key : map.keySet()){
            Emp e = map.get(key);
            if(emp.getAccount().equals(e.getAccount())
            && emp.getPassword().equals(e.getPassword()))
                return true;
        }
        return false;
    }
}
2、index.jsp 页面
<body>
  <!--
  pageContext的作用:
  1、forward方法  完成请求的转发
  2、include方法  实现页面之间的包含关系
  3、pageContext  方法获取其他的内置对象,getRequest,getSession...
  -->
<%
  //pageContext.include("header.jsp");
  //pageContext.forward("a.jsp?name=moc");
%>
  page的基本信息:<%= this.getServletInfo()%>
  <br />
  <a href="/jsp/denga"> 按下</a>
</body>

在这里插入图片描述

3、web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

<servlet>
    <servlet-name>logab</servlet-name>
    <jsp-file>/logon.jsp</jsp-file>
    <init-param>
        <param-name>age</param-name>
        <param-value>10</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>logab</servlet-name>
    <url-pattern>/denga</url-pattern>
</servlet-mapping>
</web-app>
4、logon.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>人事管理系统</title>
</head>
<body>
    config对象:<%= config.getServletName()%>
    <br>
    config获得的初始化参数:<%= config.getInitParameter("age")%>

    <%
        // pageContext作用域只在当前作用域有效
        pageContext.setAttribute("age", 12);
    %>
    <br>
    pageContext作用域获取的值:<%= pageContext.getAttribute("age") %>
    <%
        request.setAttribute("name", "description");
        // 将请求和响应转发给 result.jsp
        //request.getRequestDispatcher("result.jsp").forward(request, response);
    %>
    <h3 align="center">人事管理系统登录界面</h3>
    <hr>
    <!-- action代表服务器端的处理程序 -->
    <form action="control.jsp">
        <table>
            <tr>
                <td>
                    账号:
                </td>
                <td>
                    <input type="text" name="account" />
                </td>
            </tr>
            <tr>
                <td>
                    密码:
                </td>
                <td>
                    <input type="password" name="password" />
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="登录" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

在这里插入图片描述

5、control.jsp页面.
<%@ page contentType="text/html;charset=UTF-8" language="java"  errorPage="error.jsp" %>
<%@ page import="moc.test01.bean.*, moc.test01.db.*" %>
<%@ page import="java.util.Map" %>
<html>
<head>
    <title>人事管理系统</title>
</head>
<body>
    <!-- 获取账号和密码,通过调用DBUtil当中的方法验证账号和密码的正确性
        1. 正确,返回true,显示登录成功
        2. 错误,返回false, 显示错误信息。

        request: 获取请求信息
        getParameter(String name): 可以通过表单的name属性来获取控件的值

        out: 输出流对象,输出指定信息
        println(): 打印输出信息并换行

    -->
    <!-- 以下结果为null,是因为requset的作用域 -->
    从request对象中获取key为name对应的值:<%= request.getAttribute("name") %>


    <!-- 获得request的编码方式 -->
    <h3>响应的字符编码集:<%= response.getCharacterEncoding() %></h3>
<%
    String account = request.getParameter("account");
    String password = request.getParameter("password");

    // out.println("账号:" + account + ", 密码:" + password);
    Emp emp = new Emp(account, null, password, null);
    boolean flag = DBUtil.selectEmpByAccoutAndPassword(emp);
    Map<String, Emp> map = DBUtil.map;

    if(flag == true){
        Object o = application.getAttribute("count");
        if(o == null){
            application.setAttribute("count", 1);

        }else{
            int count = Integer.parseInt(o.toString());
            application.setAttribute("count", count + 1);
        }

        session.setAttribute("account", account);  // 账户信息放入会话作用域
%>
    <h3 align="right">访问量:<%= application.getAttribute("count")%></h3>
    <h3 align="right">登录账户:<%= session.getAttribute("account") %></h3>
    <h3 align="center">欢迎来到人事管理系统的首页</h3>
    <hr>
    <table align="center" border="1" width="500px">
        <tr>
            <td>
                账号
            </td>
            <td>
                员工姓名
            </td>
            <td>
                <a href="http://www.baidu.com">邮箱</a>
            </td>
            <td>
                修改
            </td>
        </tr>
        <%
            for(String key : map.keySet()){
                Emp e = map.get(key);
                %>
                    <tr>
                        <td>
                            <%= e.getAccount() %>
                        </td>
                        <td>
                            <%= e.getName() %>
                        </td>
                        <td>
                            <%= e.getEmail() %>
                        </td>
                        <td>
                            <!-- 相邻两个页面传递数据,可以通过URL参数来传递
                             规则:
                                资源?key1=value1&key2=value2
                             -->
                            <a href="update.jsp?account=<%=e.getAccount()%>&name=<%=e.getName()%>&email=<%=e.getEmail()%>">修改</a>
                        </td>
                    </tr>
                <%
            }
        %>
    </table>
<%
    }
    else
        //out.println("用户名和密码错误");
    throw new Exception("账号和密码错误"); // 500
%>
</body>
</html>

在这里插入图片描述

6、update.jsp界面
<body>
    <h3>员工更新界面</h3>
    <hr>
    <h3 align="right">登录账号:<%= session.getAttribute("account") %></h3>
    <form action="update_data.jsp">
        <table align="center" border="1" width="500px">
            <tr>
            <td>账号</td>
            <td><input type="text" name="account" value="<%=request.getParameter("account")%>"/></td>
            </tr>
            <tr>
                <td>姓名</td>
                <td><input type="text" name="name" value="<%=request.getParameter("name")%>" /></td>
            </tr>
            <tr>
                <td>邮箱</td>
                <td><input type="text" name="email" value="<%=request.getParameter("email")%>" /></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>

在这里插入图片描述

7、update_data.jsp页面
<body>
    <%
        Map<String, Emp> map = DBUtil.map;
        Emp emp = map.get(request.getParameter("account"));
        emp.setName(request.getParameter("name"));
        emp.setEmail(request.getParameter("email"));
    %>
    <h3 align="center">修改员工信息成功。</h3>
</body>

在这里插入图片描述

8、error.jsp页面
<body>
    <!---
        1、exception对象只能在错误页面页面中使用,page加入一个属性isErrorPage="true"
        2、有一个页面出现了异常,在页面中指定一个错误处理的页面,page指令当中,errorpage来指定。
     -->
    <%= exception.getMessage() %>
</body>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值