JSP与Servlet的职责与区别
JSP 与 Servlet
运行在服务器端的一个应用程序
1. Servlet与JSP的职责(☆)
- Servlet职责:用来接收并处理用户的请求,设置字符编码、收集表单参数、调用Dao层、跳转JSP页面
- JSP的职责:负责数据的展现
2. Servlet跳转JSP页面(☆)
Servlet跳转JSP页面有两种方式,分别如下:
- 转发:转发是Web服务器(Tomcat)内部控制权的转让,用户发送请求到Servlet,Servlet处理好请求后把内容转移到JSP页面上,给用户浏览后,完成整个请求。代码如下:
request.getRequestDispatcher("页面路径").forward(request,response);
- 重定向:重定向是根据业务逻辑判断,发送一个状态码给浏览器,让浏览器重新请求一个新的地址,所以浏览器地址会发生改变,重定向可以防止表单的重复提交。代码如下:
response.sendRedirect("页面路径");
3. JSP中传递对象(☆)
JSP中传递对象有四个,并且是JSP内置对象,分别如下:
对象 | 范围 |
---|---|
pageContext | 本页面有效 |
request | 下一个页面有效 |
session | 整个网页会话有效(一个浏览器) |
application | 整个应用项目有效(一个Web服务器) |
4. 转发与重定向的区别(☆)
转发 | 重定向 |
---|---|
转发是服务器内部控制权的转让,多个页面之间传递,使用一个request | 重定向是告知浏览器重新发送一个请求,实现多个页面之间的跳转,使用两个request |
转发只用了一个request,所以浏览器地址不会改变,显示最初请求的地址 | 重定向使用了两个request,浏览器地址显示最后一次请求的地址 |
转发只能在项目内部跳转 | 重定向可以跳转到项目外部 |
转发传递参数:request、session、application三个对象进行传递,可以传递对象 | 重定向传递参数只能通过URL传参(?形式),并且只能传递字符串 |
转发后地址刷新网页会重复提交表单 | 重定向后地址刷新网页不会重复提交表单 |
转发的效率高于重定向 |
5. Request
Request代表用户的请求,常用方法:
方法 | 描述 |
---|---|
setCharacterEncoding("UTF-8") | 设置字符编码 |
setAttbute(key, value) | 把对象存入到request中 |
getAttribute(key) | 在request中获取指定的对象,到下个页面有效 |
getParameter("表单的name属性") | 获取表单参数 |
getRequestDispatcher("跳转路径") | 转发路径 |
getParameterValues("表单的name属性") | 表单参数存在多个值,使用此方法,比如:复选框 |
getRequestURL() | 获取访问的绝对路径 |
getRequestURI() | 获取访问的相对路径 |
getQueryString() | 获取访问的参数字符串 |
getServerName() | 获取项目的机器名(IP地址) |
getServerPort() | 获取访问端口 |
getContentPath() | 获取项目名称 |
getParameterMap() | 获取表单所有参数 |
6. Get与Post区别
- Get方式:
- get提交会在浏览器地址显示参数,不安全
- get提交字符编码与Tomcat有关(request、tomcat、网页字符编码)
- get提交参数长度有限制
- Post方式:
- post提交不会在浏览器地址显示参数,安全
- post提交字符编码与Tomcat无关(request、网页字符编码)
- post提交参数没有限制
Form表单:默认为Get方式
浏览器直接访问:Get方式
JS页面跳转:window.location.href="";
Get方式
7. JSP与Servlet区别(☆)
-
相同点:
- JSP就是Servlet,是一个简易的Servlet,都可以用来处理用户请求
-
不同点:
- Servlet是一个类,用来处理用户请求,做业务逻辑的处理
- JSP是一个页面,用来呈现数据给用户
- Servlet侧重于业务逻辑处理
- JSP侧重于页面展现
8. 九大内置对象对应的类或接口
对象 | 超类 | 描述 |
---|---|---|
page | java.lang.Object | 当前网页对象 |
pageContext | javax.servlet.jsp.PageContext | 网页的上下文内容 |
request | javax.servlet.http.HttpServletRequest | 当前的请求对象 |
response | javax.servlet.http.HttpServletReponse | 响应请求的对象 |
session | javax.servlet.http.HttpSession | 网页会话 |
application | javax.servlet.ServletContext | 当前应用对象 |
config | javax.servlet.ServletConfig | 获取配置信息对象 |
out | servlet.jsp.JspWriter | 网页输出对象 |
exceprion | java.lang.Throwable | 网页异常对象 |
9. Session
9.1 什么是Session?
Session是一次网页会话,一个浏览器与服务器的一次通话,包括浏览器与服务器之间的多次跳转
9.2 Session作用(☆)
Session用来存储用户信息,一个用户对应一个Session,Session与Session之间是独立的,不会共享数据。
同一个浏览器同一个服务器不能登录多个用户
9.3 常用方法
方法 | 描述 |
---|---|
request.getSession() | 获取session |
setAttribute(key, value) | 把对象存入session中 |
getAttribute(key) | 从session中获取对象 |
removeAttribute(key) | 根据key值删除session中的对象 |
setMaxInactiveInterval(int second) | 设置session的时长,单位为秒 |
getMaxInactiveInterval() | 获取session的时长,单位为秒 |
getId() | 获取session的唯一标识 |
invalidate() | 把session置成无效,清除session中的所有对象 |
9.4 Session的生命周期(☆)
Session存储的数据放在服务器端的内存中
- 诞生
- 第一次访问服务器时,产生一个session
- 销毁
- 关闭浏览器
- 超时
- 手动把session置成对象,调用invalidate()方法
9.5 设置Session的时长
- 在Tomcat下修改web.xml文件中的Session时长,影响整个Tomcat下所有项目的Session时长
- 修改项目中web.xml文件中的Session时长,只影响本项目中Session的时长
- 在Sevlet中设置Session时长(session.setMaxInactiveInterval(10);),经过此Servlet就会影响Session的时长
10. Application
10.1 什么是Application?
Application对象类似于系统的全局变量,用户与用户之间可以共享数据
10.2 Application的生命周期
- 诞生
- Tomcat启动时会产生一个Application对象,并且只有一个,一个项目一个Application对象
- 销毁
- Tomcat关闭时回收Application对象
10.3 Application的常用方法
方法 | 描述 |
---|---|
session.getServletContext() | 获取Application |
request.getServletContext() | |
this.getServletContext() | |
setAttribute(key, value) | 把对象存入Application中 |
getAttribute(key) | 从Application中获取对象 |
getInitParameter(参数的key值) | 获取web.xml中全局参数 |
11. Config
11.1 什么是Config对象?
Config对象是获取Servlet或者JSP的配置信息
11.2 Config的常用方法
方法 | 描述 |
---|---|
getInitParameter(参数的key值) | 获取Servlet中初始化参数 |
12. JSP内嵌入JSP
12.1 在JSP页面中可以嵌入另一个JSP,有两种方式:
-
静态嵌入
- 把JSP页面内容嵌入到另一个JSP中,产生一个Servlet,上下文内容能关联,称为静态嵌入
<%@ include file="页面路径" %>
- 把JSP页面内容嵌入到另一个JSP中,产生一个Servlet,上下文内容能关联,称为静态嵌入
-
动态嵌入
- 嵌入的JSP与主JSP各自编译,产生两个Servlet,上下文内容不能关联,称为动态嵌入
<jsp:include page="页面路径"></jsp:include>
- 嵌入的JSP与主JSP各自编译,产生两个Servlet,上下文内容不能关联,称为动态嵌入
12.2 静态嵌入与动态嵌入的区别(☆)
静态嵌入 | 动态嵌入 |
---|---|
静态嵌入使用的是JSP的标签指令<%@ include file="页面路径"%> |
动态嵌入使用的是JSP动作<jsp:include page="页面路径"></jsp:include> |
静态嵌入使用一个Servlet | 动态嵌入使用两个Servlet |
静态嵌入上下文内容能关联 | 动态嵌入上下文内容不能关联 |
13. Cookie
13.1 什么是Cookie?
Cookie是Web服务器在客户端保存的一系列的文本文件,存储客户端有一定的时间周期,周期过了会失效
13.2 创建Cookie
13.2.1 创建Cookie对象
Cookie cookie = new Cookie(name, value);
13.2.2 设置生命周期,单位:秒
cookie.setMaxAge(int second);
13.2.3 写入Cookie
response.addCookie(cookie)
13.2.4 读取
String egg = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("egg")) {
egg = URLDecoder.decode(cookie.getValue(),"UTF-8");
}
}
}
13.3 Cookie的优缺点
优点 | 缺点 |
---|---|
Cookie信息存储在客户端电脑的硬盘中,可以减轻服务器压力 | Cookie信息透明存储在客户端,信息容易被泄漏,安全性较差 |
Cookie可以用来提高用户体验度 | 信息存储在客户端,由浏览器管理,容易被用户删除 |
注:可有可无的数据存储在Cookie中,用来提高用户的体验度,比如:登录时记住用户名 |
13.4 Cookie文件的特点
- 文件的后缀名一般都是txt
- Cookie存储的信息都是文本信息
- Cookie文件大小不会超过20KB
- Cookie文件由浏览器管理
- Cookie文件有生命周期,超过时间会失效
13.5 Cookie与Session的区别(☆)
Cookie | Session |
---|---|
Cookie信息存储在客户端的硬盘中 | Session信息存储在服务器的内存中 |
Cookie只能保存文本(String) | Session可以保存对象 |
Cookie超出有效时间内才会失效 | Session随着会话关闭而消失 |
Cookie一般保存不重要信息,用来提高用户体验度 | Session一般保存重要信息,不可以丢失的信息 |
Cookie不是JSP内存对象,需要手动new | Session是JSP九大内置对象 |
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/java-13.html