Java Web基本概念
Java Web,是用Java技术来解决相关Web (Web就是在Http协议基础之上,利用浏览器进行访问的网站)互联网领域的技术总和。
Web包括Web服务器和Web客户端两部分:
1、 Java在客户端的应用有java applet: Java Applet就是用Java语言编写的小应用程序,可以直接嵌入到网页中,并能够产生特殊的效果,不过使用得很少。
2、 Java在服务器端的应用非常的丰富,比如Servlet, JSP和第三方框架等等。
-
Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序。
-
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。它实现了Html语法中的java展(以<%%>形式) 。
JSP与Servlets一样,是在服务器端执行的。JSP与Servlet在服务端执行的结果通常以HTML文本的格式返回给客户端,因此客户端只要有浏览器就能浏览。
servlet与servlet容器
Java Servlet (Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,它由Servlet容器所管理,用于生成动态的内容。
Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分, Servlet没有main方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法(如doGet()和doPost()) , Servlet容器在Servlet的生命周期内包容和管理Servlet。
在JSP技术推出后,管理和运行Servlet/JSP的容器也称为Web容器。
servlet(服务程序)是干什么的?
浏览器发送一个HTTP请求,HTTP请求由Web容器分配给特定的Servlet进行处理,Servlet的本质是一个Java对象,这个对象拥有一系列的方法来处理HTTP请求。常见的方法有doGet(),doPost()等。
Web容器中包含了多个Servlet,特定的HTTP请求该由哪一个Servlet来处理是由Web容器中的web.xml来决定的。
Servlet 本质就是javax.servlet包下的一个接口,广义上来说包含其子接口与实现类 ,像我们自己写的什么BaseServlet,LoginServlet;SpringMVC的Dispatcherservlet;Tomcat的HttpServlet都是Servlet。
servlet 的工作原理
工作原理就是反射+回调。目前所有的MVC框架的Controller基本都是这么个模式。
Servlet的执行是其容器如Tomcat通过web.xml的配置反射出Servlet对象后回调其service方法。
web服务器习惯处理静态页面,所以需要一个程序来帮忙处理动态请求(如当前时间)。Web服务器程序会将动态请求转发给帮助程序,帮助程序处理后,返回处理后的静态结果给web服务器程序。这样就避免了web服务器程序处理动态页面。Servlet的本质是一个帮助程序。
JSP本质上就是Servlet,Web服务器把每个被访问的JSP文件先翻译成对应的Servlet,然后再编译运行。
-
Servlet 必须在Web Server这个容器下运行 ;
-
Servlet具有平台独立性,Java Servlets are 100% pure Java;
-
Servlet可以直接与Web服务程序对话,Servlet之间也可以共享数据。
Servlet的工作流程
- 客户端发送请求至服务器端
- 服务器将请求信息发送至 Servlet
- Servlet 读取客户端发送的数据,获取客户请求(request)中所包含的信息产生响应结果,并将结果包含到一个文件中,比如HTML文件中设置HTTP响应参数,比如告诉浏览器,文件类型为HTML。并将其传给服务器。(响应内容动态生成,通常取决于客户端的请求)
- 服务器将响应(文件)返回给客户端
RestTemplate
介绍
传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。
Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restful 服务。
简单使用方法
定义一个简单的restful接口
@RestController
public class TestController
{
@RequestMapping(value = "testPost", method = RequestMethod.POST)
public ResponseBean testPost(@RequestBody RequestBean requestBean)
{
ResponseBean responseBean = new ResponseBean();
responseBean.setRetCode("200");
responseBean.setRetMsg("success");
return responseBean;
}
}
使用RestTemplate访问该服务
//请求地址
String url = "http://localhost:8080/testPost";
//入参
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
从这个例子可以看出,使用restTemplate访问restful接口非常的简单粗暴无脑。(url、requestMap、ResponseBean.class)这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject方法,post指调用了HTTP的post方法,Object指将HTTP响应转换为您选择的对象类型。
具体可参考:
restTemplate的介绍和使用