在jsp帮你创建好的对象名,而这些对象无需自己在实例化。通过该对象名可以调用相应的类方法。
1. out对象---作用:用来输出信息到浏览器。常见的方法: print();
2. request对象--作用:请求对象。 常见的方法:getParameter(); setCharacterEncoding("") , getSession():获取session对象。3. session对象-->作用:表示一次会话 同一个用户共享存储在session中的数据。 常见的方法:setAttribute(key,value) getAttribute(key); removeAttribute(key), invalidate();使当前session无效
4. response响应对象-->常用的方法: sendRedirect(). getWriter():获取out对象。
5.pageContext对象:表示当前页面对象。它可以共享当前页面的数据。可以获取其他8个内置对象。
6.application对象: 所有用户共享该对象存储的数据。
7.page对象: 表示当前页面的对象 this.
8.config对象: 用于获取servlet的配置信息。
9.exception对象: 异常对象。 如果该对象想使用必须网页是一个异常页面
exception: 必须放在错误页面。
设置默认的错误页面:
在不同的对象中存储的数据,作用的范围不同。
1. pageContext: 可以存储数据,作用范围是当前页面有效。
2. request: 可以存储数据,作用范围是同一个请求有效。---请求转发跳转
3. session: 可以存储数据, 作用范围是同一个会话有效。---用户信息
4. application: 可以存储数据,作用范围是同一个应用。以后就把数据保存到application中,打错特错 因为保存的时间越长占用的资源越长。
理解修饰符public protected 默认 private
有效期越长占用资源越多。 总结: 除了登录放在session中,其他放入request对象【注意:转发跳转】
通过el表达式获取四个作用域对象中保存的指定内容。${key} 如果没有指定范围 默认从小到大扫描。如果找到匹配的key则终止扫描。
${pageScope|requestScope|sessionScope|applicationScope .key}
重定向: response.sendRedirect("重定向的路径");
请求转发: request.getRequestDispatcher("转发的路径") ;获取转发对象。
request.getRequestDispatcher("转发的路径").forward(request,response);转发
1. 重定向地址栏会发生改变,而且会产生新的请求对象。无法获取request保存的数据。
2. 请求转发地址栏不会发生改变,而且用的是同一个请求对象。可以获取request保存的数据。
表示一次会话。------凡是在会话中存放的数据只要会话不结束,里面存放的数据会一致存在。
默认登录成功后,把登录者的信息显示在每一个网页。
session会话对象中可以存放一些对象。 session会话中数据的周期,按照session会话的周期来走。----只要浏览器或者服务不重启。
session.setAttribute(key,value); 往session会话中存放数据
session.getAttribute(key); //从session会话中获取指定的数据。
session.removeAttribute(key);//清除session会话中指定的数据。
session.invalidate();//作废整个session会话。主页只能在登录后才能访问。---->并显示登录者的信息。
保存周期越长,占用的资源时间也就越长。 一般我们在开发时大部分数据习惯保存到request对象中。 只要少量的数据保存到session会话中。比如登录时用户的信息保存到session会话中 。
EL表达式-->作用: 获取四大域对象中数据。
语法: ${xxxScope.key}
我们原来通过xxx.getAttribute(key)也可以获取到四大域中的数据,为什么还要使用EL表达式,因为EL表达式语法更加简洁。而且后期可以与我们的jstl标签库一起使用。如果EL表达式没有找到对于的key,则返回空字符串 "".
EL表达式属于jsp或者后面讲解thymeleaf的语法
<%--
Created by IntelliJ IDEA.
User: ykq
Date: 2022/5/16
Time: 14:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
//往四大域存储数据
pageContext.setAttribute("name","pageContext的内容");
request.setAttribute("name","request的内容");
session.setAttribute("name","session的内容");
application.setAttribute("name","application的内容");
%>
通过getAttribute()获取四大域对象的内容
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>
通过el表达式获取四大域对象的内容
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
el表达式 还可以省略scope ${key} 那么它会从哪个对象中获取数据。默认从pageContext扫描有没有对于的key,如果有则不继续往下扫描了,如果没有则继续往下扫描request, 以此类推。
不指定范围
${name}
${name}
${name}
${name}
里面提供了一些常用的标签---比如: 循环标签 判断标签。
使用这些标签的作用是为了减少jsp中java脚本代码的添加。 企业不建议大家在jsp中使用太多的<%%> 这样会使得网页比较乱。 这时就有人提供了JSTL标签库。
如何使用jstl标签库:
(1)web工程中引入jstl标签库的依赖
(2)在使用jstl标签的jsp网页上引入该标签库
<%--jsp网页的头部引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)使用
<%@ page import="com.ykq.entity.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: ykq
Date: 2022/5/16
Time: 15:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--jsp网页的头部引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Title
<%
//这里保存数据的目标就是为了操作方便。这些数据都是从数据库中查询。
List list=new ArrayList<>();
list.add(new User(1,"张胜男","北京",25,0));
list.add(new User(2,"李四","杭州",35,1));
list.add(new User(3,"王五","上海",15,1));
list.add(new User(4,"赵六","郑州",55,1));
request.setAttribute("users",list);//把集合保存到request对象中了。
%>
编号
姓名
地址
年龄
性别
<%--
if: 条件判断
test:表示条件。如果条件成立则if语句块被执行。
--%>
${u.id}
${u.name}
${u.address}
${u.age}
男
女
就是java类代码。它可以介绍前端页面传递的数据,同时也可以把后端查询的结果响应给前端,以供前端能把数据展示到jsp网页。
(0) 引入servlet-api.jar包
(1) 创建一个类并继承HttpServlet父类。
public class HelloServlet extends HttpServlet {
}
(2) 重写HttpServlet中service方法。---进行业务处理的。
//可以接受前端传递的参数 也可以把后端查询的数据保存并让前端获取
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
(3) 把自定义servlet配置到web.xml文件中.
helloServlet
com.ykq.servlet.HelloServlet
helloServlet
/hello
测试:
跟之前的登录一样,无非把处理页面 换为 servlet 然后配置web.xml