×

java jersey

java jersey(如果没有spring的框架集合,java将会很快被遗弃对吗)

admin admin 发表于2023-10-25 11:15:23 浏览44 评论0

抢沙发发表评论

本文目录

如果没有spring的框架集合,java将会很快被遗弃对吗

作为一名从业多年的IT人,我曾长时间使用Java进行软件开发,同时也出版过Java编程书籍,所以我来回答一下这个问题。

要想了解Spring框架对于Java语言的重要性,首先要了解Java语言的发展历程。Java语言的快速发展经历了四个重要的阶段,每个阶段都让Java获得了大量的用户从而逐渐形成了一个庞大的Java生态。

Java语言的第一次快速发展得益于Applet,Applet是以浏览器为运行容器的展现层技术,但是Applet能做更多的事情,这在以静态资源为主要呈现形式的Web Site阶段,Java给了技术人员更多的可能性,也因此得到了广泛的使用。当然,Applet需要感谢Netscape。

Java语言的第二次快速发展得益于JSP/Servlet技术,JSP/Servlet技术让Java的性能得到了充分的发挥,在与CGI技术的对比中,JSP/Servlet技术无论从性能上还是扩展性上都占据了明显的优势,从而奠定了Java在Web开发领域的地位。由于Java天然的多线程属性以及分布式开发属性,使得Java在后端开发领域得到了广泛的应用,一直到今天。

Java语言的第三次快速发展得益于开源框架,这些开源框架包括Struts、Hibernate、Spring等,其中Struts系列解决了MVC结构的问题,Hibernate解决了DAO结构的问题,而Spring则解决了JavaBean容器的问题,这三个流行框架中唯有Spring提高了执行的效率(需要一定的规模),而且相比于EJB,Spring更轻也更好用,所以Spring得到了广泛的使用。

虽然Spring解决了很多问题,而且是关乎性能的问题,但是应该说是Java给了Spring发展的机会,而不是Spring给了Java机会,因为如果没有Spring,Java的企业级开发也有其他方案,Spring解决的问题只是方便,还算不上创新。当然,今天的Spring家族已经非常庞大了,庞大到Spring自己都看不下去了,所以推出了Spring Boot来解决一下复杂的配置问题。

Java语言第四次快速发展得益于Android系统,由于Android系统的采用,使得在移动互联网时代Java依然非常活跃。从未来发展的趋势来看,Java语言将依然有广泛的应用场景。但是目前Python、JavaScript和Go语言的上升趋势也比较明显,对于程序员来说,应该重点关注一下,尤其是Java程序员。

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有互联网方面的问题,或者考研方面的问题,都可以咨询我,谢谢!

如何在java REST API中用GZip和Jersey压缩相应

  有许多情景当你的REST api提供的相应是非常长的,并且我们都知道传递速度和贷款在移动设备/网络上是多重要。当开发支持REST apis的移动app的时候,我认为首要的性能最优化的点就是需要解决。猜猜是什么?因为响应式文本,因此我们能压缩这些文本。而且随着当前的只能手机和平板的能力,在客户端解压文本应该不是个大问题...因此在这篇文章中,如果你使用java的Jersey构建它,我将介绍你怎么能有选择性的压缩REST API响应,这个Jersey事JAX-RS的映射实现(还有更多)...  1.Jersey过滤器和拦截器  啊,感谢Jersey的强大的过滤器和拦截器特性,这个实现是相当容易的。然后过滤器是主要打算来维护像HTTP headers,URIs和/或HTTP methods的request和response的参数,拦截器是维护实体,通过维护实体的输入/输出流。  但是对于压缩将使用一个GZip WriterInterceptor,一个写拦截器被用于这种情况,在那个类里,实体被写到"wire",当在这种情况中时,它在服务器这边,这就意味着输出一个响应实体。  1.1GZip Writer Interceptor  那让我们来看看我们的GZip Writer Interceptor吧:  GZip Writer Interceptor  package org.codingpedia.demo.rest.interceptors;  import java.io.IOException;  import java.io.OutputStream;  import java.util.zip.GZIPOutputStream;  import javax.ws.rs.WebApplicationException;  import javax.ws.rs.core.MultivaluedMap;  import javax.ws.rs.ext.WriterInterceptor;  import javax.ws.rs.ext.WriterInterceptorContext;  @Provider  @Compress  public class GZIPWriterInterceptor implements WriterInterceptor {  @Override  public void aroundWriteTo(WriterInterceptorContext context)  throws IOException, WebApplicationException {  MultivaluedMap《String,Object》 headers = context.getHeaders();  headers.add("Content-Encoding", "gzip");  final OutputStream outputStream = context.getOutputStream();  context.setOutputStream(new GZIPOutputStream(outputStream));  context.proceed();  }  }  注意:  它实现了WriterInterceptor,这是一个写拦截器的消息体的接口,这个接口包装调用javax.ws.rs.ext.MessageBodyWriter.writeTo  供应商实现WriterInterceptor协议必须要么以编程方式注册进一个JAX-RS运行环境,要么必须用@Provider注解来注解在一个提供商扫描语句期间自动的被JAX-RS运行环境发现。  @Compress是绑定注解的名称,在接下来的段落中我们将更详细的讨论它  “拦截器从WriterInterceptorContext中获得一个输出流并且设置一个新的用原始的GZIP包装器包装的输出流。在所有的拦截器被执行以后,输出流最终设置WriterInterceptorContext将用于序列化实体。在上面的例子中,实体字节将被写到GZIPOutputStream中,这个类将压缩流数据,然后把他们写到原始输出流。原始流总是把数据写到wire中。当拦截器被用在服务器上时,原始输出流会把数据写到底层服务器容器的流中,然后发送响应给客户端。”  “重载方法aroundWriteTo()获取WriterInterceptorContextz作为参数。这个上下文包括请求头参数getters和setters,请求属性,实体,实体流和其它属性;当你压缩你的响应时,你应当设置’Content-Encoding’头位gzip”  1.2 压缩注解  过滤器和拦截器能被绑定名字。名称绑定是一种概念,这种概念就是允许告诉一个JAX-RS的运行时,一个只为特定资源方法的特定的过滤器或者拦截器将被执行。当一个过滤器或者拦截器只对一些特定的资源方法限制,那我们就认为它是名称绑定。过滤器和拦截器没有这样的限制就被称作global。在我们的例子中我们已经构建了@Compress注解:  Compress annotation  package org.codingpedia.demo.rest.interceptors;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import javax.ws.rs.NameBinding;  //@Compress annotation is the name binding annotation  @NameBinding  @Retention(RetentionPolicy.RUNTIME)  public @interface Compress {}  而且用它来标记在资源上的方法,这个方法应该是被压缩的(eg:当GET-ing的时候,所有的博客用PodcastsResource)  @Compress annotation在资源方法上的使用  @Component  @Path("/podcasts")  public class PodcastsResource {  @Autowired  private PodcastService podcastService;  ...........................  /*  * *********************************** READ ***********************************  */  /**  * Returns all resources (podcasts) from the database  *  * @return  * @throws IOException  * @throws JsonMappingException  * @throws JsonGenerationException  * @throws AppException  */  @GET  @Compress  @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })  public List《Podcast》 getPodcasts(  @QueryParam("orderByInsertionDate") String orderByInsertionDate,  @QueryParam("numberDaysToLookBack") Integer numberDaysToLookBack)  throws IOException,AppException {  List《Podcast》 podcasts = podcastService.getPodcasts(  orderByInsertionDate, numberDaysToLookBack);  return podcasts;  }  ...........................  }  2.测试  2.1SOAPui  好了,如果你正在用SOAPui测试,你能使用下面的请求违反PodcastsResource  Reqest:  请求例子:  GET

java框架有哪些

java框架实在是太多了,网上一抄一大段,根本就了解不到什么。我还是以我的经验来说一下j2ee的框架。1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”)。可以帮你快速搭建出一个MVC模型出来。(注:struts1已经很少用了,且问题也很多,强烈推荐使用struts2).2.Spring框架,这是排行第二的框架(我个人排得,非权威),这个框架出彩的地方就在于它的“依赖注入”和“控制反转”。简单的说,就是在程序运行的时候才将参数注入到容器里。3.持久层框架选Hibernate和Ibatis。 Hibernate自动化能力强,开发大型应用可以节约开发时间,ibatis小巧简洁,灵活。4.Jquery是继prototype之后又一个优秀的Javacript框架,封装了很多javascript方法,是开发jsp用的框架,目前很流行一般开发,都是使用Struts2+Spring+Hibernate(ibatis)整合,前端用jquery或者其他类似框架。对于简单的系统,有时用Spring MVC一个框架即可。

现在java web主要用什么框架

关于 前端mvc,确实struts2少了用了,毕竟springmvc的优点会多些,但是不管是struts2还是springmvc本质上都是基于Servlet的一个请求转发,所以不管将来用什么框架,先将Servlet学习好,什么框架都不是问题,等你能够感觉到一切mvc都不过是“Servlet的请求转发”,那就算是入门了。然后可以在去学习下具体的springmvc,或者struts2,不在于学习怎么用,而要去学习下其中的设计模式 关于orm,随着分布式、互联网化,orm必将被弱化,都是分库、分片数据库,orm在小项目中还可以用,大项目中已没有太大用处,毕竟都是跨库,跨分片的数据事务。但是作为一个学习过程还是可以学习下orm,当然学习orm不如去学习jdbc的接口,因为一切的数据库都是基于jdbc,