一.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 版权协议,转载请附上原文出处链接和本声明。