1、servlet和jsp有什么区别?
从完成功能上来说,servlet和jsp完全一样。Jsp能够实现的功能servlet也可以,servlet能实现的功能jsp也能够实现。但二者又有很大区别:
Jsp是在HTTP或者XML文档中嵌入java脚本或者jsp标签形成的,是文本文件;但所有使用servlet完成的功能,包括与用户的交互,都是通过java代码来完成的。
servlet为纯java代码,所以在编写网页方面非常不方便,而jsp在编写网页时非常方便,但是运行的时候需要转换成java代码,然后编译、加载运行,二者各有利弊。
2、那么,servlet到底是什么东西呢?
Server + Applet =Servlet 意为服务器端的小程序。
Servlet是用java代码编写的运行在服务器端的小程序,它为服务器提供服务,能够接受web客户端的请求,并能对web客户端进行响应,通常是通过HTTP协议进行工作的。
3、为什么要使用servlet呢?
1>servlet是持久的,只需要web服务器加载一次,可以在不同请求之间保持服务,不会造成程序初始化的重复执行。
2>servlet是平台无关性的,one write,execute anywhere。因为servlet是用java写的,它自然也有java的平台无关性的特性。
3>servlet可扩展的,它具有java的可扩展性。
4>servlet是安全的,从外界调用servlet的唯一方法是通过服务器调用,而web服务器(浏览器)提供了高规格的安全保障。
5>servlet可以在多种多样的客户机上使用。
4、最重要的,servlet是有生命周期的:
1>Servlet加载:当服务器启动时,或者第一次访问servlet时,web容器加载servlet
2>初始化:servlet加载后调用构造方法进行实例化,然后调用init方法进行初始化。
3>服务:当客户机发送请求的时候,服务器创建两个对象,分别是HttpServletRequest和HttpServletResponse,前者包含请求信息,后者包含响应信息。
然后,这两个对象作为参数调用servlet的service方法。如果请求是GET(method="get"),调用doGet()方法,如果请求是POST(method="post"),会调用doPost()方法。Service方法可以处理GET和POST两种请求。在这些方法中,servlet完成对客户端请求的处理和响应。
销毁:在服务器关闭的时候,或者不再需要servlet时,系统调用destory方法释放资源。
代码:
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
public void init(ServletConfig config) throws ServletException {
System.out.println("初始化servlet");
}
public void destroy() {
System.out.println("销毁servlet");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("在此对用户进行响应");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理GET请求");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理POST请求");
}
}
Web.xml中的配置
<servlet>
<description>登陆处理</description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>BackServlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<!--EndFragment-->