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
这里写图片描述

==================================
未完待续!

原创粉丝点击