servlet的四大作用域和常见问题

  • Post author:
  • Post category:其他




一.servlet的四大作用域

  • 作用域:在web项目中用来存放数据的容器,也是Java类 。


对作用域的操作:

  • 创建作用域对象
  • 给作用域中存值(setAttribute)
  • 获取作用域中的值(getAttribute)



1.pagecontext/page(数据只在当前页面有效)



2.request(在一次请求有效)

  • 请求转发:一次请求;
  • 客户端发送请求,tomcat响应一个数据;
  • http://localhost:8080/ServletDemo01/setScopeServlet请求——空页面就是响应了。

    在这里插入图片描述
  • 结果

    在这里插入图片描述
  • 使用请求转发

    在这里插入图片描述



3.session( 一次会话表示浏览器的开启和关闭)

  • session作用域,默认时效时间是30分钟。

  • 同一个浏览器开启到彻底关闭期间有效。
  • 用谷歌先访问setScopeServlet,只要不彻底关闭谷歌浏览器;session 对象一直存在,数据一直存在; 如果这个时候使用火狐访问getScopeServlet,无法获取到数据;因为一台电脑的一个浏览器会创建一个session。
  • session在一个浏览器彻底关闭的时候,销毁一个session。


代码


在这里插入图片描述

  • 第一次使用谷歌请求

    在这里插入图片描述
  • 使用同一个服务器(在这里也就是谷歌),并且在没有彻底关闭之前的谷歌

    在这里插入图片描述
  • 彻底关闭谷歌,再打开一个新谷歌

    在这里插入图片描述
  • 谷歌不关,服务器不关,创建新的session对象
  • 在这里插入图片描述



4.application/servletcontext(服务器的一次开启和关闭)

  • 服务开启期间,可以在任意的地方获取到,服务器关闭掉作用域才销毁。
  • 作用域可以理解为Java中的数组、集合,也就是内存容器。
  • 各自的作用域必须明白, 作用域在web程序中最大的作用就是用来进行动态页面数据传输的,servlet与servlet之间的数据传输的。



二.servlet常见问题



1.程序报错

  • 500程序内部错误,访问servlet的时候程序代码出错,必须修改代码.


    System.out.println(1/0);

    在这里插入图片描述

  • 404未找到页面,请求的servlet 还是 html,未找到对应的资源的时候

    在这里插入图片描述

    ==如果程序已经发布,给客户报404或者500的错误,客户的体验度将会大大降低。



2.解决问题

  • 500错误,可以在可能出现错误的地方进行处理

在这里插入图片描述

  • 404错误或者其他错误,在web.xml文件中进行配置, 当发生什么问题的时候,找一个对应的servlet 。

    在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ErrorServlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
   <!-- 根据状态码配置  -->
    <error-page>
       <error-code>404</error-code>
       <location>/tryCatchServlet</location>
    </error-page>
    
    <!-- 安装异常对象来配置 -->
    <error-page>
         <exception-type>java.lang.ArithmeticException</exception-type>
         <location>/tryCatchServlet</location>
     </error-page>
  
</web-app>
  • 当浏览器发送请求到服务器的时候,服务器首先加载web.xml配置文件,请求报错404或500,web.xml中已经配置过对应的错误的处理方法;当报错之后会根据报错的状态码或者报错的对象,去寻找对应的servlet,将响应重新定位到一个专用页面,这样可以很好的提供用户的体验度。


在只有servlet的时候尽量使用web.xml中进行配置 ,一次配置多次使用。



3.session和cookie的区别

  • session:本次操作并没有创建cookie,浏览器会自动创建cookie,用来保存session对象,session作用在一次会话中。

    在这里插入图片描述
//设置session的时间
session.setMaxInactiveInterval(50);

在这里插入图片描述


数据保存

  • session数据保存在服务器上(安全)
  • cookie保存在客户端(不安全)



3.1session的简单实例:统计用户访问数量.

public class SetSessionServlet extends HttpServlet {
	//全局统计
	int  count=0;
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 创建作用域对象,request直接使用
		HttpSession session = request.getSession();// 创建session对象
		if(session.isNew()) {
			count++;
			System.out.println("有新用户访问了,当前用户数量是:"+count);
		}
		
	}



4.将eclipse中的项目单独部署到tomcat中

  • 也就是将hbuilder中的web项目部署到tomcat中。


步骤

  • 将hbuilder中的项目复制到tomcat的webapps文件夹下,启动项目,输入localhost:8080/项目名字/html页面
  • webapps文件的位置可以修改

    在这里插入图片描述
  • 在eclipse中创建动态web项目,部署到单独的tomcat中,不能直接粘贴复制


步骤:

  • 将项目打成war包, 将该war文件拷贝tomcat的appbase目录下,启动tomcat,会自动将war进行解压 访问页面.

在这里插入图片描述

  • 启动之后

    在这里插入图片描述
  • 生成的文件,没有src资源文件,有的是编译后的class文件,该文件放在WEB-INF下

    在这里插入图片描述
  • 文件图片展示

    在这里插入图片描述

在这里插入图片描述

  • 动态web项目在运行的时候,是通过浏览器发送请求,tomcat服务器根据url去找对应的class文件的servlet(因为servlet本身就是一个Java类,只要是Java,在运行的时候用的都是编译后的class文件);servlet在去加载其他操作类的class文件。

  • 一个电脑中不能同时启动两个tomcat服务器(端口不同也不可以)可以使用多个虚拟机,每个虚拟机安装一个tomcat。
  • 页面发送请求到servlet:逻辑控制(数据数据),数据显示(响应新页面)

  • servlet显示数据到页面中是以 io流的形式:Httpservletresponse ——printwriter—–wirte()
  • 根据响应设置响应类型:text/html,text/plain或者其他类型MIME
  • 如果响应类型浏览器能够直接识别就显示,否则就会下载



版权声明:本文为serendipity_xr原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。