Servlet 学习笔记

request对象学习:
作用:request对象中封存了当前请求的所有请求信息
使用:
获取请求头数据
req.getMethod();//获取请求方式
req.getRequestURL();//获取请求URL信息
req.getTequestURI();//获取请求URI信息
req.getScheme();//获取协议
获取请求行数据
req.getHeader(“键名”);//返回指定的请求头信息
req.getHeaderNames();//返回请求头的键名的枚举集合
获取用户数据
req.getParameter(“键名”);//返回指定的用户数据
req.getParameterValues(“键名”);//返回同键不同值的请求数据(多选),返回的数组。
req.getParameterNames()//返回所有用户请求数据的枚举集合
注意:
如果要获取的请求数据不存在,不会报错,返回null。
注意:
request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法

Respone对象学习:
作用:
用来响应数据到浏览器的一个对象
使用;
设置响应头
setHeader(String name,String value);//响应头中添加响应信息,但是同键会覆盖
addHeader(String name,String value);//在响应头中添加响应信息,但是不会覆盖。
设置响应状态
sendError(int num,String msg);//自定义响应状态码。
设置响应实体
resp.getWrite().write(String str);//响应具体的数据给浏览器
设置响应编码格式:
resp.setContentType(“text/html;charset=utf-8”);
总结:
Service请求处理代码流程:
设置响应编码格式
获取请求数据
处理请求数据
数据库操作(MVC思想)
响应处理结果

请求中文乱码问题解决:
1、使用String进行重新编码
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);
2、使用公共配置:
get方式:
步骤一:req.setCharacterEncoding(“utf-8”);
步骤二:
在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性userBodyEncodingForURI=“true”;
post方式:
req.setCharcterEncoding(“utf-8”);

Servlet流程总结;
浏览器发起请求到服务器(请求)
服务器接受浏览器的请求,进行解析,创建request对象存储请求数据
服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
servlet的方法执行进行请求处理
//设置请求编码格式
//设置响应编码格式
//处理请求信息
//处理请求信息
//创建业务层对象
//调用业务层对象
//响应处理结果

请求转发学习:
作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
使用:
req.getRequestDispatcher(“要转发的地址”).forward(req,resp);
地址:相对路径,直接书写servlet的别名即可。
特点:
一次请求,浏览器地址栏信息不改变。
注意:
请求转发后直接return结束即可。
request作用域:
解决了一次请求内的servlet的数据共享问题
重定向:
解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
使用:
resp.sendRedirect(String uri);
示例:
resp.sendRedirect("/login/main");
特点:
两次请求,两个request对象。
浏览器地址栏信息改变
时机:
如果请求中有表单数据,二数据又比较重要,不能重复提交,建议使用重定向。
如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的資源。
Cookie学习:
作用:解决了发送的不同请求数据共享问题
使用:
//创建Cookie对象
Cookie c=new Cookie(String name,String value);
//设置Cookie(可选)
//设置有效期
c.setMaxAge(int seconds);
//设置有效路径
c.setPath(String uri);
//响应Cookie信息给客户端
resp.addCookie©;
Cookie的获取
//获取Cookie信息数组
Cookie[] cks=req.getCookies();
//遍历数组获取Cookie信息
使用for循环遍历即可,示例:
if(cks!=null){
for(Cookie c:cks){
String name=c.getName();
String value=c.getValue();
System.out.println(name+":"+value);
}
}
注意:
一个Cookie对象存储一条数据。多条数据,可以多创建几个Cookie对象进行存储。
特点:
浏览器端的数据存储技术。
存储的数据声明在服务器。
临时存储:存储在浏览器的运行内存中,浏览器关闭即失效。
定时存储:设置了Cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息。

session技术学习:
问题:
一个用户的不同请求处理的数据共享怎么办?
解决:
使用session技术
原理:
用户第一次访问服务器,服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到共享的数据
特点:
存储在服务器端
服务器进行创建
依赖Cookie技术
一次会话
默认存储时间是30分钟
作用:
解决了一个用户不同请求处理的数据共享问题
使用:
创建session对象/获取session对象
HttpSession hs=req.getSession();
如果请求拥有session的标识符也就是JSWSSIONID,则返回其对应的session队形
如果请求拥有session的标识符也就是JSWSSIONID,则创建新的session对象,并将其JSESSIONID作为从cookie数据存储到浏览器中
如果session对象是失效了,也会重新创建一个session对象,并将其JSESSIONID存储咋浏览器内存中。
设置session存储时间
hs.setMaxInactiveInterval(int seconds);
注意:
在指定的时间内session对象没有被使用则销毁,如果使用则重写计时。
设置session强制失效
hs.invalidate();
存储和获取数据
存储:hs.setAttribute(String name,Object value);
获取:hs.getAttribute(String name)返回的数据类型为Object
注意:
存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。
使用时机:
一般用户在登陆web项目时会将用户的个人信息存储到Session中,供该用户的其他请求使用。
总结:
session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下。
用户的任意请求在处理时都能获取到同一个session对象。
作用域:
一次会话
在JSESSIONID和SESSION对象不失效的情况下为整个项目内。
session失效处理:
将用户请求中的JSESSIONID和后台获取到的SESSION对象的JSESSIONID进行比对,如果一致,则session没有失效,如果不一致则证明session失效了。
注意:
JSEESIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。

ServletContext对象学习:
问题:
不同用户使用相同的数据
解决:
ServletContext对象
特点:
服务器创建
用户共享
作用域:
整个项目内
生命周期:
服务器启动到服务器关闭
使用:
获取ServletContext对象
//第一种方式:
ServletContext sc=this.getServletContext();
//第二种方式:
ServletContext sc2=this.getServletConfig().getServletContext();
//第三种方式
ServletContext sc3=req.getSession().getServletContext();
使用ServletContext对象完成数据共享
//数据存储
sc.setAttribute(String name,Object value);
//数据获取
sc.getAttribute(“str”)返回的是Object类型
注意:
不同的用户可以给ServletContext对象进行数据存取
获取的数据不存在返回null。
获取项目中web.xml文件中的全局配置数据
sc.getInitParameter(String name);根据键的名字返回web.xml中配置的全局数据的值,返回String类型。如果数据不存在返回null。
sc.getInitParameterNames();返回键名的枚举
配置方式:注意一组标签只能存储一组键值对数据,多组可以声明多个进行存储。

name
zhangsan

作用:将静态数据和代码进行解耦。
获取项目webroot下的資源的绝对路径。
String path =sc.getRealPath(String path);
获取的路径为项目根目录,path参数为项目根目录中的路径
获取webroot下的資源的流对象
InputSteam is=sc.getResourceAsSteam(String path);
注意:
此种方式只能获取项目根目录下的資源流对象,class文件的流对象需要使用类加载器获取。
ServletConfig对象学习:
问题:
如何获取在web.xml中给每个servlet单独配置的数据呢?
解决:
使用ServletConfig对象
使用:
获取ServletConfig对象
获取web.xml的配置数据

JSP的三种注释:
前端语言注释:
会被转译,也会被发送,但是不会被浏览器执行
java语言注释
会被转译,但是不会被servlet执行
jsp注释:
不会转译
Jsp的page指令学习
<%@page 属性名=“属性值” 属性名=“属性值”%。。>
language:声明jsp要被转译的语言。
import:声明转译的java文件要导入的包,不同的包使用逗号隔开。
pageEncoding:设置jsp文件的数据编码格式。
contentType=“text/html”;charset=utf-8" 设置jsp数据响应给浏览器时,浏览器的解析和编码格式。
session:设置转译的servlet中是否开启session支持,默认开启,true表示开启。false表示关闭。
errorPage:设置jsp运行错误跳转的页面。
extends:设置jsp转译的java文件要继承的父类(包名+类名)。
作用:
配置jsp文件的转译相关的参数。
Jsp的局部
局部代码块中声明的java代码会被原样转译jsp对应的servlet文件_JspService方法中代码块中声明的变量都是局部变量。
使用:<% java代码%>
缺点:
使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困难。
开发:
servlet进行请求逻辑处理,使用jsp进行页面展现。

jsp静态引入和动态引入
Jsp的脚本段语句:
特点:帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器。
使用:<%=变量名或者方法%>
注意:不要在变量名或者方法后使用分号。
位置:除jsp语法要求以外的任意位置。
Jsp的静态引入和动态引入:
静态引入:
<%@include file=“要引入的jsp文件的相对路径”%>
特点:
会将引入的jsp文件和当前jsp文件转译成一个java(Servlet)文件使用。在网页中也就显示了合并后的显示效果。
注意:
静态引入的jsp文件不会单独转译成java(Servlet)文件。
当前文件和静态引入的jsp文件中不能够使用java代码块声明同名变量。
动态引入:
<jsp:include page=“要引入的jsp文件的相对路径”></jsp:include>
特点:
会将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。在网页中显示合并后的相识效果。
注意:
动态引入允许文件中声明同名变量。
优点:
降低jsp代码的冗余,便于维护升级。
jsp的转发标签forward:
使用:
<jsp:forward page=“要转发的jsp文件的相对路径”></jsp:forward>
特点:
一次请求
地址栏信息不改变。
注意:
在转发标签的两个标签中间除了写<jsp:param name=“str” value=“aaa”/>子标签不会报错,其他任意字符都会报错。
<jsp:param name=“str” value=“aaa”/>
name属性为附带的数据的键名
value为附带的数据内容
注意:会将数据以?的形式拼接在转发路径的后面。
Jsp的九大内置对象:
内置对象:
jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象。我们jsp页面中直接使用即可。
注意:
内置对象在jsp页面中使用,使用局部代码块或者脚本段语句来使用,不能够在代码块中使用。
内容:九个对象
pageContext:页面上下文对象,封存了其他内置对象。封存了当前jsp的运行信息。
注意:每个jsp文件单独拥有一个pageContext对象。
作用域:当前页面。
request:封存当前请求数据的对象。由tomcat服务器创建。一次请求
session:此对象用来存储用户的不同请求的共享数据的。一次会话
application:也就是ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。项目内
response:响应对象,用来响应请求处理结果给浏览器的对象。设置响应头,重定向。
out:响应对象,Jsp内部使用。带有缓冲区的响应对象,效率高于response对象。
page:代表当前Jsp的对象。相当于java中的this。
exception:异常对象。存储了当前运行的异常信息。
注意:使用此对象需要在page指定中使用属性isErrorPage=“true"开启。
config:也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取。
四个作用域对象:
pageContext:当前页面。解决了在当前页面内的数据共享问题。
request:一次请求。一次请求的servlet的数据共享。
session:一次会话。一个用户的不同请求的数据共享。
application:项目内。不同用户的数据共享问题
作用:
数据流转
Jsp的路径:
在jsp中资源路径可以使用相对路径完成跳转,但是:
问题一:
资源的位置不可随意更改。
问题二:
需要使用。。/进行文件夹的跳出。使用比较麻烦。
使用绝对路径:(必须会)
/虚拟项目名/资源名
例如:
jspPro.jsp
a.jsp

注意:在jsp中资源的第一个/表示的是服务器根目录,相当于:localhost:8080
使用jsp中自带的全局路径声明:
<%
String path=requesst.getContextPath();
String basePath=request.getScheme()+”😕/"+request.getServerName()+":";
%>

作用: 给资源前面添加项目路径: http://127.0.0.1:8080/虚拟项目名/

Servlet重定向路径总结:
相对路径:从 当前请求的路径查找资源的路径
相对路径如果servlet的别名中包含目录,会造成重定向资源查找失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值