① java中的Servlet的定义,Servlet的具体用途
Servlet是一个实现了Servlet接口的类,一个与访问协议和平台无关的、运行在Servlet容器中的Java程序。
针对Servlet实现技术,SUN公司提供了一套标准的Java Servlet API以便于更快速、规范地开发Servlet程序。这套Servlet API中,最重要的两个软件包是:javax.servlet、javax.servlet.http。
javax.servlet是一个与通信协议无关的通用软件包;javax.servlet.http是一个支持HTTP访问协议的软件包,这两个软件包的同时存在,使得Servlet API能支持任何协议的请求/响应。
在javax.servle中,包含着一套常用接口,负责承担指定的任务。下表中列出了常用的类和接口:
javax.servlet软件包:
javax.servlet包中定义了与通信协议无关的接口和类。
常用接口:
RequestDispatcher、Servlet、ServletConfig、ServletContext、ServletRequest、ServletResponse。
常用类:
GenericServlet、ServletInputStream、ServletOutputStream。
1、RequestDispatcher接口
public interface RequestDispatcher;
资源调度器接口,用于定义一个在服务器内部直接实现资源转发的对象。
RequestDispatcher对象由Servlet容器创建,用于封装并调度由一个特定的URL定义的服务器资源。
(1)请求传递方法
public void forward(ServletRequest request,
ServletReponse response) throws ServletException,IOException
从一个Servlet向服务器上的另一个资源传递请求。
将请求转发给其他资源时,将由被调用的资源负责对请求作出响应,而原先Servlet的执行则终止。
public void include(ServletRequest request,
ServletResponse response) throws ServletException,IOException
从一个Servlet向服务器上的另一个资源传递请求。
将请求转发给其他资源时,被调用的Servlet对该请求作出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应消息。
2、Servlet接口
public interface Servlet;
开发一个Servlet需要实现的基础接口。
接口中定义了5个方法:
init():Servlet初始化方法,通过init()方法可以获得容器创建的ServletConfig对象
service():请求处理方法
destroy():Servlet实例销毁方法
getServletConfig():获取ServletConfig配置对象方法
getServletInfo():获取Servlet相关信息方法
(1)初始化方法
public void init(ServletConfig config) throws ServletException
Servlet容器会在Servlet实例化之后,调用init方法对Servlet对象进行初始化,该方法由Servlet容器顺序调用,无需Servlet自身考虑何时执行。
(2)服务方法
public void service(ServletRequest request,
ServletResponse response) throws ServletException,IOException
当Servlet容器接收到客户请求时,调用service方法响应客户请求,service方法在Servlet实例化、初始化之后被调用,并且可以被多次调用。
(3)销毁方法
public void destroy()
当Servlet实例从服务器中移除或服务停止时,Servlet容器调用destroy方法销毁Servlet实例。
(4)获取Servlet配置对象方法
public ServletConfig getServletConfig()
获取一个由Servlet容器创建的ServletConfig配置对象,这个对象常常用在Servlet初始化方法中,将初始化参数封装在ServletConfig对象中,然后传递给Servlet。
(5)获取Servlet相关信息方法
public String getServletInfo()
获取关于Servlet的一些相关信息,返回的字符串是纯文本格式而不带有任何标记(例如:HTML、XML等)。
3、ServletConfig接口
public interface ServletConfig;
Servlet配置信息接口,在Servlet初始化时,Servlet容器将Servlet初始化参数封装在ServletConfig对象中,并传递给Servlet,一个Servlet实例只有一个ServletConfig对象。
接口中,只定义了4个方法:
getInitParameter():获取Servlet指定初始化参数的值
getInitParameterNames():获取Servlet所有初始化参数名称
getServletContext():获取Servlet容器为WEB应用创建的Servlet上下文环境对象ServletContext
getServletName():获取Servlet名称
(1)获取初始化参数方法
public String getInitParameter(String name)
根据初始化参数名称,获取Servlet指定初始化参数的值,如果指定的参数不存在,返回空值null。
public Enumeration getInitParameterNames()
获取Servlet所有初始化参数名称,如果Servlet没有初始化参数,返回一个空列表。
(2)获取Servlet上下文环境方法
public ServletContext getServletContext()
获取Servlet容器为WEB应用创建的Servlet上下文环境对象ServletContext,WEB服务器启动的时候,在加载WEB应用时,为每个加载的WEB应用创建一个代表WEB应用Servlet上下文环境对象。
(3)获取Servlet名称方法
public String getServletName()
获取正在访问的这个Servlet的名称。
以上就是Servlet相关问题的解答,更多关于Java Web方面的问题可以看下这个详细的视频教程网页链接,希望我的回答能帮到你。
② 怎么在MyEclipse中创建servlet3.0
1、启动MyEclipse
2、点击上图“File”工具栏
3、将鼠标移到“New Alt+Shift+N”,然后再选中并点击红框框绝仿郑定的大槐“Web Project”选项
4、对上图进行如下操作:
a、"Project Name"(蓝框框定处)输入创建的项目名;此处输入test;
b、选中“Java EE 6.0”,注意:有些MyEclipse没有这个选项,这是其版本低的原因造成的(我这里使用的是MyEclipse 10);
c、完成上面两步操作后直接点击“Finish”按钮即可;
5、通过上图三处被红框框定文字可以发现该工程已经是servlet3.0版本的了。选中新建工程中src,鼠标右键——>鼠标移至“New”
6、选中并点击上图中被红框框定并颂的“Servlet”选项
7、对上图进行如下操作:
a、"Package"(红框框定处)输入所创建servlet的包名;此处输入com.ghj.packageofservlet;
b、"Name"(蓝框框定处)输入所创建servlet的名;此处输入TestServlet;
c、完成上面两步操作后直接点击“Next”按钮即可;
8、对上图进行如下操作:如果要使用Servlet3.0新特性——采用注释的方式该servlet接受的请求路径,则取消上图被红框框定的复选框(取消后web.xml文件中将不会含有创建的Servlet的一些配置信息,此处取消该复选选中项);否则直接点击“Finish”按钮即可。至此3.0版的Servlet创建成功。将该Servlet修改为如下代码:
package com.ghj.packageofservlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/TestServlet")//标明本servlet只接收TestServlet请求
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -4016775927444534220L;
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!doctype html public \"-//w3c//dtd html 4.01 transitional//en\">");
out.println("<html>");
out.println("<head><title>超链接请求显示结果</title></head>");
out.println("<body>");
out.print("<center style=\"margin-top:20%;\"><font style=\"font-weight:bold;font-size:30pt;color:red;\">恭喜你,请求成功!本响应来自于Servlet。</font></center>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
}
9、将创建工程时已创建的index.jsp作如下修改:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试首页</title>
</head>
<body>
<a href="<%=basePath%>TestServlet">测试</a>
</body>
</html>
10、启动Tomcat,发布该项目;在浏览器中输入http://127.0.0.1:8080/test/,点击回车键(Enter键)
11、点击上面“测试”(红框框定处)超链接,
③ html与servlet间参数传递问题
首先保知举证所有文件编码一致
如果还有就写个过滤器氏搏吧,一劳永逸
三、字符编码的过滤器
import javax.servlet.*;
import java.io.IOException;
/**
* 用于设置 HTTP 请求字符编码的过滤器搭核碧,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题
*/
public class CharacterEncodingFilter
implements Filter
{
protected FilterConfig filterConfig = null;
protected String encoding = "";
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
if(encoding != null)
servletRequest.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy()
{
filterConfig = null;
encoding = null;
}
public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
}
具体介绍和使用方法教程看这里
④ servlet request请求对象常用方法总结
1. request请求对象常用方法:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset = utf-8");
this.response = response;
out = this.response.getWriter();
println("<ol>");
//1. 获取请求方式、处理乱码问题
String method = request.getMethod();
//servletRequest中的方法
request.setCharacterEncoding("utf-8");
//1. 获取请求体的编码方式
String characterEncoding = request.getCharacterEncoding();
println("getCharacterEncoding = " + characterEncoding);
//2. get body length
int contentLength = request.getContentLength();
println("getContentLength = " + contentLength);
//3. MIME type
String mimeType = request.getContentType();
println("getContentType = " + mimeType);
//4. 接收请求的接口的 Internet Protocol (IP) 地址
String ip = request.getLocalAddr();
println("getLocalAddr = "缓闭晌 + ip);
//5. 基于 Accept-Language 头,返回客户端将用来接受内容的首选态裂 Locale 客户端语言环境
Locale locale = request.getLocale();
println("getLocale = " + locale);
//6. 所有的语言环境扰锋
Enumeration<Locale> locales = request.getLocales();
while(locales.hasMoreElements()){
Locale temp = locales.nextElement();
println("\n Locales = " + temp);
}
//7. 接收请求的 Internet Protocol (IP) 接口的主机名
String localName = request.getLocalName();
println("localName = " + localName);
//8. 接收请求的接口的 Internet Protocol (IP) 端口号
int localPort = request.getLocalPort();
println("localPort = " + localPort);
//9. 返回请求使用的协议的名称和版本
String protocol = request.getProtocol();
println("protocol = " + protocol);
//10. 读取请求正文信息
BufferedReader reader = request.getReader();
println("getReader = " + reader.toString());
//11. 发送请求的客户端
String remoteAddr = request.getRemoteAddr();
println("RemoteAddr = " + remoteAddr);
//12. 发送请求的客户主机
String remoteHost = request.getRemoteHost();
println("RemoteHost = " + remoteHost);
//13. 发送请求的客户主机端口
int remotePort = request.getRemotePort();
println("RemotePort = " + remotePort);
//14. 返回用于发出此请求的方案名称,例如:http 、 https 、 ftp
String scheme = request.getScheme();
println("Scheme = " + scheme);
//15. 返回请求被发送到的服务器的主机名。它是Host头值":"(如果有)之前的那部分的值。 或者解析服务器名称或服务器的IP地址
String serverName = request.getServerName();
println("ServerName = " + serverName);
//16. 返回请求被发送到的端口。他是"Host"头值":" (如果有)之后的那部分的值,或者接受客户端连接的服务器端口。
int serverPort = request.getServerPort();
println("ServerPort = " + serverPort);
//17. 返回一个boolean值,指示此请求是否是使用安全通道(比如HTTPS) 发出的。
boolean secure = request.isSecure();
println("isSecure = " + secure);
//以上方法为 ServletRequest 接口提供的
//以下方法为 HttpServletRequest 接口提供的
/*
* 18. 返回用于保护servlet的验证方法名称。 所有的servlet容器都支持
* basic、 form和client certificate验证, 并且可能还支持digest验证
*/
String authType = request.getAuthType();
println("authType = " + authType);
//19. getDateHeader ??
request.getDateHeader("");
//20. 返回请求头包含的所有头名称的枚举。
Enumeration<String> headerNames = request.getHeaderNames();
println("<hr/>");
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
println(" headerNmea = " + name + ";getHeader = " + request.getHeader(name));
}
println("<hr/>");
//21. 以int的形式返回指定请求头的值。 ???
request.getIntHeader("123");
//22. 返回与客户端发出此请求时发送的URL相关联的额外路径信息。
String pathInfo = request.getPathInfo();
println("PathInfo = " + pathInfo);
//23. 返回包含在请求RUL中路径后面的查询字符串。如果没有查询字符串返回null
String remoteUser = request.getRemoteUser();
println("RemoteUser = " + remoteUser);
//24. 返回客户端制定的回话ID
String requestedSessionId = request.getRequestedSessionId();
println("requestSessionId = " + requestedSessionId);
//25. 返回请求调用servlet的URL部分
String servletPath = request.getServletPath();
println("servletPath = " + servletPath);
//26. 返回与此请求关联的当前HttpSession,如果没有当前会话并且参数为true,则返回一个新会话。
HttpSession session = request.getSession(true);
println("getSession(true) = " + session);
//27. 返回包含当前已经过验证的用户的名称的java.security.Principal对象。如果用户没有经过验证,则该方法返回null
Principal userPrincipal = request.getUserPrincipal();
println("userPrincipal = " + userPrincipal);
//28. 检查会话的id是否作为Cook进入的
boolean sessionIdFromCookie = request.();
println("sessionIdFromCookie = " + sessionIdFromCookie);
//29. 检查请求的会话ID是否作为请求的URL的一部分进入的
boolean sessionIdFromURL = request.isRequestedSessionIdFromURL();
println("sessionIdFormURL = " + sessionIdFromURL);
//30.
println("</ol>");
out.flush();
out.close();
}
public void println(Object obj){
this.response.setContentType("text/html;charset=utf-8");
try {
out.println("<li>");
out.println(obj);
out.println("</li>\n");
} catch (Exception e) {
e.printStackTrace();
}
}
2. 运行结果
getCharacterEncoding = utf-8
getContentLength = -1
getContentType = null
getLocalAddr = 127.0.0.1
getLocale = zh_CN
Locales = zh_CN
Locales = zh
Locales = en_US
Locales = en
localName = lm.licenses.adobe.com
localPort = 8080
protocol = HTTP/1.1
getReader = org.apache.catalina.connector.CoyoteReader@17b8d3d
RemoteAddr = 127.0.0.1
RemoteHost = 127.0.0.1
RemotePort = 57814
Scheme = http
ServerName = localhost
ServerPort = 8080
isSecure = false
authType = null
headerNmea = host;getHeader = localhost:8080
headerNmea = user-agent;getHeader = Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0
headerNmea = accept;getHeader = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
headerNmea = accept-language;getHeader = zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
headerNmea = accept-encoding;getHeader = gzip, deflate
headerNmea = cookie;getHeader = JSESSIONID=
headerNmea = connection;getHeader = keep-alive
PathInfo = null
RemoteUser = null
requestSessionId =
servletPath = /req
getSession(true) = org.apache.catalina.session.StandardSessionFacade@1fcf1ba
userPrincipal = null
sessionIdFromCookie = true
sessionIdFormURL = false
⑤ JavaWeb中Servlet必须要在web.xml中配置吗
Java 的Web标准就是jsp+Servlet,而Structs,Spring MVC的哦是基于拦截器的。。姿液
如果要让Servlet工迹缓物作,这必须要多Sevelet进行哪塌配置。Servlet 常规都是在web.xml配置的。
⑥ 大神 求马士兵的servlet的视频教程 找了好久没找到
马士兵的好多视频现在网上下不到了,只有j2se基础和script等 servlet可以换个人的啊 李兴华,韩顺平 都讲得还可以
⑦ 实现servlet功能需要哪些组件
1、Servlet是Java EE应用中另一种常用的组件,是继JDBC后,Java EE技术的第二个重要发明。
2、JSP与Servlet的区别:
JSP是嵌入Java代码的HTML页面,JSP页面是转换为Servlet来执行的。
Servlet是嵌入了判樱HTML的Java类。
3、Servlet执行请求和响应的处理。
4、在Web应用程序中,<servlet>元素是用于描述Servlet的基本元素。<servlet>可以有下面的子元素:
[html]view plain
·<icon>
·<servlet-name>:定义一个用户友好的名称,用于表示所用到的资源。
·<display-name>
·<description>
·<servlet-class>:定义Servlet类的完整路径名。
·<jsp-file>:定义JSP文件类的完整路径名。
·<init-paran>:定义Servlet的参数
·<load-on-startup>:用一个整数表明服务器启动时应该调用的Servlet的相对次序:具有小值的Servlet排在具有大值的Servlet的前面,相同值得Servlet会按照任意顺序调用。
·<run-as>
·<security-role-ref>
注意:必须要有的元素<servlet-name>以及< servlet -class>或者<jsp-file>之一。
5、<servlet-mapping>:用于一给定的Servlet名称与相应请求URI之间的映射。
6、因为Servlet容器只能调用Servlet类的无参的构造函数,同时当你的Servlet类没提过任何一个构造函数是,Java会自动提过一个无参数的构造函数,所以不必为Servlet类编写任何构造函数。
7、Servlet的生命周期:
1)、载入和实例化:Servlet容器赌气每个部署描述文件Web.xml文件,之后载入部署描述文件中指定的Servlet类。然后调用无参的构造函数来实例化每个Servlet类。
2)、初始化:Servlet容器调用Servlet类的init(ServletConfig)方法实现初始化。这个方法是用父类GenericServlet提供的。
·init()方法的作用:读取Servlet的初始化参数或配置数据、初始化岁冲伍外部资源(如数据库连接),以及执行其他一次性的动作。
·GenericServlet类的init()有一下两种形式:
publicvoid init() throws ServletException
publicvoid init(ServletConfig) throws ServletException
·第二个方法中ServletConfig对象来自:如上第4点提到的<Servlet>的子元素<init-paran>元素定义Servlet的参数,Servlet容器从Web.xml文件读取这些参数,然后把它们按“名/值对”保存到ServletConfig对象中。
·init(ServletConfig),首先保存ServletConfig引用,然后调用init()方法。init()方法可以访问ServletConfig引用中的所有初始化参数。
·如果在自定义的Servlet中实现init(ServletConfig),那么一定要调用超类的init(ServletConfig)方法。如果实现init(ServletConfig)的时候没调用super. 实现init(ServletConfig)方法,那么ServletConfig引用不会被保存下来,而且Servlet或其父类不能在后续生命周期中访问ServletConfig对象。
· 如果在init()的过程中遇到问题,应当抛出乎或ServletException类或其子类UnavailableExcption。这会告诉容器在初始化过程中存在问题,并且不应该使用这个Servlet来处理请求。使用UnavailableExcption可以设定Servlet的无效时长,过了这个时长,容器将去重新调用init()。
·UnavailableExcption有以下构造函数
public UnavailableExcption(Stringmsg, int seconds)
其中int参数是一个整数:负数和零值表示不能判断该Servlet什么时候可以再用。正 整数值则说明服务器应当在若干秒之后再去重新初始化这个Servlet。
3)、请求的处理:Servlet容器调用service()方法。跟init()方法方法一样会抛出ServletException类或其子类UnavailableExcption异常,不同的是这里创建的UnavailableExcption无指定的无效时长,所以一旦抛出异常Servlet容器必须终止Servlet的生命周期。
4)、声明周期结束:Servlet容器调用destroy()方法。但是容器必须等到仍在运行的请求处理线程结束之后或服务器定义的超出时间结束时,才调用destroy()方法。这个方法也是GenericServlet父类实现的,如果你的Servlet实例不需要执行任何收尾工作,无需实现这个方法。在destroy()方法执行之后,容器释放对该Servlet实例的引用。
注意:destroy()方法并不的销毁Servlet或引发对它的垃圾收集。它只是在恰当的实际简单地清除Servlet所使用和打开的资源。显然,在调用这个方法之后,容器将不再给这个Servlet转发任何请求。
8、如何使得Servlet的线程安全:
1)、用方法变量保存请求中的专有数据。
数据保存在方法变量中,即局部变量。这时,进入这个方法的每个线程都有自己的一份方法变量拷贝。因此,任何线程都不会修改其他线程的数据成员。如果要在不同的请求之间保存一份数据,那么应该用会话(session)来存储这类数据。
2)、只用Servlet成员变量保存那么不会改变的数据。
这类数据保存查询数据库连接名称、其他资源的路径、其他Web组件的路径等等。
3)、同步访问你那些可能请求修改的成员变量。
4)、如果Servlet访问外部资源,那么需要同步访问这些资源。
例如文件访问本身不是线程安全的,所以必须编写同步访问这个资源的代码。
⑧ 如何将已生成的pdf文件通过servlet显示到页面
首先从获得 servlet 的输出流开始:ServletOutputStream out = res.getOutputStream();。
互联网上使用 MIME (multipurpos Internet mail extension 多目的互联网邮件扩展协议)来传送混合格式、多媒体和二进制数据文件。如果要在 servlet 的 response 对象中打开某个文档,就必须设置该文档的 MIME 类型。HTTP response header中的content-disposition 允许 servlet 指定文档表示的信息。
(8)servlet30教程扩展阅读:
一个客户端的请求到达 Server的过程:
1、Server 创建一个请求对象,处理客户端请求
2、Server 创建一个响应对象,响应客户端请求
3、Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数
4、service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法。
⑨ java servlet怎么学
首先我们要了解Servlet是什么,下面就详细讲解下Servlet特性和功能
一、Servlet是什么
Servlet是一个类,是一个用Java语言编写的、实现Servlet接口的类,一个与访问协议和平台无关的,运行在Servlet容器中的Java程序。
Servlet没有main方法,不能独立运行;它只有实例化、初始化、运行、销毁方法,被编译成与平台无关的字节码文件后,需要加载到Servlet容器中才能执行,并且由Servlet容器管理Servlet的整个生命周期,所以,也常常称Servlet是Servlet容器上运行的服务器小程序。
Servlet推出初期,主要是作为支持HTTP协议的WEB服务器上的一种动态网页技术;随着Servlet技术的不断发展,Servlet可以作为支持任何协议的、实现Java API的服务器上的服务程序。
Servlet运行在服务器上,它可以接受来自客户端的请求,并将处理结果返回给客户端,于是,在许多应用中,Servlet主要用于实现动态网页,亦或作为前端页面与后台数据库或者后台服务器程序之间的中间件。
二、Servlet容器
Servlet容器作为支撑Servlet运行的平台,是一个非常重要的部件。也可以把Servlet容器看成是一个装载着许多Servlet对象的容器,Servlet容器负责管理这些Servlet对象。
Servlet容器运行在JVM(Java虚拟机)之上,管理Servlet的实例化、初始化、实例对象的运行和销毁,并提供最基础的运行支撑,例如:Servlet容器负责接收请求、转发请求、发送响应、管理会话状态、实现数据共享等等。
Servlet容器至少支持通过HTTP协议访问Servlet,也可以支持其他协议,例如:HTTPS、FTP、POP、SMTP等。
访问Servlet容器中Servlet的过程如下:
(1)客户发送访问请求至Servlet容器
(2)Servlet容器接收请求,解析,然后将请求发送给相应的Servlet处理
(3)Servlet执行,将处理结果返回给Servlet容器
(4)Servlet容器接收处理结果,将处理结果返回给客户
从以上访问Servlet的过程,可以看出,Servlet容器的作用如下:
(1)接收请求:当客户请求来到时,Servlet容器负责接收请求
(2)管理与调用Servlet:Servlet容器管理Servlet的加载、实例化、初始化、调用与垃圾回收,根据请求的Servlet地址,调用要访问的Servlet
(3)返回响应结果:将Servlet的执行结果返回给客户
Servlet运行在Servlet容器中,容器为Servlet提供运行时的平台支撑,于是,在Servlet中,只需要专注于业务逻辑功能实现,而无需考虑网络通讯、垃圾回收等功能,这些基本功能由Servlet容器提供。
Servlet容器主要提供了如下功能:
(1)基本通信支持:Servlet容器提供了与WEB服务器之间的通信方法,使Servlet可以与WEB服务器轻松对话,并借助WEB服务器与客户端浏览器之间的通信机制,使Servlet容器无需自己建立Socket服务、监听通信端口、创建数据流对象等;Servlet容器定义了与WEB服务器之间的通信协议,所以,在Servlet中,无需考虑WEB服务器(例如:Tomcat)和自己的功能代码之间的API接口,只需要考虑如何在Servlet中实现业务逻辑功能(例如:处理一个订单)。
(2)管理Servlet生命周期:Servlet容器管理着Servlet的整个生命周期,负责查找、加载、实例化、初始化、调用Servlet方法,以及销毁,有了Servlet容器,就不需要考虑Servlet资源的管理。
(3)支持多线程:Servlet容器会自动为它所接收的每一个客户请求创建一个新的Java线程,以处理该请求;对于每一个客户请求,Servlet服务方法执行结束,则Servlet容器就会结束立即这个线程。
(4)声明方式实现安全:按照Servlet容器要求,使用web.xml部署描述文件或注解来配置和修改安全性,而不必将其硬编码写到Servlet类代码中。
(5)支持JSP动态页面:Servlet容器负责将JSP页面翻译成Java Servlet代码,按Servlet来管理JSP页面的运行。
根据Servlet应用模式,Servlet最常用的模式是通过Servlet容器运行在WEB服务器中,以执行请求和响应,请求与响应的典型范例是用动态网页技术实现动态网页,或者作为前端页面与后台数据库/后台服务器程序之间的中间件,于是,Servlet容器需要与WEB服务器或应用服务器结合,才能为WEB应用程序的访问提供服务。
Servlet容器可以在WEB服务器内部实现,也可以作为WEB服务器的附加构件提供,还可以实现在有WEB使能的应用服务器上,为Servlet的访问提供运行支撑。
WEB服务器启动时,Servlet容器也会随之启动。
关于WEB方面更详细的讲解可以看下这个视频教程网页链接
希望我的回答能帮到你
⑩ 初学Servlet,按照教程结果出现The requested resource is not available,求助。代码如下
<!--class指明该Servlet在哪包宽链-->
<servlet-class>com.wispei.MyFirstServlet</servlet-class>银拆
这里指的位置不对吧,锋巧枣换成com.test.MyFirstServlet试试