Java中的Servlet是什么?Tomcat和Servlet的关系?

Java中的Servlet是什么?

百度百科-Servlet:

        Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

        狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

更具体的理解如下:

        Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

举个栗子:
        1、比如说你在一个网页上输入姓名和密码,然后点击提交。这时候页面就会跳转(跳转方法有post和get)。
        2、跳转到哪呢,这就通过web.xml文件配置你的跳转,一般就跳转到servlet来处理。
        3、servlet说白了,就是一个java类,继承HttpServlet,主要有doGet和doPost方法,你在页面代码写的是get方法跳转,那么就运行servlet里doGet方法里面的代码(post同理)。
        4、doGet里面的代码就处理操作,一般首先用特定方法获得页面提交的姓名和密码,然后进行处理(判断是否合法等等),处理玩之后,决定是直接显示信息,还是跳转到其他页面。

        servlet就是接收页面信息,然后进行逻辑处理的一个java类。

        servlet是用来做Web开发的,做为控制层来处理用户的请求信息的。Servlet是BS开发的基础,了解了Servlet,今后对你学习JSP,以及框架都有很大的帮助。正常工作时,Servlet使用并不多,都是使用SpringMVC/Struts2来代替Servlet完成的功能的。

        你可以这样的理解,当你点击一个网页上的链接时,都会像服务器提交一个请求,这个请求分为两种,一种是post请求,一种是get请求。而对应的Servlet处理请求中,也有一个doget()和dopost()方法。Servlet处理完结果后,会往不同的作用域中放处理完的信息,返回到网页显示。

Tomcat和Servlet的关系?

        总的来说,Tomcat是服务器,而Servlet是一种运行在服务器端的Java应用程序。

        Tomcat 是Web应用服务器,是一个Servlet/JSP容器。 Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户(上述举例讲了此过程)。而Servlet是一种运行在支持Java语言的服务器上的组件。

        一个实现了Servlet接口的Java类被称为一个Servlet,JSP实现了Servlet接口,所以说JSP本质上是一个Servlet。不过,JSP这个实现接口的方式隐藏得比较深,得从源码上才能看出。

Tomcat服务器上部署JavaWeb项目(Servlet的应用实例)

        在Tomcat服务器上部署JavaWeb程序,通过Servlet来响应浏览器的下载请求,下载的是服务器中的一张图片,实例如下。

        FileServlet.java(继承了HttpServlet)

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileServlet extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1.要获取下载文件的路径
		String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/wq.jpg");
		System.out.println("获取下载文件的路径:"+realPath);
		//2.要下载的文件名是啥?
		String filename = realPath.substring(realPath.lastIndexOf("\\")+1);
		System.out.println(filename);
		//3.设置想办法让浏览器能够支持(Content-Disposition)下载我们需要的资源
		resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(filename, "UTF-8"));
		//4.获取下载文件的输入流
		FileInputStream in = new FileInputStream(realPath);
		//5.创建缓冲区
		int len=0;
		byte[] buffer = new byte[1024];
		//6.获得OutputStream对象
		ServletOutputStream out = resp.getOutputStream();
		//7.将FileOutputStream流写入到buffer缓冲区中,使用OutputStream将缓冲区中的数据输出到客户端!
		while((len = in.read(buffer))!=-1){
			out.write(buffer,0,len);
		}
		
		//关闭
		in.close();
		out.close();
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}
}

        每个Servlet都需要在JavaWeb项目的核心配置文件web.xml中进行注册,如下。

        web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  
	<!-- 注册Servlet -->
	<servlet>
		<servlet-name>filedown</servlet-name>
		<servlet-class>com.kuang.servlet.FileServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>filedown</servlet-name>
		<url-pattern>/down</url-pattern>
	</servlet-mapping>
    
</web-app>

        通过eclipse中内置浏览器进行请求, 输入内容:http://localhost:8080/javaweb_servlet05/down,然后弹出了如下窗口,点击保存即可下载。


        参考链接:https://blog.csdn.net/plpldog/article/details/82665010

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值