servlet是啥东西?它与Web应用服务器之间是啥关系?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet是啥东西?它与Web应用服务器之间是啥关系?相关的知识,希望对你有一定的参考价值。
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。追问什么是服务器端的Java应用程序?
追答就是在web服务器运行的java程序
参考技术A servlet是服务器端的一个容器。你可以这么理解:从浏览器端发送的请求到达服务器端后,都是由servlet进行管理、分配以及处理结束后要返回给浏览器哪个界面 参考技术B 简单的说吧,servlet就是负责处理用户的请求信息的。当一个请求传给它时,它就根据用户的请求调用相应的处理响应的方法,然后把处理后的结果封装传给jsp页面去显示结果。在web服务器中是整个程序的中枢吧,核心的业务处理都在这里处理完成。 参考技术C Servlet是java的高级应用j2ee的一个组成部分Servlet是用来生存动态网页的
JSP/Servlet Web 学习笔记 DayFour
Servlet概述
Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序。
Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java服务器中。
Java Servlet API 定义了Servlet和服务器之间的标准接口,这使得Servlet具有跨服务器平台的特性。
通常,Servlet采用一种无状态的“请求-响应”模型来访问。它能处理客户端传来的Http请求,从中提取参数,处理业务逻辑,最终返回数据或输出HTML。它还可以访问数据库,进行计算,并和Enterprise JavaBean 组件进行通信。
Servlet的运行原理
见之前的JSP运行原理。
Servlet的生命周期
有javax.servlet.Servlet定义。
装载类--->初始化(init())--->服务(service())--->销毁(destroy())
Servlet常见结构
@WebServlet("/Name") public class Servlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet()
* init() */ public Servlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
* 处理get请求 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
* 处理post请求 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Servlet获取请求中的参数
类似于JSP,采用getParameter()方法,常用的具体如下:
public String getParameter(String name); //获取指定名称的参数值 public String[] getParameterValues(String name); //适用于一个参数名对应多个值的情况 public java.util.Enumeration getParameterNames(); //返回一个包含请求消息中所有参数名的枚举对象。 public java.util.Map getParamterMap(); //返回所有参数名和对应参数值的map
数据乱码问题:
POST方法:按HTML页面指定的编码进行编码。
在Servelt类的请求处理方法需先调用HttpServletRequest接口的setCharacterEncoding(String enc)方法使数据按参数编码。
通常使用response.setContentType("text/html;charset=utf-8")即可。
GET方法:参数被拼接到URL后面提交。即上述方法已经不起作用。
在发送这些数据前先手工把他们按页面指定的编码方式编码好:java.net.URLEncoder.encode(String s,String enc)方法。然后再发送。
再Servlet类的请求处理方法中再手工解码:java.net.URLDecoder.decode(String s,String enc)方法。
最好的做法是再URL中不要使用中文等非ASCII字符。
重定向 && 请求分派
绝对URL | 以“/”开头的路径,指的是相对于Web应用根目录的路径。 |
相对URL | 不是以“/”开头的路径,指的是相对于当前路径目录的路径。 |
重定向
相关方法: HttpServletRequest接口提供的sendRedirect()
说明:不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一容器中的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
public void sendRedirect(String location) throws IOException; //location可使用绝对URL和相对URL
注意:重定向会将当前URL改变为定向后的程序的URL,即Get方法不能通过重定向传递给后者。发起者和被调用者使用各自的request和response实例。
工作原理:
请求分派
相关方法: Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:
public void forward(ServletRequest request,ServletResponse response) throws ServletException, IOException; public void include(ServletRequest request,ServletResponse response) throws ServletException, IOException;
说明:获取RequestDispatcher实例的方法有两种
调用ServletContext接口提供的getRequestDispatcher(String url) URL必须为绝对路径
调用ServletRequest接口提供的getRequestDispatcher(String url) URL可以为相对路径,也可以为相对路径
只能将请求转发给同一个Web应用中的其他组件,不能转发到其他站点的资源。
注意:请求转发过程接受后,浏览器保持初始的URL地址不变。并且发起者和被调用者共用一个request和response实例。
工作原理:
另外:因为公用一个request、response实例,则该方法可以利用setAttribute(String name, Oject obj)以及getAttribute(String name)等方法来利用请求域属性传递对象数据。实例如下:
boolean isError=true; request.setAttribute("error", isError); request.getRequestDispatcher("servletcom.jsp").forward(request, response);
boolean a=(boolean)request.getAttribute("error"); 跳转的另一端直接获取即可
Servlet的调用
1)URL调用:当在配置文件中指定Servlet映射地址后,可直接从浏览器调用Servlet,如:
http://localhost:8080/helloworld
2)JSP文件中调用:可使用<jsp:include>或者<jsp:forward>语句在JSP页面中调用一个Servlet,如:
<jsp:include page="/Servlet" flush="true"/>
页面执行中,当遇到这一句会跳转到响应的Servlet,当Servlet执行结束后控制权又回到原来的JSP页面中。
也可以用<jsp:forward>进行跳转。
以上是关于servlet是啥东西?它与Web应用服务器之间是啥关系?的主要内容,如果未能解决你的问题,请参考以下文章