Servlet学习笔记

Servlet学习笔记

在看RuoYi官方文档的时候,发现很多地方都提及了Servlet。之前也看到过这个词语,只是一直没有学习这项技术。于是花了较长的时间来学习Servlet并且做下了这篇笔记,学习途中确实也解决了之前的一些疑惑,比如数据的前后端交互,客户端IP地址的获取。

Servlet 是用Java编写的服务器端程序 ,实质还是一个程序。是处在服务器端------客户端中间的一个程序。

Servlet生命周期

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。

init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

service() 方法是执行实际任务的主要方法, Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求。 service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

  public void doGet(  HttpServletRequest request, HttpServletResponse response )
            throws ServletException, IOException
  {......}

request:可以理解为浏览器发送到Servlet来的一个URL,或者是一个表单(也可以广泛的理解为数据集),官方的话语是 浏览器端的重要头信息 。

Servlet实例

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
 
  private String message;

  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");

      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}

Servlet表单数据

读取:可以认为Servlet已经把URL拿到手了,接下来要分析他

// 您可以调用 request.getParameter() 方法来获取表单参数的值。
getParameter()
// 如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
getParameterValues()
// 如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。
getParameterNames()

表单提交:Servlet能识别name,通过这个属性来读取值,但我估计name的值应该与代码中的一样

<form action="HelloForm" method="GET">
    名字:<input type="text" name="first_name">
    姓氏:<input type="text" name="last_name" />
    <input type="submit" value="提交" />
</form>
request.getParameter("first_name")

Servlet客户端HTTP请求

我理解的是一个key->value的集合

while(headerNames.hasMoreElements()) {  //是否还有下一个
    String paramName = (String)headerNames.nextElement(); 		// 下一条数据key
    out.print("<tr><td>" + paramName + "</td>\n");              // 输出key
    String paramValue = request.getHeader(paramName);		 	//通过key找value
    out.println("<td> " + paramValue + "</td></tr>\n");			// 输出value
}

Servlet HTTP 状态码

不同数字代码不同的状态码,另外,有如下函数辅助:

/* 该方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果您的反应包含了一个特殊    的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。 */
public void setStatus ( int statusCode )
// 该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。
public void sendRedirect(String url)
// 该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息。
public void sendError(int code, String message) 

Servlet 编写过滤器

滤链:在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。 说白了就是有很多拦截器,然后抽象出来就是一条链子。

// 该方法在每次一个请求/响应对 因客户端在链的末端请求资源而通过链传递时 由容器调用。
// 上面这一句话真的拗口,猜想是在每次请求/响应的时候,用这个函数作出相应的处理
public void doFilter (ServletRequest, ServletResponse, FilterChain)
// 该方法由 Web 容器调用,指示一个过滤器被放入服务。
public void init(FilterConfig filterConfig)
// 该方法由 Web 容器调用,指示一个过滤器被取出服务。
public void destroy()
// 实现 Filter 类
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) 
                         throws ServletException{
      // 获取初始化参数
      String testParam = config.getInitParameter("test-param"); 

      // 输出初始化参数
      System.out.println("Test Param: " + testParam); 
   }
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {

      // 获取客户机的 IP 地址   
      String ipAddress = request.getRemoteAddr();
      // 记录 IP 地址和当前时间戳
      System.out.println("IP "+ ipAddress + ", Time "
                                       + new Date().toString());
      // 把请求传回过滤链
      chain.doFilter(request,response);			// 这个地方不理解
   }
   public void destroy( ){
      /* 在 Filter 实例被 Web 容器从服务移除之前调用 */
   }
}

Servlet Cookies处理

Cookies 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。 一看就懂的就不做笔记了。

Servlet Session跟踪

session会话我的理解是对于每一次用户连接或者一个对象操作,用一个session给它绑定,然后记录中间发生的事情,记录某次状态。

HttpSession 对象: Servlet 提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

Servlet 网页重定向

sendRedirect()

总结

我的理解:Servlet是一个位于服务器和客户机之间的一个程序,他主要用于二者之间的信息交流,数据传递。与计算机网络、浏览器相关的东西,它都能沾点边。

本文仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值