Serlvet的简单使用

it2023-12-04  66

目录

Servlet两个顶级接口:接口的实现类:Servlet 的生命周期 HttpServletRequest接口:HttpServletResponse接口:重定向:请求转发(将request信息传递下去): 编写web.xml文件编写jsp文件编写html网页注意myServlet类编写

Servlet

servlet是服务器端的组件,从初始化到销毁,都依赖与容器Servlet只有在第一次被调用时初始化一次,该实例被存储在容器中多客户端并发访问时,Tomcat会启动多线程.如果某个Servlet需要在应用加载时被初始化,可以通过在web.xml中配置来完成

两个顶级接口:

Servlet接口定义了所有必须实现的方法:init(),service(),destroy() ServletConfig接口封装Servlet实例的初始化配置信息: getInitParameter(name)被HTTPServlet类实现

接口的实现类:

GenericServlet:实现了Servlet,ServletConfig接口中所有方法, 也扩展了新方法. init()仅用于在Service类实例化后调用一次. 基于Http协议的实现类:HttpServlet 类关系:public abstract class HttpServlet extends GenericServlet implements Servlet,ServletConfig 自定义的Servlet类往往都直接继承HttpServlet

Servlet 的生命周期

* 初始化 * 构造方法 * init(ServletConfig)方法 init()方法 * 提供服务 * service方法 * doxxx方法 * 销毁 * destroy方法

HttpServletRequest接口:

定义了大量获得请求信息的方法 获取请求头的方法:getHeader(name),getIntHeader(),getDateHeader() ,getHearNames(),getHeaders() 获取请求参数的方法:获取某个name的vlaue:getParameter(name), 获取所有的Name和vlaue:getParameterValues(), getParameterNames() 获取客户端以及服务器端信息的方法:getRemoteAddr,getRemotePort, getLocalName,getLocalPort.

HttpServletResponse接口:

定义大量获得响应信息的方法 处理响应头信息的方法:addHeader,addIntHeader, addDateHeader,setHeader,setIntHeader 获取响应输出流及设置内容类型的方法 getWriter:获得输出流out对象 setContentType:设置响应的内容类型 text/html;charset=UTF-8 响应重定向 sendRedirect:实现响应重定向功能, 用来将响应重新定向到其他页面,生成响应给客户端.

重定向:

sendRedirect(location)两次请求和响应地址栏会变化带工程名路径可以定向到任何网站

请求转发(将request信息传递下去):

getRequestDispatcher(path).forward(request, response);请求转发器的接口是RequestDispatcher:ServletRequest接口中的getRequestDispatcher获得,请求转发方法forword(request, response);Servlet内部调用地址栏不会变化路径不带工程名只能在本网站内部

重定向和请求转发的比较要了解详情请点击

编写web.xml文件

编写jsp文件

编写html网页

注意

服务器的8080端口被占用: win+R : cmd netstat -ano| findstr 8080 taskkill/pid XXXX /f

myServlet类编写

import java.io.IOException; //import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //import javax.servlet.http.HttpSession; @WebServlet("/TestServlet") public class TestServlet extends HttpServlet{ /** * servlet是服务器端的组件,从初始化到销毁,都依赖与容器 * Servlet只有在第一次被调用时初始化一次,该实例被存储在容器中 * 多客户端并发访问时,Tomcat会启动多线程. * 如果某个Servlet需要在应用加载时被初始化,可以通过在web.xml中配置<load-on-startup>来完成 * * 两个顶级接口:Servlet接口定义了所有必须实现的方法:init(),service(),destroy() * ServletConfig接口封装Servlet实例的初始化配置信息:getInitParameter(name)被HTTPServlet类实现 * 接口的实现类:GenericServlet:实现了Servlet,ServletConfig接口中所有方法,也扩展了新方法. * init()仅用于在Service类实例化后调用一次. * 基于Http协议的实现类:HttpServlet * public abstract class HttpServlet extends GenericServlet implements Servlet,ServletConfig * 自定义的Servlet类往往都直接继承HttpServlet * * Servlet 的生命周期 * 初始化 * 构造方法 * init(ServletConfig)方法 init()方法 * 提供服务 * service方法 * doxxx方法 * 销毁 * destroy方法 */ private static final long serialVersionUID = 1L; @Override public void init() throws ServletException { System.out.println("Servlet类的构造方法:init()"); String level=this.getInitParameter("level"); System.out.println("在web.xml中" + "(ServletConfig接口封装Servlet实例的初始化配置信息)" + "对Servlet配置初始化参数level:"+level); super.init(); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("调用service方法,可相应客户端请求."); super.service(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("调用 doGet 方法."); /* * HttpServletRequest接口:定义了大量获得请求信息的方法 * 获取请求头的方法:getHeader(name),getIntHeader(),getDateHeader(),getHearNames(),getHeaders() * 获取请求参数的方法:获取某个name的vlaue:getParameter(name), * 获取所有的Name和vlaue:getParameterValues(),getParameterNames() * 获取客户端以及服务器端信息的方法:getRemoteAddr,getRemotePort,getLocalName,getLocalPort. */ //获取请求头数据 //获取请求方式 String method=request.getMethod(); System.out.println(method); //获取请求URL StringBuffer URLtxt=request.getRequestURL(); System.out.println(URLtxt); //获取请求URL String URItxt=request.getRequestURI(); System.out.println(URItxt); //获取协议 String h=request.getScheme(); System.out.println(h); //获取请求行数据 //获取指定的请求行的信息 String vlaue=request.getHeader("age"); System.out.println(vlaue); //请求解决乱码 request.setCharacterEncoding("UTF-8"); //获取所有请求行的键的枚举 Enumeration<String> e =request.getHeaderNames(); while(e.hasMoreElements()) { String name=(String)e.nextElement(); String vlaue1=request.getHeader(name); System.out.println(name+":"+vlaue1); } //获取用户数据 String Name=request.getParameter("name"); //String age=request.getParameter("age"); int age=Integer.parseInt(request.getParameter("age")); String studentID=request.getParameter("studentID"); System.out.println(Name+":"+age+":"+studentID); /* *HttpServletResponse接口:定义大量获得响应信息的方法 * 处理响应头信息的方法: *addHeader,addIntHeader,addDateHeader,setHeader,setIntHeader *获取响应输出流及设置内容类型的方法 *getWriter:获得输出流out对象 *setContentType:设置响应的内容类型 text/html;charset=UTF-8 *响应重定向 *sendRedirect:实现响应重定向功能,用来将响应重新定向到其他页面,生成响应给客户端. */ if(age<25) { //设置响应的内容类型和响应解决乱码 response.setContentType("text/html;charset=UTF-8"); //获取响应的输出流 // PrintWriter out=response.getWriter(); // String title="登录界面"; // String docType = // "<!DOCTYPE html>\n"; // out.println(docType + // "<html>\n" + // "<head><title>" + title + "</title></head>\n"+ // "<body>\n" + // "<h1>" + title + "</h1>\n" + // "<p>欢迎登录!你的用户名是:<font color=red>"+Name+"</p>\n"+ // "<p>你的学号是:<font color=red>"+studentID+"</p>\n"+ // "</body></html>"); // out.close(); request.getRequestDispatcher("denglv.html").forward(request, response); }else { /*重定向:sendRedirect(location) *两次请求和响应 *地址栏会变化 *带工程名路径 *可以定向到任何网站 *请求转发(将request信息传递下去): *getRequestDispatcher(path).forward(request, response); *请求转发器的接口是RequestDispatcher: * ServletRequest接口中的getRequestDispatcher获得, * 请求转发方法forword(request, response); *Servlet内部调用 *地址栏不会变化 *路径不带工程名 *只能在本网站内部 *https://blog.csdn.net/kangkanggegeg/article/details/74044466 */ response.sendRedirect("index.jsp"); request.getRequestDispatcher("index.jsp").forward(request, response); // // 设置响应内容类型 // response.setContentType("text/html;charset=UTF-8"); // // 要重定向的新位置 // String site = new String("http://www.baidu.com"); // //setStatus()为该响应设置状态码。 // response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); // //setHeader(name,value)设置一个带有给定的名称和值的响应报头。 // response.setHeader("Location", site); } /**请求属性 * 需要结合业务逻辑Bean NameService的实现 * void setAttribute(string name,object o):存储属性,将对象o是用名字name存储到请求对象中; * Object getAttribute(string name):返回请求属性,通过属性的名字获取属性值 * void removeAttribute(string name):通过属性名字name删除请求中对应的属性. */ } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("调用 doPost 方法."); doGet(req,resp); } @Override public void destroy() { System.out.println("destroy方法被容器调用,表示Servlet实例被销毁."); super.destroy(); } }

写于2020-10-20

最新回复(0)