jsp的内置对象,作用域和简单介绍servlet

文章目录

1.jsp的9大内置对象(不用创建直接使用)

pageContext,page,页面

request 完成一次请求,response 响应对象

session 一次会话,application 整个服务器,exception 异常,out 输出对象 ,config 配置

2.4大作用域 (存储属性的范围不一样<作用域的范围>)

作用域从小到大的范围:pageContext-----request-------session------application

四大作用域都有以下两个方法:
pageContext.setAttribute(); 或 setAttribute(); 设置属性值的方法
pageContext.getAttribute(); 或 getAttribute(); 获取属性值的方法
  • page

    一个页面,不能直接使用,靠pageContext完成,属性在一个页面有效

    <%--a.jsp--%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%--pageContext设置了三个属性只能在当前页面访问--%>
    <%
        pageContext.setAttribute("msg","正确");
        pageContext.setAttribute("name","张三");
        pageContext.setAttribute("date",new Date());
        %>
    <%--<%--%>
    <%--    String msg=(String)pageContext.getAttribute("msg");--%>
    <%--    String name=(String)pageContext.getAttribute("name");--%>
    <%--    Date date=(Date)pageContext.getAttribute("date");--%>
    <%--%>--%>
    <%--<%=msg%>--%>
    <%--<%=name%>--%>
    <%--<%=date%>--%>
    <%--服务端跳转--%>
    <jsp:forward page="b.jsp">
        
    

    getAttribute();的返回值是Object类型,使用时要向下转型

    <%--b.jsp--%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        String msg=(String)pageContext.getAttribute("msg");
        String name=(String)pageContext.getAttribute("name");
        Date date=(Date)pageContext.getAttribute("date");
    %>
    <%=msg%>
    <%=name%>
    <%=date%>
    <%--运行b.jsp结果为 null null null--%>
    
  • request

    一次请求,属性可以跨(一个)页面传递(有关联的页面),也可以通过多个页面跳转获取

    如:a页面设置值,a页面通过服务端跳转到b页面,b页面通过服务端跳转到c页面,在c页面上书写获取值代码request.getAttribute(),则c页面可以获取到a页面的值,如果b页面没有跳转到c页面,则c页面则不能获取到a页面的值(实际开发中这样的请求转发是没有意义的)。

    在request中客户端跳转获取不到值

    <%--a.jsp--%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        request.setAttribute("msg2","正确2");
        request.setAttribute("name2","张三2");
        request.setAttribute("date2",new Date());
        %>
    <a href="b.jsp">b.jsp</a> <%-- 客户端跳转无法获取到值--%>
    <%--<jsp:forward page="b.jsp"/>--%><%--服务器跳转可以获取到值--%>
    
    <%--b.jsp--%>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        String msg2=(String)request.getAttribute("msg2");
        String name2=(String)request.getAttribute("name2");
        Date date2=(Date)request.getAttribute("date2");
    %>
    <%=msg2%>
    <%=name2%>
    <%=date2%>
    <%--运行b.jsp结果为 null null null--%>
    
  • session

    一次会话,保存一个一个用户的信息,每个用户的信息都是相互独立的。客户端和服务器端跳转均能获取到值。session的销毁时间默认30分钟。

    销毁session的三种方式:1.手动销毁;2.请求超时 默认30分钟;3.关闭浏览器

    1.手动销毁

    <%--a.jsp--%>
    <%
        session.setAttribute("msg3","正确3");
        session.setAttribute("name3","张三3");
        session.setAttribute("date3",new Date());
      %>
    <%--<jsp:forward page="b.jsp"/>--%>
    <a href="b.jsp">在b页面获取值</a>
    
    <%--b.jsp--%>
    <%
        String msg3=(String)session.getAttribute("msg3");
        String name3=(String)session.getAttribute("name3");
        Date date3=(Date)session.getAttribute("date3");
    %>
    <%
        out.print("获取值:");
    %>
    <%=msg3%>
    <%=name3%>
    <%=date3%>
    <%
        out.print("\t\t销毁:");
    %>
    <a href="c1.jsp">手动销毁</a>
    
    <%--c.jsp--%>
    <%
    session.invalidate();//手动销毁
    %>
    <a href="b.jsp">查看销毁后是否可以获取到值</a>
    <%--<jsp:forward page="b.jsp"/>--%>
    

    执行并点击后依次执行结果为:在b页面获取值 =》获取值: 正确3 张三3 Wed Jan 19 21:20:56 CST 2022 销毁: 手动销毁=》查看销毁后是否可以获取到值===》获取值: null null null 销毁: 手动销毁

    销毁后获取不到值

    2.请求超时 默认30分钟;

    找到所使用的Tomcat的安装路径,打开该目录下的conf中的web.xml文件(用记事本打开),找到

    30

    改为想要的默认时间,重新启动服务器即可。

    3.关闭浏览器

  • application

    运行在整个服务器中,服务器不关闭,就一直存在。<数据存储在application中是最耗内存的>(实例与其他三种类似)

**注意:**以上属性值都是存在服务器中,只是在实际开发中遵循一个原则,即:page可以完成请求的则不用request,request可以完成请求的则不用session,session可以完成请求的则不用application ,从而提高服务器的性能

3.服务器端跳转和客户端跳转的区别

服务端跳转:地址栏信息不变

<jsp:forward page="跳转.jsp"/>
<%--如果可能的话代码中的/不要省去,因为我省去了此处代码显示有错误--%>

客户端跳转:会改变地址栏信息

<a href="">跳转.jsp<a>
<script>
window.location.href="跳转.jsp";
</script>

4.Servlet介绍以及使用

Servlet是一个类,运行在服务端,处理客户端的请求和响应。

Servlet的生命周期

​ 1.加载Web容器时,创建Servlet,通过init()初始化操作(只能初始化一次,即、表现:第一次操作Servlet比较慢)
​ 2.通过service()或者doGet()或者doPost()处理客户端的请求
​ 3.通过关闭服务器或者长时间没有发生调用来销毁servlet

创建Servlet:1.初始化<init();>2.处理客户端请求(请求方式:service()服务调度,doGet(),doPost())3.销毁servlet(destroy()方法)

Servlet运行原理图

jsp的内置对象,作用域和简单介绍servlet

@WebServlet("/HelloServlet")//配置servlet
public class HelloServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("创建servlet,完成初始化");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理客户端请求");
    }

    @Override
    public void destroy() {
        System.out.println("销毁servlet");
    }
}
/*执行页面,在地址栏追加“/HelloServlet”,访问后在代码的控制台可以看到输出“创建servlet,完成初始化
处理客户端请求”
*/
上一篇:NewOJ 题解 [newoj-1250-[蓝桥杯2015初赛]方程整数解] (Python)


下一篇:多个list合成一个dataframe