提交 ea60b8ed 编写于 作者: W wizardforcel

2019-11-24 18:35:09

上级 b2d39606
......@@ -12,7 +12,7 @@
## 项目描述
我们将创建一个简单的 Web 应用程序,其中包含一个注册表格,一个登录表格和一个私人页面。 用户登录后即可访问该私人页面。 表单中的所有字段都将根据错误的用户输入进行验证。
我们将创建一个简单的 Web 应用程序,其中包含一个注册表单,一个登录表单和一个私人页面。 用户登录后即可访问该私人页面。 表单中的所有字段都将根据错误的用户输入进行验证。
## 创建数据库表
......@@ -26,7 +26,7 @@
* 密码– SHA-256 编码的用户密码。 切勿将用户密码存储为纯文本格式-不好😉
* 名称–用户名
Glassfishe 的安全领域只有用户名和密码字段为必填项。 我在此处添加了名称,以说明您可以在同一表中为用户添加其他信息
Glassfishe 的安全领域只有用户名和密码字段为必填项。 我在此处添加了名称,以说明您可以在同一表中为用户添加其他信息
```java
CREATE TABLE `users` (
......@@ -58,7 +58,7 @@ CREATE TABLE `user_groups` (
您可以在 GitHub 上找到完整的源代码,网址为 [https://github.com/JavaTutorialNetwork/Tutorials/tree/master/GlassfishFormBasedAuthentication](https://github.com/JavaTutorialNetwork/Tutorials/tree/master/GlassfishFormBasedAuthentication)
## 项目依赖关系(pom.xml 文件)
## 项目依赖关系(`pom.xml`文件)
这是纯 Java EE 7 的实现,除了 Java Enterprise API 本身之外,我们在项目中不需要其他依赖项。 该 API 已包含在 Glassfish 中,因此您应将依赖项标记为`provided`
......@@ -251,7 +251,7 @@ public class Group implements Serializable {
字段`groupname`用于给定用户角色。 该表是一个映射表,用户 ID 映射到某个角色。 为了使此示例简单,在本教程中创建的所有帐户都将具有“用户”角色。 您可以根据需要添加更多角色。 角色不是预定义的,您可以随意命名。 角色之间的区别在于实现。 例如,如果您具有“管理员”角色,则将要赋予它比“用户”更多的特权。 您必须以编程方式限制一个角色,并以编程方式为另一个角色提供更多选择,并在您自己的代码中进行管理。
## persistence.xml 文件
## `persistence.xml`文件
```java
<?xml version="1.0" encoding="UTF-8"?>
......@@ -299,7 +299,7 @@ public class Group implements Serializable {
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
```
## 编写业务层– UserEJB
## 编写业务层 – `UserEJB`
在这一步中,我们将编写一个 Enterprise Java Bean(EJB),以在数据库中插入新用户并对其进行查询。 EJB 通常用作持久层(数据库实体)和表示层(托管 Bean 和 JSF 页面)之间的中介。
......@@ -427,7 +427,7 @@ Glassfish 服务器配置安全领域
* **摘要算法** – SHA-256
* **编码** – Base64
## glassfish-web.xml 文件
## `glassfish-web.xml`文件
```java
<?xml version="1.0" encoding="UTF-8"?>
......@@ -449,7 +449,7 @@ Glassfish 服务器配置安全领域
我们必须在`glassfish-web.xml`文件中指定`security-role-mapping`,并添加角色名称和组名称
## web.xml 文件
## `web.xml`文件
```java
<?xml version="1.0" encoding="UTF-8"?>
......@@ -536,15 +536,15 @@ web.xml 部署描述符也需要进行一些更改。 我们将在此处配置
`&lt;security-constraints&gt;`标签中,我们为特定用户角色定义了受限资源。 换句话说– `user`目录中的每个文件都需要登录才能访问。 我们将在其中放置私有 XHTML 文件。
## 创建示层
## 创建示层
![Registration form](img/0c3808c455e96f9b6cc17ae1a64b8184.jpg)
报名表格
注册表单
### 注册表表格页面
### 注册表页面
在注册表中,我们要求提供用户名,电子邮件地址和密码。 我们还要求用户确认密码。 我们将验证电子邮件,密码和确认密码字段中的用户输入。
在注册表中,我们要求提供用户名,电子邮件地址和密码。 我们还要求用户确认密码。 我们将验证电子邮件,密码和确认密码字段中的用户输入。
首先让我们看一下 JSF XHTML 文件和 Managed Bean
......@@ -823,7 +823,7 @@ if (userEJB.findUserById(email) != null) { // email is already used }
## 成功注册
如果用户在注册表中输入正确的数据,则将创建一个新的`User`对象并将其插入数据库中。
如果用户在注册表中输入正确的数据,则将创建一个新的`User`对象并将其插入数据库中。
```java
User user = new User(email, password, name);
......@@ -871,13 +871,13 @@ regdone.xhtml 页面
</html>
```
## 登录表
## 登录表
在此表中,我们需要用户的电子邮件地址和密码。 表单针对空白字段进行了验证。 在`LoginView`中检查用户名和密码的有效性。
在此表中,我们需要用户的电子邮件地址和密码。 表单针对空白字段进行了验证。 在`LoginView`中检查用户名和密码的有效性。
![Login form](img/5528420612ad56473a4881c1a3c8f87d.jpg)
登录表
登录表
如果用户输入了有效的登录数据,则会创建一个新的`java.security.Principal`对象。 我们还将用户添加到`externalContext`的会话地图中
......
......@@ -26,7 +26,7 @@
使用 SPA 确实有一些弊端,例如 SEO 变得有些难以管理,但是在完成应用程序后,我们将讨论如何解决该问题。 今天要使用的框架是著名的 Angular。
## 为什么要成角度
## 为什么要 Angular
好吧,您可能想知道为什么每个人都对 Angular 狂热。 毕竟,目前的排名表明 Angular 是 JS 框架王国的统治者。 它是迄今为止使用最广泛的框架,并且拥有最大的社区之一和大量文档。 Angular 允许我们使用双向数据绑定来构建动态 Web 应用程序。 在电子商务网站上浏览时,您不想每次签出新产品或同一产品的其他版本时都重新加载页面,而 Angular 允许您这样做。 它也很容易构建和调试,因此使用 Angular 可以使测试变得更加容易,这是 Web 开发的核心步骤。 为此,互联网上有许多 [Angular 教程](https://hackr.io/tutorials/learn-angular)和课程,可以从中找到基本信息。
......@@ -64,7 +64,7 @@ HTML 文件中没有太多代码,这使 Angular 相当有效。 Angular 拥有
![Angular HTML file](img/5127732c53803d1698584f04078ec531.jpg)
角度 HTML 文件
Angular HTML 文件
现在剩下的唯一事情就是制作一个 Javascript 文件,将所有内容整合在一起。
......@@ -72,13 +72,13 @@ Javascript 文件将定义客户端行为,并使用我们之前创建的 REST
![Angular code](img/bd62942479fa605bf6cc265d567d1500.jpg)
角度代码
Angular 代码
## 角度 SEO 优化
## Angular SEO 优化
SPA 的核心问题之一是 SEO 优化,这对于某些 SPA 的成功至关重要。 Google 在抓取 Javascript 内容时遇到了问题,尽管他们正在努力,但它还不完全兼容 JS。 有多种方法可以解决此问题,可以手动或使用自定义服务。 这个想法是从您的应用程序创建一个 HTML 快照以直接提供给搜寻器,而不是希望它可以正确理解和索引您的 Angular 代码。 如果您无法手动完成任务,也可以减轻压力,则可以使用预渲染平台来完成任务。 您还可以执行一些辅助操作,例如获取有意义的 URL 名称而不是随机生成的 URL 名称。 维护用户友好的 URL 会反过来给您的用户和应用程序增加很多。 您应该使用一些工具来监视 SPA 的性能,并监视所有需要的更改。
## 摘要
## 总结
回顾一下,我们首先通过 Java Persistence API 构建数据库,然后创建了 Java 资源类以作为 REST 服务访问数据库,尽管这里我们仅演示了 GET 方法。 在完成了后端之后,我们继续进行前端,我们创建了 HTML 组件文件,这要归功于 AngularJS,它非常简单明了。 最后,Javascript 文件将所有内容组合在一起,为应用程序注入了生命。
......
# 弹簧
\ No newline at end of file
# Spring
\ No newline at end of file
......@@ -4,7 +4,7 @@
在本文中,我将解释 Spring Framework 背后的关键概念以及如何进一步使用它来构建 Web 应用程序。
## ![](img/d2f73752d8ae931b119dec1eac866973.jpg)
![](img/d2f73752d8ae931b119dec1eac866973.jpg)
## 什么是 Spring Framework?
......
......@@ -14,7 +14,7 @@
* 优化基础设施
* 将应用程序及其依赖项打包到标准化单元中
## 货柜
## 容器
不,我不是在谈论现实世界中的容器。 但是,既然您正在考虑它,我不妨作个比喻。 现实生活中的容器的目的是存储需要运输到另一个地方的货物或物品。 现在,这些商品具有不同的存储要求,例如,可能存在牛奶的有效期比例如西红柿短的牛奶。 这就是为什么在现实生活中容器是非常有用的原因–容器保留了内部环境,例如敏感商品和/或物品的温度。 话虽如此,运输业不必担心这些物品,而将重点放在将它们从 A 运送到 B 上。
......
......@@ -103,6 +103,6 @@ public class ExampleService {
我们需要可选依赖项的原因是因为 Spring 希望在构造依赖项 bean 时@Autowired 的依赖项可用。 否则,将引发错误。 由于 **required = false** ,我们可以解决此问题。
## 摘要
## 总结
通过使用@Autowired 批注,我们节省了几行代码,还节省了一些时间,因为我们不需要指定属性和构造函数参数。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册