一、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);
}
} |