Servlet总结
2026/7/28 18:30:28 网站建设 项目流程

Servlet总结

文章目录

    • Servlet总结
      • 一.servlet生命周期
      • 二.doget和dopost的区别
      • 三.转发(Forward)和重定向(Redirect)的区别
      • 四.request和response

一.servlet生命周期

生命周期:Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法init方法和destroy方法只会执行一次,service方法客户端每次请求Servlet都会执行。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。

参考:《javaweb整合开发王者归来》P81

Servlet生命周期分为三个阶段:

  • 始化阶段:调用**init()**方法

  • 响应客户请求阶段:调用**service()**方法

  • 终止阶段:调用**destroy()**方法

  • 最后Servlet 是由 JVM 的垃圾回收器进行垃圾回收

架构图(图片来源菜鸟教程,若有侵权请及时联系作者)

二.doget和dopost的区别

当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

你轻轻松松的给出了一个“标准答案”:

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求只能进行url编码,而POST支持多种编码方式。
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  6. GET请求在URL中传送的参数是有长度限制的,而POST么有。
  7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  9. GET参数通过URL传递,POST放在Request body中。

(本标准答案参考自w3schools)

“很遗憾,这不是我们要的回答!”

答案在这里---->点我

三.转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为。

转发(Forward)通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。

重定向(Redirect)是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletResponsesetStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

request.getRequestDispatcher("new.jsp").forward(request,response);//转发到new.jspresponse.sendRedirect("new.jsp");//重定向到new.jsp在jsp页面中你也会看到通过下面的方式实现转发:<jsp:forward page="apage.jsp"/>当然也可以在jsp页面中实现重定向:<%response.sendRedirect("new.jsp");//重定向到new.jsp%>

假设你去办理某个执照, 重定向:你(客户端)先去了A局(当前web路径),A局的人说:“这个事情不归我们管,去B局(另一个web路径)”,然后,你就从A退了出来,自己乘车去了B局。 转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
  1. 从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

  1. 从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据. redirect:不能共享数据.

  1. 从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

  1. 从效率来说

forward:高. redirect:低.

四.request和response

request相关


获取参数方法:

request.getParameter(): 是常见的方法,用于获取单值的参数
request.getParameterValues():用于获取具有多值的参数,比如注册时候提交的 “hobies”,可以是多选的。
request.getParameterMap():用于遍历所有的参数,并返回Map类型。

其他常见方法:

request.getRequestURL():浏览器发出请求时的完整URL,包括协议 主机名 端口(端口存在情况)(http://127.0.01:8080/login)
request.getRequestURI():浏览器发出请求的资源名部分,去掉了协议和主机名(/login)
request.getQueryString():请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr():浏览器所处于的客户机的IP地址
request.getRemoteHost():浏览器所处于的客户机的主机名
request.getRemotePort():浏览器所处于的客户机使用的网络端口
request.getLocalAddr():服务器的IP地址
request.getLocalName():服务器的主机名
request.getMethod():得到客户机请求方式一般是GET或者POST

<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";%><!DOCTYPEhtml><html><head><meta charset="UTF-8"><base href="<%=basePath %>"><title>Insert title here</title><script type="text/javascript"src="<%=basePath %>js/index.js"></script><script type="text/javascript"src="/web2/js/index.js"></script></head><body><!--注释是html的注释 http://localhost:8080/web2/index.jsp 请求地址 请求交给tomcat服务器 tomcat会查找index.jsp 如果存在,解析index.jsp 转换成html文本,然后再返回给浏览器 请求有可能是是https请求--><%// 编写的java代码//获取请求协议 request对象 tomcat负责创建对象String protocol=request.getProtocol();//如何打印输出变量 只会输出到控制台 不会输出到页面System.out.println(protocol);//out对象可以在页面输出out.write("请求的协议:"+protocol+"<br>");%><%=protocol%><%//获取服务器地址String serverName=request.getServerName();out.write("服务器地址:"+serverName+"<br>");//端口号int port=request.getServerPort();out.write("服务器端口:"+port+"<br>");//上下文路径,项目发布路径String contextPath=request.getContextPath();out.write("上下文路径:"+contextPath+"<br>");//资源路径String uri=request.getRequestURI();out.write("uri 路径包括上下文路径 :"+uri+"<br>");StringBuffer url=request.getRequestURL();out.write("url 是请求地址的一个完整路径 :"+url+"<br>");String scheme=request.getScheme();out.write("scheme 协议的名称 :"+scheme+"<br>");//远程请求的ip 访问者的ip地址String addr=request.getRemoteAddr();out.write("访问者的ip地址 :"+addr+"<br>");String host=request.getRemoteHost();System.out.println(host);//访问者的ip地址 :0:0:0:0:0:0:0:1//访问者的ip地址 :50918int port2=request.getRemotePort();out.write("访问者的主机地址 :"+host+"<br>");out.write("访问者的端口 :"+port2+"<br>");%><!--输出jsp的变量--><%--jsp的注释--%><%--<%=protocol%>--%><a href="regUI.jsp">注册</a><br><a href="WEB-INF/testWeb-inf.jsp">访问WEB-INF路径下的资源,是不允许直接访问</a><br><a href="mid.jsp">通过jsp去访问放在WEB-INF路径下的资源</a><br></body></html>

response相关


1.设置响应内容

PrintWriter writer=response.getWriter();writer.write("result");writer.flush();writer.close();

通过response.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。

2.设置响格式和编码

需要在response.getWriter调用之前执行才能生效。

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

se.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。

2.设置响格式和编码

需要在response.getWriter调用之前执行才能生效。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询