Java Web实战详细教程(四)Servlet与JSP初见与对比

        在Java语言出现之前,网站的服务器端(后端)一般是由C++或Perl来写CGI(公共网关接口)实现的。每一个请求来访问CGI,CGI都会开启一个进程来处理,这对于计算机资源是一种严重的消耗,无法适用高访问量的网站系统。
        Java推出的Servlet技术,是一种针对CGI技术上的革新,它针对与每个HTTP请求,都是开启一个线程来处理,线程相对于进程来说,资源开销要小的多。Servlet甫一闻世,便在网站开发领域中获得了极广的支持。
        下面我们首先来看一下Servlet,Servlet本质上是一个Java类,继承自javax.servlet.http.HttpServlet。覆盖public void doGet(HttpServletRequest request, HttpServletResponse response)、public void doPost(HttpServletRequest request, HttpServletResponse response)两个方法。这两个方法的参数包含了Java Web服务器(本例中的Tomcat)封装好的request(请求)和response(响应)对象。
        在eclipse中,testWeb01项目下的java Resource文件夹的src目录下,新建一个包a,在里面创建一个名为TestServlet的Servlet类。

package a;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//WebServlet注解可以配置URL,即配置访问此类的路径为/test
@WebServlet("/test")
public class TestServlet extends HttpServlet{
    
    
   //处理Http get类型请求的方法
	public void doGet(HttpServletRequest request,HttpServletResponse response){
    
    
		System.out.println("你好!");	
	}	
   //处理Http post类型请求的方法
	public void doPost(HttpServletRequest request,HttpServletResponse response){
    
    
		doGet(request,response);
	}	
}

        在浏览器中访问地址:http://localhost:8080/testWeb01/test
        可以看到在控制台上打印出"你好!"二字。
        通过以上代码的测试可以看到,Servlet充当的是Java Web后端的对外接口,它可以接收到HTTP请求,并根据请求方法类型(get、post)调用对应的方法。

声明:Servlet的URL也可以通过在web.xml文档中进行配置,但因为不如注解的方式方便,所以不做讲解。

        Servlet的出现从当时的历史时间点来看,是一个技术的革新,但是它是在性能上的革新,作为显示HTML页面来说,并不友好。
        例如完成交换两个变量的值,输出下图对应的页面,需要以下Servlet代码。

在这里插入图片描述
对应的Servlet代码:

@WebServlet("/test")
public class TestServlet extends HttpServlet {
    
    
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    
		int a = 5;
		int b = 6;
		int c = a;
		a = b;
		b = c;
		//设置响应的文档类型和字符编码
		response.setContentType("text/html; charset=utf-8");
		//通过response对象获得PrintWriter类型对象,可响应给浏览器信息,即在浏览器页面上显示
		PrintWriter out=response.getWriter();
		out.print("<html><head><title>交换两个变量的值</title></head><body><div style='color:red'>"+a+" "+b+"</div></body></html>");

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    
		doGet(request, response);
	}

}

        通过以上代码会发现,Servlet负责页面显示的话,是在Java中嵌入写HTML代码,那想要通过Servlet输出一个我们例子中的简单的HTML文档都是非常麻烦的,那如果要开发一个复杂的如京东、淘宝那样复杂的页面,几乎是无法实现的工作。

        如如何更优雅的做好显示,微软在它的ASP语言中率先实现了再HTML中嵌入写后端语言。SUN公司也见贤思齐,推出了JSP语言,即Java Server Page,在HTML中语言中嵌入写Java代码,实现页面的动态数据展示,从而让显示层变的容易起来。
        上边的例子,使用JSP完成在WebContent文件夹下创建一个JSP文件,只需要以下代码即可:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>交换两个变量的值</title>
</head>
<body>
	<div style="color: red">
		<%
			int a = 5;
			int b = 6;
			int c = a;
			a = b;
			b = c;
			//out是JSP的内置对象,可以直接使用,作用是输出信息到响应内容
			out.println(a + " " + b);
		%>
	</div>
</body>
</html>

        我们可以很明显的感受到JSP作为显示技术的开发比Servlet清晰简洁,但为什么我们还要讲Servlet呢?那是因为Servlet并没有被淘汰,而和作为显示成技术的JSP分工合作,充当了Java Web中的控制层。这在后续的MVC架构模式中会再做讲解。

おすすめ

転載: blog.csdn.net/GodBlessYouAndMe/article/details/120696693