GenericServlet、HttpServlet、HttpServletRequest、HttpServletResponse、转发和重定向
来源:互联网 发布:linux vi 输入模式删除 编辑:程序博客网 时间:2024/05/22 14:22
自定义写一个MyGenericServlet.java实现Servlet、ServletConfig接口
//自定义一个MyGenericServletpublic abstract class MyGenericServlet implements Servlet , ServletConfig { private ServletConfig config; @Override public void init(ServletConfig config) throws ServletException { this.config = config; //调用init()方法 init(); } public void init(){ } @Override public ServletConfig getServletConfig() { return this.config; } @Override public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException ; @Override public String getServletInfo() { return "我是一个漂亮的Servlet"; } @Override public void destroy() { } @Override public String getServletName() { return this.getServletConfig().getServletName(); } @Override public ServletContext getServletContext() { return this.getServletConfig().getServletContext(); } @Override public String getInitParameter(String name) { return this.getServletConfig().getInitParameter(name); } @Override public Enumeration getInitParameterNames() { return this.getServletConfig().getInitParameterNames(); }}//=====================================//写一个servlet去继承刚才自己写的MyGenericServletpublic class CServlet extends MyGenericServlet { @Override public void init() { System.out.println("我是CServlet的初始化操作!!"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //获取phone的值 String phone = getInitParameter("phone"); System.out.println("phone = "+phone); System.out.println("Hello Servlet"); res.getWriter().print("Hello"); }}//================================web.xml <servlet> <servlet-name>CServlet</servlet-name> <servlet-class> com.atguigu.servlet.CServlet</servlet-class> <init-param> <param-name>phone</param-name> <param-value>138888888</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>CServlet</servlet-name> <url-pattern>/CServlet</url-pattern> </servlet-mapping>//===================================
=================================
HttpServlet
/** 创建一个Servlet有三种方式 实现Servlet接口 继承GenericServlet抽象类 继承HttpServlet抽象类 当通过继承HttpServlet创建一个Servlet时,只需要根据要处理的请求的不同去重写不同的方法: 如果要处理get请求,则重写doGet方法 如果要处理post请求,则重写doPost方法*/
public class DServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //doGet会在接收get请求时调用 System.out.println("doGet"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //doPost会在接收post请求时调用 System.out.println("doPost"); }}
===========================
HttpServletRequest:重点
/**代表:代表浏览器发送给服务器的请求报文获取:该对象由服务器创建,最终作为参数传递到doGet或doPost方法中功能4个: --可以获取用户发送的请求参数 String getParamter(String name) --可以获取项目名(主要用来设置绝对路径) String getContextPath() --可以作为一个域对象在不同的web资源之间共享数据。 --请求的转发 request.getRequestDispatcher(路径).forward(request,response);*/
=========================
HttpServletResponse:重点
/** 代表:服务器发送给浏览器的响应报文 获取:该对象由服务器创建,最终作为参数传递到doGet或doPost方法中 功能2个: --向浏览器发送一个页面或页面片段 response.getWriter().print(); --请求的重定向 response.sendRedirect(路径);*/
===========================
转发和重定向:
/**转发和重定向比较: 转发(request) 重定向(response) 浏览器发送的请求次数 1次 2次发生的位置 服务器 浏览器地址栏的改变 不变 改变浏览器是否感知 不知道 知道*/
============================
HttpServletRequest和HttpServletResponse代码测试:
1、建servlet继承自HttpServlet
2、配置web.xml
3、访问地址路径:http://localhost:8080/项目名/映射URL
/**转发和重定向比较: 转发(request) 重定向(response) 浏览器发送的请求次数 1次 2次发生的位置 服务器 浏览器地址栏的改变 不变 改变浏览器是否感知 不知道 知道 */public class HServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 请求首行 * 请求头 * 空行 * 请求体 * * * HttpServletRequest * 代表:浏览器发送给服务器的请求报文 * 获取:该对象由Tomcat服务器创建,最终作为参数传递给doGet或doPost方法 * 功能: * 【1】获取请求参数 * 【2】可以获取项目名 * 【3】可以作为一个域对象在不同的web资源之间共享数据(request servletContext) * 【4】可以做请求的转发 */ //获取请求参数 /* String username = request.getParameter("username"); String password = request.getParameter("password"); //在页面中输出用户名 response.getWriter().print("<h1>username = "+username+"</h1>"); System.out.println(password);*/ //获取项目名 //这个方法主要用来设置绝对路径 /* String contextPath = request.getContextPath(); System.out.println(contextPath); */ //请求的转发 /** * 所谓的转发就是servlet收到浏览器发送的请求以后, * 当前servlet不去处理请求, * 而是去调用服务器内部的其他资源去处理请求。 * 转发的特点: * 转发时浏览器发送了1次请求 * 转发是在服务器内部进行的 * 浏览器的地址栏不会发生改变 * 浏览器不知道转发的发生 * */ //1.获取一个请求的派发器 RequestDispatcher dispatcher = request.getRequestDispatcher("target.html"); //2.通过dispatcher发起转发操作 dispatcher.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 响应首行 * 响应头 * 空行 * 响应体 * * * HttpServletResponse * 代表:代表服务器发送给浏览器的响应报文 * 获取:该对象由服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用 * 功能: * 【1】向浏览器输出一个页面或者是页面片段 * 【2】可以发起请求的重定向 * */ //【1】向浏览器输出一个页面或者是页面片段 //response.getWriter().print(""); //获取一个字符输出流 PrintWriter out = response.getWriter(); //通过流向浏览器响应一段信息 out.print("<h1>Hello</h1>"); //【2】可以发起请求的重定向 /** * 重定向指的是当服务器收到一个请求后,返回给浏览器一个特殊的响应 * 这个特殊的响应告诉浏览器再去向另一个地址发送请求。 * * HTTP/1.1 302 Found Location: http://localhost:8080/08_WEB_Servlet/target.html 这个特殊的响应的响应状态码是302,还有一个特殊的头Location,Location指向一个新的地址 当浏览器收到302这个响应状态码,他会想Location头所指向的地址再次发送请求 重定向的特点: 重定向时浏览器发送了2次请求 重定向是发生浏览器端 重定向时浏览器的地址栏发生改变 浏览器可以感知重定向的发生 */ response.sendRedirect("target.html"); }}
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><servlet> <servlet-name>HServlet</servlet-name> <servlet-class>com.atguigu.servlet.HServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HServlet</servlet-name> <url-pattern>/HServlet</url-pattern> </servlet-mapping></web-app>
============================
tips:新建servlet的快捷方式
/** window--Customize Perspective--Shortcus--Web--Servlet*/
===============================
tips:隐藏项目的快捷方式:
选中项目–右键–Close Projects
接着选中Filtrs–Close Projects
那如果要打开隐藏的项目呢。
选择Project–Open Project
==================================
未完待续!
阅读全文
0 0
- GenericServlet、HttpServlet、HttpServletRequest、HttpServletResponse、转发和重定向
- 转发 重定向HttpServletRequest & HttpServletResponse
- 客户端和web交互&servlet创建&HttpServletRequest&HttpServlet&重定向和转发
- HttpServletResponse的转发和重定向
- HttpServletResponse的转发和重定向
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)
- 关于GenericServlet和HttpServlet
- HttpServlet和GenericServlet
- 转发和重定向
- 转发和重定向
- 转发和重定向
- 重定向和转发
- 转发和重定向
- 转发和重定向
- 重定向和转发
- 转发和重定向
- 转发和重定向
- 修改centos6.5的yum源
- css实现单行、多行文本溢出显示省略号
- 哈哈日语 日语基础语法——连用形
- TP5 如何接收表单post所有数据
- 今日头条如何快速开通原创
- GenericServlet、HttpServlet、HttpServletRequest、HttpServletResponse、转发和重定向
- Max Points on a Line
- nginx屏蔽某一ip的访问
- iOS MVVM
- Android项目版本管理浅析
- maven工程下Springmvc+mybatis整合
- Python定时任务的实现方式
- 路由第二个页面查询天气
- java.security.InvalidKeyException: Illegal key size 错误问题解决方案