你还不知道jsp和servlet的关系吗?

什么是Servlet

1、servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

2、Servlet 是 JavaEE 规范之一,规范就是接口。


Servlet 程序的示例代码:

public class HelloServlet implements Servlet {
/**
* service 方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
	public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws
	ServletException, IOException {
		System.out.println("Hello Servlet 被访问了");
	}
}

web.xml 中的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
					xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
							http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
			version="4.0">
  
<!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
<servlet>
	<!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
	<servlet-name>HelloServlet</servlet-name>
  
	<!--servlet-class 是 Servlet 程序的全类名-->
	<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
  
<!--servlet-mapping 标签给 servlet 程序配置访问地址-->
<servlet-mapping>
	<!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用-->
	<servlet-name>HelloServlet</servlet-name>
  
	<!--url-pattern 标签配置访问地址 <br/>
	/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 <br/>
	/hello 表示地址为:http://ip:port/工程路径/hello <br/>
	-->
	<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

Servlet 类的代码:

public class HelloServlet2 extends HttpServlet {
	/**
	* doGet()在 get 请求的时候调用
	* @param req
	* @param resp
	* @throws ServletException
	* @throws IOException
	*/
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
	IOException {
		System.out.println("HelloServlet2 的 doGet 方法");
	}
  	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
	IOException {
	System.out.println("HelloServlet2 的 doPost 方法");
	}
  
}

web.xml 中的配置:
如上配置就行


什么是Jsp

jsp 的全换是 java server pages。Java 的服务器页面。
jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。
因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。

Servlet 回传 html 页面数据的代码:

public class PringHtml extends HttpServlet {
    
    
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
	IOException {
    
    
		// 通过响应的回传流回传 html 页面数据
		resp.setContentType("text/html; charset=UTF-8");
		PrintWriter writer = resp.getWriter();
		writer.write("<!DOCTYPE html>\r\n");
		writer.write(" <html lang=\"en\">\r\n");
		writer.write(" <head>\r\n");
		writer.write(" <meta charset=\"UTF-8\">\r\n");
		writer.write(" <title>Title</title>\r\n");
		writer.write(" </head>\r\n");
		writer.write(" <body>\r\n");
		writer.write(" 这是 html 页面数据 \r\n");
		writer.write(" </body>\r\n");
		writer.write("</html>\r\n");
		writer.write("\r\n");
	}
}

jsp 回传一个简单 html 页面的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
这是 html 页面数据
</body>
</html>

jsp和Servlet的联系

jsp 页面本质上是一个 Servlet 程序。

当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成 为.class 字节码程序。我们打开 翻译的java 源文件不难发现其里面的内容是:

在这里插入图片描述

我们跟踪原代码发现,HttpJspBase 类。它直接地继承了 HttpServlet 类。也就是说。jsp 翻译出来的 java 类,它间接了继承了 HttpServlet 类。也就是说,翻译出来的是一个 Servlet 程序。

在这里插入图片描述

总结:通过翻译的 java 源代码我们就可以得到结果:jsp 就是 Servlet 程序。

猜你喜欢

转载自blog.csdn.net/weixin_46438851/article/details/122871737