servlet——2.2Servlet-的service、dopost、doget

servlet——2.2Servlet-的service、dopost、doget

servlet——2.2Servlet-的service、dopost、doget

创建了一个Servlet

package com.carlinfo.servlet.demo;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

 * 测试一下Servlet常见的方法

 * @author wangshMac

 *

 */

public class HttpMethodServlet extends HttpServlet

{

    @Override

    public void init() throws ServletException

    {

        System.out.println("==init==");

    }

   

    @Override

    public void destroy()

    {

        System.out.println("==destroy==");

    }

   

    /**

     * 先访问Service_1

     */

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

    {

        System.out.println("==service==");

        /* 调用父类的方法

         * 先调用Service_1

         * 后调用doGet或者doPost();

         *

         * 什么时候是post请求,什么时候是get请求:

         *

         * post请求必须是:form,不是from; method=post

     * 其它的全部是get提交

         *  */

        super.service(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException

    {

        System.out.println("==doPost==");

       

        /* dopost和doget合二为一

         * 合二为一和Service一般只选一个,两个都使,神经病

         * */

        this.doGet(req, response);

    }

   

    /**

     * 如果页面白了,那是因为女生木有给男生写回信;

     */

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException

    {

        System.out.println("==doGet==");

        /*

         * 指定编码,一定要放到第一行

         * MIME类型:编码集

         * */

        response.setContentType("text/html;charset=UTF-8");

        /* 如何写回信

         * 和我们当年学的io一样

         * PrintWriter:是一个字符流

         *  */

        PrintWriter out = response.getWriter() ;

        /* System.out中的out */

        /*out.println("hello,i am reverse");

        out.println("我收到了");*/

        /* 让文本有一个背景条

         * 拼装html

         *  */

        String html = "" ;

       

        /* 拼装HTML

         * 特别的累:

         * ~木有提示

         * ~还得注意格式

         * ~木有写css和js

         *

         * 需求:如果能够在html文件中写html代码,让servlet直接将html代码返回多得劲!!!

         *  */

        html += "<!DOCTYPE html>";

        html += "<html>" ;

        html += "  <head>" ;

        html += "      <title>这是回信</title>" ;

        html += "  <head>" ;

        html += "  <body>" ;

        html += "      <p style='background-color:red;font-size:30px;'>我收到了</p>" ;

        html += "  <body>" ;

        html += "</html>" ;

       

        out.println(html);

        /* 控控水 */

        out.flush();

        /* 关闭管子 */

        out.close();

    }

}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns="http://xmlns.jcp.org/xml/ns/javaee"

    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

    id="WebApp_ID" version="3.1">

    <display-name>01_servlet_hw</display-name>

   

    <!-- 打开一个XML文件,先格式化 -->

    <!-- 一个Servlet配置开始

        servlet标签和servlet-mapping标签,是通过servlet-name关联起来;servlet-name得一致

       

        servlet-class:开发的Servlet所处的位置(包名+名类);一看到包名+类名;

        对象创建有两种方式:

            一种是new了一个对象;new 后面跟的是:构造方法

            一种反射;Class.forName(包名+类名).newInstance();

    -->

    <servlet>

        <servlet-name>Hw_01</servlet-name>

        <servlet-class>com.carlinfo.servlet.demo.Hw_01</servlet-class>

        <!-- 一旦写了此配置,tomcat一启动就要初始化Servlet

            数字指的是:如果有多个Servlet,都要在tomcat启动的时候初始化,

            按照数字的大小:从小到大,一一的初始化

         -->

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>Hw_01</servlet-name>

        <!--

            url-pattern:在浏览器地址栏输入的内容,tomcat会调用我们的service方法

         -->

        <url-pattern>/Hw_01</url-pattern>

    </servlet-mapping>

    <!-- 一个Servlet配置结束 -->

   

    <!-- 第二个Servlet -->

    <servlet>

        <servlet-name>HttpMethodServlet</servlet-name>

        <servlet-class>com.carlinfo.servlet.demo.HttpMethodServlet</servlet-class>

        <!-- tomcat一启动就初始化Servlet

            配置的值:整数别重复

         -->

        <load-on-startup>2</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>HttpMethodServlet</servlet-name>

        <!-- /表示的是项目的根目录

            项目名后面跟着此Servlet

         -->

        <url-pattern>/HttpMethodServlet</url-pattern>

    </servlet-mapping>

   

    <!--

        欢迎文件列表页面

        http://192.168.1.2:8080/01_servlet_hw(项目名后面啥也木有写)

        tomcat会按照welcomefilelist中指定的页面,一个一个的找,如果找到就访问.

        找不到就报:404错误(页面未找到)

       

        不配置也可以,但是文件名必须叫做index.html;

        如果不是下面列出的文件,需要手工指定;

        (这下面的文件,写不写都行)

       

        如果想指定一个文件,不在下面的文件中,需要指定

     -->

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>default.html</welcome-file>

        <welcome-file>default.htm</welcome-file>

        <welcome-file>default.jsp</welcome-file>

    </welcome-file-list>

</web-app>

Index.html(首页)--导航页面

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title>Insert title here</title>

    </head>

    <body>

        <table border="1" width="80%">

            <tr>

                <td>标题</td>

                <td>内容</td>

            </tr>

            <!--

                /:表示的是tomcat根路径;因为tomcat下面可以放很多项目

                什么也不写,表示的是相对路径,hw.html所在的路径(WebContent中)

             -->

            <tr>

                <td>hw.html</td>

                <td><a href="hw.html" target="_blank">hw</a></td>

            </tr>

            <tr>

                <td>第一个Servlet</td>

                <td><a href="Hw_01" target="_blank">hw_01</a></td>

            </tr>

            <tr>

                <td>第二个Servlet</td>

                <td><a href="HttpMethodServlet" target="_blank">HttpMethodServlet</a></td>

            </tr>

        </table>

    </body>

</html>

Hw.html:专门用来测试post提交

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title>Insert title here</title>

    </head>

    <body>

        这是我的第一个html

        <!-- 提交的路径是Servlet

            前面木有写/,默认是相对路径,

            如果写了/,默认是tomcat根路径

         -->

        <form action="HttpMethodServlet" method="post">

            <input type="submit" value="提交"/>

        </form>

    </body>

</html>

 

总结

特别怕404错误

http://localhost:8080/01_test/hw.html

协议://ip或者域名:端口/项目名/文件的位置

http://localhost:8080/01_servlet_hw/Hw_01

协议://ip(域名):端口/项目名/web.xml中servlet对应的url-pattern