Servlet简介:
Servlet是使用JavaServlet接口运行在支持jsp的Web应用服务器上的Java程序。可以对Web浏览器或其他http客户端程序发送的请求进行处理
1、Servlet和Servlet容器
Servlet对象与其他java对象不同,他可以处理Web浏览器或其他http客户端的请求,但是前提条件就是把servlet对象部署到Servlet容器中。
通常情况下Servlet容器就是Web容器,如tomcat等,他们对servlet进行控制。当一个客户端发送http请求是,由容器加载servlet对其进行处理及响应。
在容器中servlet共经历了4各阶段,加载servlet,初始化Servlet init()方法,处理请求service()方法,处理完成destroy。这个也就是servlet的生命周期。
2、Servlet的功能
Servlet与其他的Java程序不同,可以处理http请求以获取http头信息,通过HttpServletRequest接口与HttpServletResponse接口对请求进行处理及回应
Servlet处理完业务逻辑之后,将动态的内容通过返回并输出到html页面,与用户请求进行交互
Servlet提供了强大的过滤功能
3、Servlet与Jsp的区别
Jsp是一种在Servlet规范之上的动态网页技术,通过jsp页面中嵌入的java代码,可以动态生成网页。可以将其理解为servlet的扩展,在jsp文件被第一次请求时,会编译成Servlet文件,在由容器调用Servlet进行处理。
Servlet承担客户请求与业务处理的中间角色,需要调用固定的方法,将动态内容混合到静态之中,产生html;JSP页面中,可以直接对html标签进行输出,比Servlet更具有显示层的意义。
Servlet中需要调用Servet API处理http请求,而jsp则可以直接通过内置对象进行处理
Servlet的使用需要进行配置,jsp只要不熟在容器之中即可。
其实jsp用来显示页面 Servlet用来处理逻辑业务。
4、Servlet的配置
在Servlet3.0以后可以通过代码进行配置,如@WebServlet("/FirstServlet")
但是最常用的还是在配置文件中配置web.xml
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.lyp.SimpleServlet</servlet-class>
</servlet>
显然第一行就是servlet-name是Servlet的名称,第二行是Servlet类的全名,包含包的名称
<servlet-mapping>
<servlet-name>SimpleServlet</serlet-name>
<url-patter>/SimpleServlet</url-patter>
</servlet-mapping>
第一行要和上面的第一行相同,第二行是访问该Servlet的url。
5、Servlet常用的类和接口
接口:Servlet,ServletConfig,HttpServletRequest,HttpServletResponse
Servlet接口:
public void init(ServletConfig config) throwsServletException
public void service(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException
public void destroy()
public ServletConfig getServletConfig()
public java.lang.String getServletInfo()
Servlet实例化后调用init方法来完成初始化
destroy方法用来从容器中移除servlet对象
ServletConfig接口
getInitParameter(String name) :根据给定的初始化参数名,返回匹配的初始化参数值。
getInitParameterNames():返回一个 Enumeration 对象,里面包含了所有的初始化参数名。
getServletContext():返回一个 ServletContext 对象getServletName():返回Servlet的名字,即web.xml文件中相应<servlet>元素的<servlet-name>子元素的值。如果没有为Servlet配置<servlet-name>子元素,则返回Servlet类的名字。
getServletName():返回Servlet的名字,即web.xml文件中相应<servlet>元素的<servlet-name>子元素的值。如果没有为Servlet配置<servlet-name>子元素,则返回Servlet类的名字。
HttpServletRequest接口
public Stirng getContentPath()
public Cookie[] getCookies()
public String getMethod()
public String getQueryString()
pbulic HttpSession getSession()
public String getServletPath()
HttpServletResponse接口
public void addCookie(Cookie cookie)
public void sendError(int src)
public voidsendRedirect(String location)
GenericServlet类:
在编写Servlet时都要事先Servlet接口,该类就实现了Servlet接口但是没有处理Http请求。
HttpServlet类:
该类继承类GenericServlet类,事先Servlet类,并且能够处理http请求、因此在进行编写Servlet时都要继承该类。例如
1 package servlet;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11 /** 继承自HttpServlet */
12 public class HelloServlet extends HttpServlet {
13
14 /** 重写doGet方法 */
15 @Override
16 protected void doGet(HttpServletRequest request, HttpServletResponse response)
17 throws ServletException, IOException {
18 System.out.println("处理get请求。。。");
19 PrintWriter out = response.getWriter();
20 out.println("<b>HelloServlet</b>");
21 }
22
23 /** 重写doPost方法 */
24 @Override
25 protected void doPost(HttpServletRequest request, HttpServletResponse response)
26 throws ServletException, IOException {
27 System.out.println("处理post请求。。。");
28 PrintWriter out = response.getWriter();
29 out.println("<b>HelloServlet</b>");
30 }
31
32 }
由上面代码可以看出doGet方法的参数是两个接口实例,在接口实例中,接口对象只能调用接口中声明的方法。