网络编程---重定向和转发底层原理以及Servlet
来源:互联网 发布:vb.net 双引号转义字符 编辑:程序博客网 时间:2024/05/17 10:39
我们在访问网站的时候,经常需要充一个页面调到另个一个页面,那么低层是怎么实现 的呢?
重定向和转发
底层示意图
简要说一下两者区别:重定向是通过两次访问来实现跳转、而转发是一次(战内),重定向是两次请求,所以第二次请求可以是任意网站,而转发是把服务器的其他页面显示上去,因此不能跳转至服务器内没有的页面,即不能是站外的网页。
重定向代码实现
package cn.hncu.servlets;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RedirectServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); System.out.println(name+","+pwd); //法1: 通过HTTP协议的方式来实现重定向 //resp.setStatus(HttpServletResponse.SC_FOUND);//设置状态码 //resp.setHeader("Location", "/httpWebDemo/jsps/1.jsp"); //法2: 利用HttpServletResponse类中的sendRedirect()方法帮我们完成 //resp.sendRedirect("/httpWebDemo/jsps/1.jsp"); resp.sendRedirect("/httpWebDemo/jsps/1.jsp?name="+name+"&pwd="+pwd);//如果要给重定向的结果页面传参数,得把参数添加到url地址中 //resp.sendRedirect("http://www.hncu.net");//可以重定向到站外---我们的项目以外的其它项目(网站) }}
转发代码实现
package cn.hncu.servlets;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ForwardServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); System.out.println("2--"+name+","+pwd); //转发 RequestDispatcher rd = req.getRequestDispatcher("/jsps/2.jsp"); //RequestDispatcher rd = req.getRequestDispatcher("http://www.hncu.net");//WA:转发只能在站内进行 rd.forward(req, resp);//转发,同时把参数req和resp向前传递 }}
两者都是web项目的服务实现类代码。
servlet的简介
Servlet是JavaWeb应用中最核心的组件,是运行在服务中的程序。
Servlet可以完成以下任务:
- 动态生成HTML文档。
- 将请求转发给Servlet组件
- 读取客户端的Cookie,以及向客户端写入Cookie。
- 访问服务器的资源,如数据库、 XML、文件对像等。
Servlet的特点如下:
- Servlet对像,由Servlet容器(Tomcat)创建。
- Servlet是一个接口:位于javax.servlet包中。
init方法。
- 只会被初始化一次。由容器初始化。初始化成功后将缓存与容器中。
它的初始时间分为两种:
- 用户第一次访问时。
- 服务器启动时。-需要配置
。
service方法
- 每次请求都会访问此方法。
- 每次请求都会创建新的Request和Response对像。
destory方法
当服务器关闭时由容器调用并销毁。
下面是两个演示Servlet方法生命周期的代码
package cn.hncu.servlets;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class FirstServlet implements Servlet{ private String charset=null; @Override public void init(ServletConfig config) throws ServletException { System.out.println("1初始化"); //读取参数 charset = config.getInitParameter("charset"); } @Override public ServletConfig getServletConfig() { System.out.println("2读取该servlet在web.xml中的配置参数..."); return null; } @Override public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { System.out.println("3--进行服务响应...."); System.out.println(this); System.out.println("req:"+req); System.out.println("resp:"+resp); req.setCharacterEncoding(charset); String name = req.getParameter("name"); System.out.println(name); } @Override public String getServletInfo() { System.out.println("很少用,一般是返回该servlet的信息如作者和版本等"); return null; } @Override public void destroy() { System.out.println("4--消亡了...."); }}
package cn.hncu.servlets;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class SecondServlet implements Servlet{ @Override public void init(ServletConfig config) throws ServletException { System.out.println("aaaa1初始化"); } @Override public ServletConfig getServletConfig() { System.out.println("aaaaa2读取该servlet在web.xml中的配置参数..."); return null; } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("aaaa3--进行服务响应...."); System.out.println(this.hashCode()); } @Override public String getServletInfo() { System.out.println("aaaa很少用,一般是返回该servlet的信息如作者和版本等"); return null; } @Override public void destroy() { System.out.println("aaaaa4--消亡了...."); }}
阅读全文
0 0
- 网络编程---重定向和转发底层原理以及Servlet
- Servlet--转发和重定向
- servlet请求转发、包含以及重定向
- Servlet--Servlet转发和重定向
- servlet的重定向和请求转发
- servlet请求转发和重定向
- 深入理解Servlet转发和重定向
- servlet 重定向和转发总结
- Servlet 转发、包含和重定向
- servlet(jsp)中的重定向和转发
- 深入理解Servlet转发和重定向
- 深入理解Servlet转发和重定向
- Servlet请求转发和重定向
- 深入理解Servlet转发和重定向
- servlet之重定向和请求转发
- 深入理解Servlet转发和重定向
- Servlet之重定向和转发
- Servlet 请求转发和重定向
- 两个div并排 左边div宽固定 右边自适应
- linux命令篇
- 与傅里叶的故事
- jquery validate表单验证插件
- ListView里面有EditText,弹出键盘后EditView立刻不能获取焦点的问题
- 网络编程---重定向和转发底层原理以及Servlet
- C语言实现单链表。
- Codeforces 814B-An express train to reveries
- python学习记录1
- Red5应用开发(一) 环境搭建
- tp中where条件拼接!!
- FlexboxLayout
- Linux摄像驱动四:USB摄像驱动分析
- Qt基础 06_信号和槽(二)自定义信号和槽的实例