web-jsp基本内容

建议学习,可以通过开发工具试着看源码servlet,这样有助于更深层次的理解

九大内置对象

out、config、page、exception、response、pageContext、request、session、application

1.out

1)介绍:out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据,本质在servlet中是一个输出流;

2)常用方法:println()浏览器打印内容

3)例子:

jsp中

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    out.println("内置对象out");
  %>
  </body>
</html>

运行结果:

servlet中

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//抓获请求地址url(项目名/out)
@WebServlet(value = "/out")
public class OutTest extends HttpServlet {//继承HttpServlet
    
    //从新写service方法
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //HttpServletResponse对象中获取PrintWriter对象,向浏览器打印内容
        PrintWriter out = response.getWriter();
        out.println("浏览器输出PrintWriter");
    }
}

运行结果:

上面存在一个乱码问题,这也是初学者经常初现的问题,下面解决这个乱码问题。

//抓获请求地址url(项目名/out)
@WebServlet(value = "/out")
public class OutTest extends HttpServlet {//继承HttpServlet

    //从新写service方法
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从服务器向浏览器输出,解决中文乱码问题
        response.setCharacterEncoding("utf-8");
        //HttpServletResponse对象中获取PrintWriter对象,向浏览器打印内容
        PrintWriter out = response.getWriter();
        out.println("浏览器输出PrintWriter");
    }
}

2.config(ServletConfig):对应“真身”中的ServletConfig;

3.page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;

4.pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;

5.exception(Throwable):只有在错误页面中可以使用这个对象;

6.request(HttpServletRequest):即HttpServletRequest类的对象;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    //request对象中常用方法
    //向request对象中存入一个底层为map对象,key-value
    request.setAttribute("key","value");
    //获取request中key对应的value值
    Object value = request.getAttribute("key");
    //删除key对应的内容
    request.removeAttribute("key");
    //设置请求编码
    request.setCharacterEncoding("utf-8");
    //获取Cookie对象
    Cookie[] cookies = request.getCookies();
    //请求转发
    request.getRequestDispatcher("/url").forward(request,response);
    //获取session对象
    HttpSession session1 = request.getSession();
    //获取servletContext对象
    ServletContext servletContext = request.getServletContext();
    //获取表单数据
    request.getParameter("name");
  %>
  </body>
</html>
public class RequestTset extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //重定向
        response.sendRedirect("url");
        //转发
        request.getRequestDispatcher("url").forward(request,response);
        
        //request对象中常用方法
        //向request对象中存入一个底层为map对象,key-value
        request.setAttribute("key","value");
        //获取request中key对应的value值
        Object value = request.getAttribute("key");
        //删除key对应的内容
        request.removeAttribute("key");
        //设置请求编码
        request.setCharacterEncoding("utf-8");
        //获取Cookie对象
        Cookie[] cookies = request.getCookies();
        //请求转发
        request.getRequestDispatcher("/url").forward(request,response);
        //获取session对象
        HttpSession session1 = request.getSession();
        //获取servletContext对象
        ServletContext servletContext = request.getServletContext();
        //获取表单数据
        request.getParameter("name");
    }
}

重定向与转发请浏览

7.response(HttpServletResponse):即HttpServletResponse类的对象;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //response对象中常用方法
    response.sendRedirect("url");
    //添加cookie
    response.addCookie(new Cookie("key","value"));
    //获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
    response.getOutputStream();
    //获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
    PrintWriter writer = response.getWriter();
    //设置服务器向客户端的字符编码
    response.setCharacterEncoding("utf-8");
%>
</body>
</html>

public class ResponseTest extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //response对象中常用方法
        response.sendRedirect("url");
        //添加cookie
        response.addCookie(new Cookie("key","value"));
        //获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
        ServletOutputStream outputStream = response.getOutputStream();
        //获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
        PrintWriter writer = response.getWriter();
        //设置服务器向客户端的字符编码
        response.setCharacterEncoding("utf-8");
    }
}

8.application(ServletContext):即ServletContext类的对象;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //application对象中常用方法
    //向application对象中存入一个底层为map对象,key-value
    application.setAttribute("key","value");
    //获取application中key对应的value值
    Object key = application.getAttribute("key");
    //删除application中key对应的值
    application.removeAttribute("key");

%>

</body>
</html>

application消失,关闭服务器。

9.session(HttpSession):即HttpSession类的对象,多次回话,多次请求响应

HTTP协议是一种无状态协议,客户向服务器发出的请求request,然后服务器返回响应response,连接就被关闭了,在服务器不保存连接的有关信息,因此在下一次连接时,服务器已经没有以前的连接信息了,无法判断这一次连接和上一次连接时同一个客户信息,因此,必须使用会话记录有关连接的信息。
从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。
session的工作原理如下:
1、客户首次访问服务器的一个页面时,服务器就会为该用户分配一个session对象,同时为这个session指定唯一的ID,并且将该ID发送到客户端并写入到cookie中,使得客户端与服务器的session建立一一对应的关系;
2、当客户端继续访问服务器端的其它资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
3、当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。
session对象主要用于属性操作和会话管理,常用方法如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //session对象中常用方法
    //设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
    session.setAttribute("key","value");
    //在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
    session.getAttribute("key");
    //删除指定名字的session属性,若该属性不存在,则出现异常。
    session.removeAttribute("key");
    //使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
    session.invalidate();
    //获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
    String id = session.getId();
    //设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
    session.setMaxInactiveInterval(30);
    //获取会话的最大持续时间,使用时候需要一些处理
    session.getMaxInactiveInterval();
%>
</body>
</html>
public class SessionTest extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从request对象获取session对象
        HttpSession session = request.getSession();
        //session对象中常用方法
        //设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
        session.setAttribute("key","value");
        //在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
        session.getAttribute("key");
        //删除指定名字的session属性,若该属性不存在,则出现异常。
        session.removeAttribute("key");
        //使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
        session.invalidate();
        //获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
        String id = session.getId();
        //设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
        session.setMaxInactiveInterval(30);
        //获取会话的最大持续时间,使用时候需要一些处理
        session.getMaxInactiveInterval();
    }
}

session失效的方法请浏览

1)等待超时

2)session.invalidate();消亡

3)关闭浏览器(注意:这里关闭的是整个浏览器,而不是当前的页面)

4)cookie删除sess

5)重启服务器

作用域排行

pageContext(this当前页面)<request<session<application

猜你喜欢

转载自blog.csdn.net/qq_42014192/article/details/88633413
今日推荐