02 Servlet生命周期及ServletRequest与ServletResponse

 

一、Servlet生命周期

1.1Servlet的生命周期

Servlet运行依靠servlet容器(tomcat)

Tomcat作用:

1.链接

         2.容器(存放文件-web项目)

生命周期分为:init:初始化;service:处理请求和响应;destroy:销毁。

Init初始化类似於单例模式,仅初始化一次;

 

1.2配置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>servlet-01-lifecycle</display-name>

 

  <servlet>

    <servlet-name>TestCycleServlet</servlet-name>

    <servlet-class>cn.gzsxt.servlet.TestCycleServlet</servlet-class>

    <!-- 如果是负数或0 ,由tomcat 自动分配顺序; 正整数  从小到大初始化 -->

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

  </servlet>

  <servlet>

    <servlet-name>TestServlet02</servlet-name>

    <display-name>This is the display name of my J2EE component</display-name>

    <description>This is the description of my J2EE component</description>

    <servlet-class>cn.gzsxt.servlet.TestServlet02</servlet-class>

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

  </servlet>

 

  <servlet-mapping>

    <servlet-name>TestCycleServlet</servlet-name>

    <url-pattern>/testCycleServlet.gzsxt</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

    <servlet-name>TestServlet02</servlet-name>

    <url-pattern>/testServlet02.gzsxt</url-pattern>

  </servlet-mapping>

  <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>

 

二、ServletRequest与ServletResponse

2.1ServletRequest

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 请求行信息

                   getResponseLineMgs(request, response);

 

         }

 

         private void getResponseLineMgs(HttpServletRequest request,

                            HttpServletResponse response) throws IOException {

                   // 获取项目名称

                   String requestURI = request.getRequestURI();

                   System.out.println("requestURI:\t" + requestURI);

                   // 获取不含参数的全路径

                   StringBuffer requestURL = request.getRequestURL();

                   System.out.println("requestURL:\t" + requestURL);

                   // 获取协议名称

                   String scheme = request.getScheme();

                   System.out.println("scheme:\t" + scheme);

                   // 获取web应用名称

                   String contextPath = request.getContextPath();

                   System.out.println("contextPath:\t" + contextPath);

                   // 设置编码集  不设置会造成浏览器乱码

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

 

                   PrintWriter out = response.getWriter();

 

                   out.print(this.getClass());

 

                   out.println("request测试,请求行信息。");

                   out.flush();

                   out.close();

         }

 

}

编码集不设置为造成浏览器端产生乱码

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                  

                   // 请求链接信息

                   getLinkedInfo(request, response);

 

         }

 

         private void getLinkedInfo(HttpServletRequest request,

                            HttpServletResponse response) throws IOException {

                   // 获取客户端的地址

                   String remoteAddr = request.getRemoteAddr();

                   System.out.println("remoteAddr: " + remoteAddr);

                   // 获取客户端的端口号

                   int remotePort = request.getRemotePort();

                   System.out.println("remotePort: " + remotePort);

                   // 获取服务器的地址

                   String localAddr = request.getLocalAddr();

                   System.out.println("localAddr: " + localAddr);

 

                   // 获取服务器的端口号

                   int localPort = request.getLocalPort();

                   System.out.println("localPort: " + localPort);

 

                   // 设置编码集

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

                   // 设置流

                   PrintWriter writer = response.getWriter();

                   writer.println("request测试,链接信息。");

                   writer.flush();

                   writer.close();

         }

 

package cn.sxt.serRequest;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TestServletRequest extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 请求行信息

                   // getResponseLineMgs(request, response);

                   // 请求链接信息

                   //getLinkedInfo(request, response);

                   // 获取前端提交的数据

                   String parameter = request.getParameter("username");

                   System.out.println("parameter: "+parameter);

                   String parameter1 = request.getParameter("pwd");

                   System.out.println("pwd: "+parameter1);

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

                   PrintWriter writer = response.getWriter();

                   writer.println("parameter测试。。。");

                   writer.flush();

                   writer.close();

 

         }

2.2 ServletResponse

使用Response设置head

package cn.sxt.servlet;

 

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;

 

public class TestResponse extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

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

                   // 设置3s后跳转至指定页面

                   response.addHeader("refresh", "3;url=ok.html");

                   PrintWriter out = response.getWriter();

                   out.println("测试 response");

                   out.flush();

                   out.close();

         }

}

2.3 response对象作用域对象存储数据

package cn.sxt.servlet;

 

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class TestDownload extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   doPost(request, response);

 

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   // 读取文件 输入流

                   InputStream is = this.getServletContext().getResourceAsStream(

                                     "/img/12.jpg");

                   // 输出流将图片下载到客户端

                   ServletOutputStream os = response.getOutputStream();

 

                   // 设置浏览器打开文件的方式,打开一个窗口;设置mime类型的一种默认online

                   response.addHeader("content-disposition", "attachment;filename="

                                     + "12.jpg");

 

                   //

                   int temp = 0;

                   byte[] b = new byte[1024];

                   while ((temp = is.read(b)) != -1) {

                            os.write(b, 0, temp);

                   }

 

                   // 关流

                   os.flush();

                   os.close();

                   is.close();

         }

 

}

2.4请求转发

package cn.sxt.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

 

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 TestDispatcher extends HttpServlet {

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   doPost(request, response);

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   // 转发服务即减少了用字符串拼接html页面的玛法

                   // 转发是服务器的行为 一次请求和相应

                   RequestDispatcher requestDispatcher = request

                                     .getRequestDispatcher("/main.html");

                   // 加/

                   requestDispatcher.forward(request, response);

 

         }

 

}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章