2021-11-25 Servlet的使用

目录

1、servlet类的创建(不使用注解)

2、servlet类的创建(使用注解)

3.Servlet 生命周期

4.HttpServletRequest接口(request)

4.1、作用

4.2、常用方法

5.HttpServletResponse接口(response)


1、servlet类的创建(不使用注解)

1.创建普通类,继承HttpServlet类,重写doGet和doPost方法

/*以前我们定义的所有的类、方法,都是需要自己来创建对象,对象来调用方法
        现在用了web容器,编写的类比如MyServlet 由容器来创建对象的。
        容器拿着对象再去调用doGet ,doPost方法
        比如请求 http://localhost:8888/my
        容器需要找到端口8888中部署的项目(目前项目没有项目名http://localhost:8888)
        http://localhost:8888 对应的项目就是 hebei_web
        请求中要访问 /my ,容器通过web.xml中的配置(或注解)
        1.寻找 url-pattern ,如没有对应的 报404
        2.找到了,通过servlet-mapping 中的servlet-name 找对应的
        servlet中的 servlet-name ,最后找到了 servlet-class
            3.找到 class之后,就知道运行哪个java类了,
                    4.请求如果是 get ,执行doGet(),如果post请求,就执行 doPost()
                    5.doXX方法 需要两个参数:
                    HttpServletRequest req  包含了请求中的信息
                    HttpServletResponse resp    包含了响应的信息
                    当你处理完请求,可以通过Response对象来编程做响应
                    这两个参数是容器中的对象,容器在调用方法时,为你传参
​
                    读取客户发送的所有数据 ,填写表单,或者路径上写参数
                     查询HTTP请求中包含的任何其他请求信息,比如头信息
                    处理数据并生成结果,调用Service
                    设置合适的HTTP响应参数
                    将响应信息回送给客户端*/
​
public class MyServlet extends HttpServlet {
​
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务器接收到客户端get请求");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务器接收到post请求");
    }
}
​

2.web.xml的配置

 <!--配置全局变量-->
    <context-param>
        <param-name>name</param-name>
        <param-value>lijia</param-value>
    </context-param>
​
    <welcome-file-list>
        <!--以下都是首页-->
        <welcome-file>/index.html</welcome-file>
        <welcome-file>/index.jsp</welcome-file>
        <welcome-file>/defualt.html</welcome-file>
        <welcome-file>/defualt.jsp</welcome-file>
    </welcome-file-list>
​
    <!--配置Servlet-->
    <servlet>
        <!--配置名称,自定义,通常和类同名-->
        <servlet-name>MyServlet</servlet-name>
        <!--类路径-->
        <servlet-class>com.li.web.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--和上面对应的名称-->
        <servlet-name>MyServlet</servlet-name>
        <!--web的访问路径-->
        <url-pattern>/my1</url-pattern>
    </servlet-mapping>
​
    <!--按异常号码来处理-->
    <error-page>
        <error-code>404</error-code>
        <location>/error/error404.jsp</location>
    </error-page>
​
    <!--按异常类型进行出来-->
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error/error500.jsp</location>
    </error-page>

2、servlet类的创建(使用注解)

@WebServlet():括号中给一个值默认为访问路径

@WebServlet("/MyServlet001")
public class MyServlet001 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
​
    }
​
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
​
    }
}
​

3.Servlet 生命周期

  1. 加载、实例化、初始化init() (第一次访问时,只加载一次)

  2. 服务阶段 service() (处理请求,执行doXX() )

  3. 销毁 destroy() (服务器关闭)

public class MyServlet extends HttpServlet {
​
    public MyServlet(){
        System.out.println("对象被创建了。。。");
    }
​
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init初始化方法被调用。。。");
        System.out.println("name的值为"+config.getServletContext().getInitParameter("name"));
    }
​
    @Override
    public void destroy() {
        System.out.println("对象被销毁了。。。。。");
    }
​
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务器接收到客户端get请求");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务器接收到post请求");
    }
}
​

4.HttpServletRequest接口(request)

4.1、作用

1.提取客户端请求信息(表单信息,HTTP请求报头信息,cookie)

2.修改字符集

3.在服务器端保存值

4.WEB资源跳转——请求转发

4.2、常用方法

1.String getParameter(String name) 获取请求中参数为name的参数值。

2.String[] getParameterValues(String name) 获取请求中参数名为name的参数值的集合

3.Enumeration getParameterNames() 获取请求中所有参数名的集合

4.ServletInputStream getInputStream() 获取客户端请求的数据

5.String getMethod() 获取HTTP请求方法

6.String getRemoteAddr() 获取客户端的IP

7.setCharacterEncoding() 修改网页提交过来数据的字符编码方式

8.getRequestDispatcher(xxx.jsp).forward(request,response) 请求转发

@WebServlet("/MyServlet001")
public class MyServlet001 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置页面提交数据的编码格式
            request.setCharacterEncoding("UTF-8");
            //获取页面表单数据
            String username = request.getParameter("username");
            System.out.println("姓名:"+username);

            //获取多选参数
            String sex = request.getParameter("sex");
            System.out.println("性别:"+sex);
            String[] addrs = request.getParameterValues("addr");
            System.out.println(Arrays.toString(addrs));

            //获取参数列表名
            Enumeration<String> names = request.getParameterNames();
            while (names.hasMoreElements()){//判断是否有枚举值
                System.out.println(names.nextElement());//获取
            }

            request.setAttribute("username","xxx");
            request.getRequestDispatcher("text.jsp").forward(request,response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request,response);
    }
}

5.HttpServletResponse接口(response)

常用方法

1.void setContentType(String type) 设置输出内容(MIME)类型

2.void setContentLength(int length) 设置响应报文的长度

3.PrintWriter getWriter() 返回可以向客户端发送字符数据的PrinterWriter对象

4.ServletOutputStream getOutputStream() 返回可以向客户端发送二进制数据的输出流对象

5.void addCookie(Cookie c) 向报头插入一个cookie

6.void sendRedirect() 重定向

7.setCharacterEncoding() 修改响应到网页的字符编码方式

/*
            重定向:
                1.可以向站内、站外(绝对路径)定向
                2. 地址栏地址会改变
                3. 可以传达数据,只能是字符串,加在地址上。比如 index.jsp?xxx=xxx
                4. Response 调用执行的
                5. 重定向后的代码也会执行
            
​
    6. 请求次数最少有两次, 服务器在第一次请求后,会返回302 以及一个地址, 浏览器在根据这个地址,执行第二次访问。
​
    7. 效率稍微低一点, 执行两次请求。 
​
    8. 后续的请求,没法使用上一次的request存储的数据,或者 没法使用上一次的request对象,因为这是两次不同的请求。
         */
        resp.sendRedirect("/demo001/index.jsp?login=1");

常用的MIME类型

  • text/plain 纯文本
  • text/html HTML文档
  • image/图像格式 图片,如image/gif
  • application/msword Microsoft Word 文档
  • application/vnd.ms-excel Excel电子表格
  • application/octet-stream 未经识别或二进制的数据
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //响应文档类型
        resp.setContentType("text/plain");
        //响应字符集
        resp.setCharacterEncoding("UTF-8");
        //获得输出流
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head><title>zyw response</title></head>");
        out.println("<body>");
        out.println("<h1>hello</h1>");
        out.println("</body>");
        out.println("</html>");

        out.flush();
        out.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值