1.2 Servlet/JSP简介
在学习Java程序语言时,有个重要的概念:"JVM(Java Virtual Machine)是Java程序唯一认识的操作系统,其可执行文件为.class文件。"基于这一概念,在编写Java程序时,必须了解Java程序如何与JVM这个虚拟操作系统进行通信,JVM如何管理Java程序中的对象问题。
在学习Servlet/JSP时,也有个重要概念:"Web容器(Container)是Servlet/jSP"唯一认得的HTTP服务器。"如果希望用Servlet/JSP编写的Web应用程序可以正常运作,就必须知道Servlet/JSP如何与Web容器沟通,Web容器如何管理Servlet/JSP的各种对象问题 。
1.2.2 Servlet与JSP的关系
本书从开始到现在一直在谈Servlet,这是因为Servlet与JSP是一体两面,JSP会被Web容器转译为Servlet的.java源文件、编译为.class文件,然后加载容器,因此最后提供服务的还是Servlet实例。这也是为什么始终在谈Servlete的原因,要想完全掌握JSP,也必须先对Servlet有相当程度的了解,才不会一知半解,遇到错误无法解决。
也许有人会说,有必要掌握JSP吗?毕竟自Java EE 6中规范的JSP 2.2之后,JSP本身也没有显著的改进了,虽然Java EE 7规范中是JSP2.3,但中是做些规范维护,主要是因为Expression Language、JSF技术做了些调整,而在Java EE8之中,jSP规范仍维持在2.3.
这一方面是由于有些商业性考虑,另一方面则是因为前端技术的兴起。就今天来说,若能与前端技术相磁开发者适当配合,JSP已经不是撰写的主要选择,不过,既有的应用程序,不少是基于JSP撰写的,若有JSP的基础,将来转换使用其他的页面模板技术就容易上手。
至于Servlet规范,仍持续在演变,特别是是Java EE 8 中,Servlet从3.1版本号跳到了4.0版本 ,用以突显其规范上有着重大不同;在Java的Web开发这块,一些重大Web框架,例如Spring MVC,仍是基于Servlet,如果能掌握Servlet,在使用这类框架时,对理解底层细节或者进行框架细节控制会有很大的帮助。
因而,无论是从掌握JSP的角度来看,或者是能灵活运用基于Servlet的Web框架来看,掌握Servlet都是必要的!
先来看看一个基本的Servlet长什么样子。
package cc.openhome;
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("/Hello")
public class Hello extends HttpServlet { //1继承HttpServlet
@Override
protected void doGet(//2重新定义doGet()
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");//3设定响应内容类型
String name = request.getParameter("name");//4取得请求的参数
PrintWriter out = response.getWriter();//5取得响应输出对象
out.print("<!DOCTYPE html>");
out.print("<html>");
out.print("<head>");
out.print("<title>Hello</title>");
out.print("</head>");
out.print("<body>");
out.printf("<h1> Hello! %s!</h1>", name);//6跟用户说Hello!
out.print("</body>");
out.print("</html>");
}
}
许多初学JSp的人会遇到很多转译 、编译或执行的问题,而非 问题通常在于不了解JSP转译为Servlet之后,对应到哪个程序段,更有人完全不知道JSP与Servlet其实是一体两面的事实,因崦遇到问题就无法解决。了解JSP与Servlet的对应关系,必要时查看一下JSP转译为Servlet后的源代码,都是jsp网页执行遇到错误时解决问题的重要方法之一。