使用Spring Framework创建Java Web应用程序从未如此简单。 如果您已经熟悉Java并且几乎没有创建Web应用程序的经验,或者如果您担心所有很酷的孩子都放弃Java取而代之的是Ruby和Node.js,那么您想读这篇。

我的意图是在此处提供实用指南,以快速入门并使用Java和Spring创建现代Web应用程序。

我们将使用Java,Spring Framework(4.x),Spring Boot(v1.2.x),Spring Security,Spring Data JPA,Thymeleaf和Maven 3框架的最新版本。

为什么使用Spring框架

Spring是最流行的开源Java框架之一。

  • Spring是一个成熟但仍具有创新性的开源框架
  • 春天有一个非常活跃的社区
  • 弹簧重量轻–可以使用嵌入式容器从命令行运行
  • Spring,尤其是Spring Boot使您的工作效率更高–无需XML配置

春天不仅仅是一个框架……

…这是一个平台,可让您了解构建Web应用程序所需的大多数技术:

  • 创建MVC应用程序
  • 提供身份验证和授权
  • 使用JDBC,Hibernate和JPA连接到RDBMS数据库
  • 连接到NoSQL数据库(MongoDB,Neo4J,Redis,Solr,Hadoop等)
  • 处理消息(JMS,AMQP)
  • 快取
  • 等等

是时候创建一些代码了

在本教程中,我们将创建一个示例url-shortener应用程序( 此处提供源代码),尽管本文不涵盖构建Web应用程序的所有方面,但希望您会找到足够的有用信息,以便能够开始并想了解更多。

该应用程序由一个HTML页面组成,它可以从任何URL创建一个短URL,并且您可能已经猜到了,它还可以从该短URL重定向到原始URL。

要运行它,请在命令行中执行以下命令(假设您已经安装了Maven v3 ):

$ mvn spring-boot:run

组件

YourlApplication.java

这是应用程序的主类,用于初始化Spring上下文(包括该项目中的所有Spring组件),并在嵌入式Apache Tomcat( http://tomcat.apache.org )Web容器内启动Web应用程序。

@SpringBootApplication
public class YourlApplication {public static void main(String[] args) {SpringApplication.run(YourlApplication.class, args);}
}

基本上,@ SpringBootApplication和SpringApplication.run()方法在这里起到了神奇的作用。

UrlController.java

@Controller
public class UrlController {@Autowiredprivate IUrlStoreService urlStoreService;// ...
}

遵循MVC范例,此类用作处理HTTP请求的Controller(请注意@Controller注释)。 此类中用@RequestMapping注释的每个方法都映射到特定的HTTP端点:

  • showForm():显示主屏幕,用户可以在其中输入要缩短的网址

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String showForm(ShortenUrlRequest request) {return "shortener";
    }
  • redirectToUrl():从缩短的网址重定向到原始网址
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)public void redirectToUrl(@PathVariable String id, HttpServletResponse resp) throws Exception {final String url = urlStoreService.findUrlById(id);if (url != null) {resp.addHeader("Location", url);resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);} else {resp.sendError(HttpServletResponse.SC_NOT_FOUND);}}
  • shortUrl():顾名思义,它将创建所提供网址的简化版本,并将其传递给shorter.html进行显示
    @RequestMapping(value="/", method = RequestMethod.POST)
    public ModelAndView shortenUrl(HttpServletRequest httpRequest,@Valid ShortenUrlRequest request,BindingResult bindingResult) {String url = request.getUrl();if (!isUrlValid(url)) {bindingResult.addError(new ObjectError("url", "Invalid url format: " + url));}ModelAndView modelAndView = new ModelAndView("shortener");if (!bindingResult.hasErrors()) {final String id = Hashing.murmur3_32().hashString(url, StandardCharsets.UTF_8).toString();urlStoreService.storeUrl(id, url);String requestUrl = httpRequest.getRequestURL().toString();String prefix = requestUrl.substring(0, requestUrl.indexOf(httpRequest.getRequestURI(),"http://".length()));modelAndView.addObject("shortenedUrl", prefix + "/" + id);}return modelAndView;
    }

如您所见,@ RequestMapping批注负责将单个URL映射到Java方法。 该方法可以具有多个参数:

  • @PathVariable(即id),它来自网址的动态部分(/ {id}),或者
  • @RequestParam,或者
  • 一个POJO(普通旧Java对象),其中字段对应于请求参数,或者
  • 如果是POST请求,则为@RequestBody;或者
  • Spring提供的其他预定义的Bean(例如HttpServletResponse)

ShortenUrlRequest.java

Spring将缩短的url请求映射到此POJO(普通的旧Java对象)中。 Spring还负责验证请求,请参见url字段上的注释。

public class ShortenUrlRequest {@NotNull@Size(min = 5, max = 1024)private String url;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}
}

shorter.html

这是基于Thymeleaf的( http://www.thymeleaf.org/ )模板,该模板使用Twitter Bootstrap( http://getbootstrap.com/ )来呈现主屏幕HTML代码。 它呈现UrlController类中的请求映射所提供的数据(模型)。

...
<div class="jumbotron"><div class="container"><h1>Shorten your url</h1><p><div class="alert alert-success" role="alert" th:if="${shortenedUrl}"th:utext="'Link created: &lt;a href=\'' + ${shortenedUrl} + '\'&gt;' + ${shortenedUrl}+ '&lt;/a&gt;'"></div><form class="form-inline" th:action="@{/}" th:object="${shortenUrlRequest}" method="POST"><div class="alert alert-danger" role="alert" th:if="${#fields.hasErrors('*')}"th:errors="*{url}">Input is incorrect</div><div class="form-group"><input type="text" class="form-control" id="url" name="url"placeholder="http://www.example.com"th:field="*{url}" th:class="${#fields.hasErrors('url')}? fieldError"/></div><button type="submit" class="btn btn-primary">Shorten</button></form></p></div>
</div>
...

InMemoryUrlStoreService.java

该应用程序当前仅将缩短的url持久存储在此简约类中实现的内存持久层中。 稍后,我们可以通过实现IUrlStoreService接口将数据持久保存到数据库中来改善这一点。

@Service
public class InMemoryUrlStoreService implements IUrlStoreService{private Map<String, String> urlByIdMap = new ConcurrentHashMap<>();@Overridepublic String findUrlById(String id) {return urlByIdMap.get(id);}@Overridepublic void storeUrl(String id, String url) {urlByIdMap.put(id, url);}
}

请注意,@ Service方法告诉Spring这是Service层中的一个bean,可以将其注入到其他bean中,例如UrlController。

结论

简而言之就是这样。 我们涵盖了此Web应用程序的所有部分。 我希望您现在同意,使用Java和Spring构建Web应用程序会很有趣。 不再需要样板代码和XML配置,Spring的最新版本将为我们处理所有这些工作。

如果您想了解有关Spring框架和Spring Boot的更多信息,请不要忘了订阅我的新闻通讯以获取有关Spring的最新更新。 如果您有任何疑问或建议,请随时在下面发表评论。

翻译自: https://www.javacodegeeks.com/2015/08/building-modern-web-applications-using-java-and-spring.html

使用Java和Spring构建现代Web应用程序相关推荐

  1. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 开发人员 ...

  2. camel.js_Camel 2.11 –没有Spring的Camel Web应用程序

    camel.js 在撰写本文时,我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件,该组件允许使用Camel运行Web应用程序,而不必依赖Spring Framework来加速Ca ...

  3. Camel 2.11 –没有Spring的Camel Web应用程序

    在撰写本文时,我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件,该组件允许使用Camel运行Web应用程序,而不必依赖Spring Framework来加速Camel. 或与此相 ...

  4. 带有Jersey和Spring的RESTful Web应用程序

    几个月前,我们的任务是创建一个API,以向第三方开发人员公开我们系统中的某些功能. 我们选择将这些功能公开为一系列REST Web服务. 我开始使用Jersey ,它是JSR 311 (用于Restf ...

  5. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!

    [CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...

  6. 小程序动画从头开始_渐进式Web应用程序102:从头开始构建渐进式Web应用程序

    小程序动画从头开始 We learnt about what is a Progressive Web App (PWA) in part 1. In this part, we are going ...

  7. 使用Spring 3.1和基于Java的配置构建RESTful Web服务,第2部分

    1.概述 本文介绍了如何在Spring中设置REST –控制器和HTTP响应代码,有效负载编组配置和内容协商. 2.在Spring了解REST Spring框架支持两种创建RESTful服务的方式: ...

  8. 使用Spring 3引导Web应用程序

    1.概述 这是关于使用Spring 3.1和基于Java的配置来建立RESTfull Web应用程序的系列教程的第一篇. 本文将重点介绍如何引导Web应用程序 ,讨论如何从XML过渡到Java,而不必 ...

  9. 操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序

    首先,免责声明:如果您正在编写微服务 (每个人现在都对吗?)并希望它是惯用的 ,那么通常不会在其中使用几个不同的数据源. 图片取自Pixabay© https: //pixabay.com/illus ...

最新文章

  1. 利用php和ajax实现的,利用PHP和AJAX实现数据库增值
  2. tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵
  3. html form src,form.html
  4. 中国移动神州行5元卡普遍缺货
  5. html 右上角删除图标,网页制作html+css制作div标签增加右上角删除图标的示例代码...
  6. MapReduce三种join实例分析
  7. Spring Cloud基础入门
  8. 操作系统实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab2内存管理(一)...
  9. Windows xp sp3 补丁下载-cuyahoga
  10. Alitum Designer 16安装
  11. 2012 IMF 全球人均gdp排名
  12. 同一操作系统中安装多个不同版本谷歌Chrome浏览器
  13. 虚拟服务器443端口开启,服务器开启443端口
  14. 蚂蚁金服旗下网商银行招聘了
  15. 求一个数的最小素因子外加快速分解质因子
  16. 交互式多模型-无迹卡尔曼滤波IMM-UKF算法matlab实现(跟踪场景二)
  17. 密码学中的数学基础(一)
  18. kotlin自定义view
  19. python-将连续图片转换为视频
  20. php起始符大全,以下哪种标签不是 PHP 起始 / 结束符

热门文章

  1. nginx部署laravel需要修改的配置
  2. 刘奕佳: 我的职校新生活 | 班级日常分享
  3. 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
  4. Myeclipse 创建web项目的一些基本操作
  5. 编译内核_将驱动编译进内核(Kernel)的步骤记录
  6. java阻塞队列小结
  7. Access restriction: The type 'BASE64Encoder' is not API 的解决方法
  8. java数据库编程——执行查询操作(一)
  9. zxing qr区域判断_如何在Java中使用Zxing和JFreeSVG创建QR Code SVG?
  10. spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置