域名备案时网站名字百度广告联盟平台官网

谢谢观赏
QQ:1563166974
Servlet请求转发的介绍:
请求转发: 问题: 服务器在接收到浏览器的请求后,仅仅使用一个 Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码冗 余,Servlet 的职责不明确。解决: 使用请求转发。 特点: 一次请求地址栏信息不改变。

Request 对象作用域 :
问题:使用请求转发后,不同的Servlet之间怎么进行数据的共享呢?
或者说数据怎么从一个servlet流转给另外一个Servlet呢?
解决:
使用 request 对象的作用域 使用:
request.setAttribute(object name,Object value); request.getAttribute(Object obj)
作用:
解决了一次请求内的不同 Servlet 的数据(请求数据+其他数 据)共享问题。
作用域:
基于请求转发,一次请求中的所有 Servlet 共享。
注意:
使用 Request 对象进行数据流转,数据只在一次请求内有效。
特点:
服务器创建:每次请求都会创建生命周期一次请求
重定向 :
问题:
如果当前的请求,Servlet 无法进行处理怎么办? 如果使用请求转发,造成表单数据重复提交怎么办? 解决: 使用重定向
使用:
response.sendRedirect(“路径”). 本地路径为:uri 网络路径为:定向资源的 URL 信息
特点: 两次请求
浏览器地址栏信息改变,避免表单重复提交 !
Cookie的学习:

package cn.msk.Servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Myservlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//请求编码格式req.setCharacterEncoding("utf-8");//请求响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息String a=req.getParameter("a");String b=req.getParameter("b");//处理请求信息System.out.println(a+":"+b);//响应处理结果//创建cookie数据Cookie c=new Cookie("b", b);//设置cookie的信息 c.setMaxAge(3600*24*3);//设置cookie的有效期,如果不设置,cookie存储位置为浏览器,伴随着浏览器的关闭而销毁!//设置了有效期,cookie则会存储在客户端的磁盘里,随着时间的到期销毁!//设置有效路径(作用:防止每一次执行都伴随着cookie影响运行的传输效率,所以设置某些时候运行带,有些时候运行不带cookie)c.setPath("/cookie/ser2");//这行代码的意思是:只有运行ser2时,才伴随cookie!//响应cookie数据resp.addCookie(c);//直接响应resp.getWriter().write("我是Myservlet,处理完毕!");//请求转发//重定向}
}
package cn.msk.Servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Myservlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求编码格式req.setCharacterEncoding("utf-8");//请求响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息//获取cookiesString bc=null;Cookie[] cookies=req.getCookies();for (Cookie ck : cookies) {if("b".equals(ck.getName())){bc=ck.getValue(); }}String b=req.getParameter("b");String c=req.getParameter("c");//处理请求信息System.out.println(b+":"+c);//响应处理结果//直接响应resp.getWriter().write("我是Myservlet2,处理完毕!");//请求转发//重定向}
}
cookie的介绍和特点和作用:
为什么需要cookie:
不同的请求使用相同的请求数据,但是只要请求结束,数据就会被销毁,
其他的请求需要将公共数据重写书写发送!解决:使用cookie技术
cookie的特点:
浏览器端的数据存储技术,但相对应的数据由服务器决定,在服务器上面进行声明,
以响应的方式告诉浏览器进行存储,不适合大量的存储!
Session的学习:
问题:
用户不同的请求在处理的时候需要使用其他请求中的数据怎么办!
解决:
session技术。
使用流程:
创建session对象
HttpSession session=req.getSession();存储数据到session中:
session.setAttribute(String name, object value);获取session对象;
HttpSession session=req.getSession();获取session中的数据;
session.getAttribute(String name);注意:返回的是Object类型,需要强制转型!删除session中的数据;
session.removeAttribute(String name);注意:有数据则删除,没有则什么都不做!
流程:
1.浏览器发送请求到Aservlet,在Aservlet使用req.getSession()获取session对象,如果此次请求中没有SessionID
则重新创建一个session对象,如果有则将其相对应的session对象返回
(前提是该session对象有效期没有到期,如果其到期被销毁了,就算有sessionID,也会创建一个新的session对象)!
2.校验session是否失效,存储数据到session中,或者获取session中的数据,或者删除session中的数据!
特点:
session解决了同一个用户不同请求的数据共享问题!
Session的作用域:
一个会话,浏览器不关闭,session还存在有效期,同一个用户获取到的就是同一个sessionid数据!
对session的理解:
有些时候是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。
这些时候,就需要去记录客户端的连接状态,识别请求的状态等。
所以为了解决类似的事情,就需要使用到了 Cookie 和 Session。
比如,使用Cookie的场景:有些网站有记住用户名的功能,当你勾这个的时候,下次进入该网站时,就会保存上一次登录的用户名;
使用Seesion的场景:利用Seesion来验证用户是否已登录,利用Session来保存验证码。

ServletContext 对象:
问题:
Request 解决了一次请求内的数据共享问题,
session 解决了用户不同请求的数据共享问题,那么不同的用户的数据共享该怎 么办呢?
解决: 使用ServletContext对象 !
作用:
解决了不同用户的数据共享问题

原理:
ServletContext 对象由服务器进行创建,一个项目只有一个对象。
不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是同一个对象了,
该对象由用户共同拥有。特点: 服务器进行创建
附码:
package cn.msk.ServletContext;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet2Context extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求编码格式req.setCharacterEncoding("utf-8");//设置响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息//处理请求信息String str="我是用户共享数据";//获取servletcontext对象ServletContext sc1= this.getServletContext();ServletContext sc2= this.getServletConfig().getServletContext();ServletContext sc3=req.getSession().getServletContext();System.out.println(sc1==sc2);System.out.println(sc2==sc3);//存储数据到servletcontext中sc1.setAttribute("str", str);//获取web.xml中的全局配置文件!String f=sc1.getInitParameter("flag");if("false".equals(f)){System.out.println("Servlet2Context.service(关闭***资源)");}else{System.out.println("Servlet2Context.service(打开***资源)");}//获取webroot下的资源流对象//获取webroot下资源的绝对路径//响应处理结果//直接响应resp.getWriter().write("数据已经在servletcontext存储完毕");//请求转发//重定向}
}
package cn.msk.ServletContext;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servletcontextb extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求编码格式req.setCharacterEncoding("utf-8");//设置响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息//获取servletContextServletContext sc=req.getServletContext();//获取共享数据String str =(String) sc.getAttribute("str");//处理请求信息System.out.println("Servletcontextb.service()"+str);//响应处理结果}
}
用户共享 :
一个项目只有一个!
生命周期:
服务器启动到服务器关闭 !
作用域:
项目内 !
使用:
获取ServletContext对象使用作用域进行共享数据流转获取web.xml中的全局配置获取webroot下项目资源流对象获取webroot下资源绝对路径!

案例:
网页浏览器次数统计,详见源码

ServletConfig 对象:
问题:
使用ServletContext对象可以获取web.xml中的全局配置文件,在web.xml中
每个Servlet 也可以进行单独的配置,那么该怎么获取配置信息呢?
解决:
使用 ServletConfig对象 !
作用:
ServletConfig对象是Servlet的专属配置对象,每个Servlet都
单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息。
使用:
获取 ServletConfig 对象
获取 web.xml中servlet的配置信息