request+response

基本流程

HttpServletResponse是ServletResponse的子类,代表响应。是doGet/doPost方法的响应参数,是serviceResponse的子接口。
服务器和客户端的请求流程是这样的,
客户端先将请求按照http协议封装完毕,然后传给Tomcat服务器,服务器会先解析请求的资源,地址,将请求资源封装request对象,request项目接收到再通过文件复制进响应缓冲区。至此,请求流程结束。而后tomact服务器内核回去response缓冲区获取内容,通过封装这个响应作为一个http响应,(响应头,响应行,响应体),最后浏览器解析http响应显示页面。
对response的操作,如上文所说,我们可以设置响应行,头,体。


重定向:1.url地址栏变化,这是不带数据过去的

response.sendRedirect(request.getContextPath()+"/admin/adminshenpi.jsp");

请求转发:这是带数据的,需要转值。

这个可以存取到域里面,在jsp页面进行取值
    //获取域 因为这个方法存取的是String类型 Object类型
        String name=(String)request.getAttribute("name");
request.getRequestDispatcher("/admin/adminshenpi.jsp").forward(request, response);

2.请求服务器两次
响应行:设置状态码。
response.setStatus(302)
设置响应头:location
response.setHeader(“Location”“/WEB03/Servlet02”);
1、响应体的第一种方式 网页跳转
就是上文的操作
2、响应体的第二种方式。
response.sendReadirect(“/WEB03/Servlet02”);
跳转时的定时刷新:
1、利用响应头的Refresh
response.setHeader("Refresh","5;url="https://www.baidu.com"),5秒后刷新自动跳转到百度,


2.利用js定时器

<script type="text/javascript">
window.onload=function(){
    //获取span元素
    var second=document.getElementById("second");
    //设置秒数
    var time=5;
    //设置定时器                            回调函数
    var timer=setInterval(function(){
        second.innerHTML=time;
        second.style.color="red";
        time--;
        if(time==0){
            clearInterval(timer);
            location.href="https://www.baidu.com";
        }
    }, 1000);
}
</script>
</head>
<body>
    恭喜你,注册成功,<span id="second">5</span>    秒后跳转,如不跳转,请点击<a href="https://www.baidu.com">这里</a></body>

效果和上面一样。
响应体设置文本
因为码表的不同,response缓冲区的编码是iso8859-1,我们在写中文的时候会出现乱码问题,如果在,所以第一个方式是我们需要声明两个地方吗表,第一个response缓冲区码表,UTF-8,第二个浏览器码表。

response.setCharacterEncoding("UTF-8");
response.setHeaader("Content-type","text/html;charset=UTF-8");
response.getWriter().write("你好.");

案例展示:

验证码:

jsp文件如下:利用js写一个点击刷新功能
<script type="text/javascript">

window.onclick=function (){
    var obj=document.getElementById("aa");
    obj.src="/WEB03/CheckImgServlet?time="+new Date().getTime();
}
</script>
</head>
<body>
<img src="/WEB03/CheckImgServlet"   id="aa">

</body>
在某一个包下创建一个

 然后将路径修改为jsp对应的文件名

效果如下:

第二个方式:正常只写这里也是解决乱码格式,响应乱码
    response.setContentType("text/html;charset=UTF-8");
案例:文件下载。
它的流程是明确数据源→通过响应头ServletOutputStream out=response.getOutputStream();获取字节码文件对象,开始定义数组复制,释放资源。
结合html+java的写法。
首先我们在html里面定义三个a标签盛放三个文件。

<a href="/WEB03/DownloadServlet?filename=母鸡的.txt">母鸡的.txt</a>
<a href="/WEB03/DownloadServlet?filename=2.jpg">2.jpg</a>
<a href="/WEB03/DownloadServlet?filename=2.zip">2.zip</a>
filename后面是需要和文件名一致。


resquest 请求体
java制作项目的基本流程,也和之前基本一致,先创建实体类,内容和数据库一致。
创建web类(servlet)创建请求-dao层-service层-web层接受返回值
dao层一模一样,但是service中转判断,web直接接受(提前判断)
区别:一个功能写一套,不是一个类写一套,因为请求只能响应一次
请求转发:
1.url地址栏不变
2.请求服务器1次
java制作项目的基本流程,也和之前基本一致,先创建实体类,内容和数据库一致。
创建web类(servlet)创建请求-dao层-service层-web层接受返回值
dao层一模一样,但是service中转判断,web直接接受(提前判断)
区别:一个功能写一套,不是一个类写一套,因为请求只能响应一次


论域对象为何不能暂时存储信息,servletContext存储所有的servlet对象,但是会造成存储信息过于乱,两人都收藏了奔驰,谁买怎么调取。

request请求域,可以每一个人都开一个内存来存储,但是没有一次执行结算servlet就会失败。

request请求域的流程

原文地址:https://www.cnblogs.com/a199706/p/11603260.html