Servlet原理和用法

Servlet工作原理

  • 客户端发送请求至服务器
  • 服务器将请求信息发送至servlet
  • Servlet生成相应内容并传给服务器,响应内容动态生成,取决于客户端的请求
  • 服务器将响应返回给客户端

生命周期
Servlet的生命周期通过java.servlet.Servlet接口中的init()、service()、和destroy()方法表示。Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。

编写一个Servlet

首先new一个class

public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) {
	try {
		response.getWriter().println("<h1>Hello Servlet!</h1>");
        response.getWriter().println(new Date().toLocaleString());
		
	}catch(Exception e){
		e.printStackTrace();
	}
}
}

(此处的doGet方法源自于Servlet接口下的唯一服务方法service,分为doGet方法和doPost方法。
doGet方法不可用于提交二进制文件,比如上传文件,同时大小只有1024字节。因为是参数传递,且会在地址栏中显示,所以安全性差,会直接显示用户信息。
doPost方法必须在配置中通过<action=“login” form method=“post”>来指定,否则默认为doGet,post方式提交数据时采用HTTP的post机制,将表单中的字段和值放在HTTP HEADER内一起传送到action所指的url中,用户不可见,所以是安全的)

然后在WEB-CONTENT/WEB-INF下创建web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
   <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello.html</url-pattern>
    </servlet-mapping>
    </web-app>

:url-pattern拥有自己的匹配规则
大致分为:精准匹配,路径匹配,拓展名匹配和缺省匹配
优先级从前往后
精准匹配如代码所示,单斜杠/,且url完全匹配。
路径匹配格式为/hello/
会匹配hello路径下所有的url
拓展名匹配格式为
.action 会匹配拓展名为.action的url
以上都不符合 则缺省匹配
*

最后配置tomcat访问路径,启动

细节:

加载:servlet实例的创建和init方法的调用是在第一次请求时,而非服务器启动时,除非在servlet标签配置load-on-start-up,数字越小优先级越高。
请求:服务器针对客户端的每一次请求都会创建新的request和response对象(它们的生命周期很短),传给service方法。
掌握response和request对象也很重要
详见https://blog.csdn.net/a859522265/article/details/7259115

ServletContext

概念

一个web应用所有servlet共享同一个ServletContext对象,可实现数据共享。ServletContext被称为context域对象。

域:作用范围;context域:整个应用程序范围。

ServletContext域:

这是一个容器
说明了这个容器的作用范围,也就是应用程序范围
转发:客户机一次请求;重定向:客户机两次请求

作用

获取web应用的初始化参数
实现servlet转发
利用ServletContext对象读取资源文件
获得文件路径
读取资源文件的三种方式
.properties文件(属性文件)
配置文件:properties文件和xml文件;数据有关系使用xml文件,没有关系则使用properties文件。

1.通过ServletContext的getResourceAsStream方法,读取properties文件

模板代码(注意文件位置不同写路径会不同):

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/org/iot/servlet/db.properties");
Properties properties = new Properties();//map
properties.load(in);

2.通过servletContext的getRealPath方法得到资源的绝对路径,再通过传统方式(FileInputStream)读取

3.通过类装载器去读,ClassLoader的getResourceAsStream(如果读取资源文件的程序不是servlet),文件不能太大。只装载一次,所以如要读到更新后的数据,通过类装载的方式得到资源文件的位置,再通过传统方式读取资源文件的数据(用getResource得到path,再用FileInputStream)

而JSP则是serlvet的拓展,从编写角度来说,可以理解将servlet看做含有HTML的java程序,而JSP则是含有java代码的HTML页面。明日附上JSP原理和用法笔记~~

发布了26 篇原创文章 · 获赞 1 · 访问量 483

猜你喜欢

转载自blog.csdn.net/Vince_Wang1/article/details/103951185