转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6785258.html 

一、准备工作

已搭建好的SSH框架工程一个,如果没有,请参考我的上一篇文章《SSH框架搭建详细图文教程》。

二、登陆功能

1.打开MyEclipse切换到MyEclipse DataBase Explorer视图,右键user表选择"Hibernate Reverse Engineering",通过Spring框架的逆向工程功能把user表逆向生成Java实体类。

2.在弹出窗口中Java src folder 选择SSH项目下的src文件夹。Java package 填写“com.ssh.spring.user”。

勾选前三个选项:Create POJO、Java Data Obect和Java Data Access Object。POJO类是数据库表格所对应的Java类,JDO类是MyEclipse自动生成的对数据库的一些操作,这里会封装一些常用的操作,基本上可以满足我们的各种需要了,填写后选择“下一步”。

3.Id Generator 选择“native”,点击完成。

4.此时的目录结构如下,我们可以看到系统生成了3个类,一个配置文件。
User 继承自AbstractUser,是User表的实体类。
UserDAO 封装了一些对数据库的常用操作。
User.hbm.xml 是hibernate-mapping映射配置文件,配置了哪个实体类映射哪个表,配置了实体类的哪个属性映射表里的哪列。

5.现在来写测试页。打开WEB-INF文件夹下的struts-config.xml文件,切换到设计视图(design)。在空白处右键 > New > Form Action and JSP。

6.填写Form表单属性:
Use case: login
在下方Form Properties中点击“Add”添加两个属性
username: JSP input type选择“text”
password: JSP input type选择“password”

7.切换到JSP选项,勾选“Create JSP form”选项让系统自动生成login.jsp页,点击“完成”。

8.完成后项目结构如下,Struts帮我们建立了逻辑关系并生成了login.jsp、LoginForm.java、LoginAction.java三个文件。这正是我们在设计视图里选择Form,Action and JSP所配置的信息。

9.把struts-config.xml切换到source源代码视图,可以看到struts的配置文件里也相应的添加了这3个文件的映射配置信息。

Struts处理请求的流程:

10.新建一个loginSuccess.jsp登陆成功页,实现登陆后的跳转。右键项目的WebRoot/form文件夹 选择“新建” > “JSP(Advanced Templates)”。

11.在弹出窗口中“File Name”处填写:loginSuccess.jsp。

12.打开loginSuccess.jsp修改页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>登陆成功页</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<% Object nickname = request.getAttribute("nickname"); %>
登陆成功!欢迎您:<% out.print(nickname); %><br>
</body>
</html>

13.把登录页、登录成功跳转、登录失败跳转关联到一起。
切换到struts-config.xml的设计视图。在视图中右键选择 New->Forward。

14.在弹出窗口中配置如下信息:
(1)选择Local Action Forward
(2)浏览Action Path:/login
(3)填写name:loginSuccess
(4)浏览Path:/form/loginSuccess.jsp
(5)点击“完成”

15.添加一个登陆失败跳转。在设计视图中的右键选择 New->Forward。在弹出窗口中配置如下信息:
(1)选择Local Action Forward
(2)浏览Action Path:/login
(3)填写name:loginFail
(4)浏览Path:/form/login.jsp
(5)点击“完成”

添加跳转后struts-config.xml结构如下:

16.切换到struts-config.xml的source视图,可以看到在aciton下多了两行跳转信息。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config>
<data-sources />
<form-beans >
<form-bean name="loginForm" type="com.ssh.struts.form.LoginForm" /> </form-beans> <global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/form/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.ssh.struts.action.LoginAction">
<set-property property="cancellable" value="true" />
<forward name="loginSuccess" path="/form/loginSuccess.jsp" />
<forward name="loginFail" path="/form/login.jsp" />
</action> </action-mappings> <message-resources parameter="com.ssh.struts.ApplicationResources" />
</struts-config>

17.写具体的处理代码。打开struts/aciton包下的LoginAction.java。修改代码如下,先不连数据库测一下是否能够正确跳转。

package com.ssh.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.ssh.struts.form.LoginForm; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form;
//获取帐号密码
String username = loginForm.getUsername();
String password = loginForm.getPassword();
//帐号密码匹配跳转到登录成功页并显示昵称
if("asd".equals(username) && "123".equals(password)){
request.setAttribute("nickname", "冰封百度");
return mapping.findForward("loginSuccess");
}
//不匹配,跳转到登录失败页并显示提示信息
request.setAttribute("message", "账号或密码错误");
return mapping.findForward("loginFail");
}
}

18.页面准备完毕。启动Tomcat服务器,在浏览器中访问登陆页地址:http://127.0.0.1:8080/SSH/form/login.jsp

19.汉化界面。打开login.jsp,代码如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html>
<head>
<title>JSP for LoginForm form</title>
</head>
<body>
<html:form action="/login">
username : <html:text property="username"/><html:errors property="username"/><br/>
password : <html:password property="password"/><html:errors property="password"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>

注意:头部引用的文件位置是"http://struts.apache.org/",路径地址是国外apache的官网文件,这个地址经常会访问不到,导致页面打开失败,所以这里要改成自己工程下的文件路径。

页面代码修改如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html>
<head>
<title>登陆页</title>
</head>
<body>
<html:form action="/login">
用户名 : <html:text property="username"/><html:errors property="username"/><br/>
密 码 : <html:password property="password"/><html:errors property="password"/><br/>
<html:submit value="登陆" /><html:cancel value="取消"/>
</html:form>
<% Object message = request.getAttribute("message"); %>
<% if(message != null) out.print(message); %>
</body>
</html>

刷新页面可以看到如下效果:

20.直接点击登陆。因为没填账号密码,应该跳转到登陆失败页面。

21.用户名填写“asd”,密码填写“123”。点击登录,帐号密码和后台设置的匹配,这时候应该跳转到登录成功页面。

22.测试完成,下面我们连接一下数据库,从数据库里取出user数据进行匹配。
想操作数据库我们要先获取DAO(data access object),我们的UserDAO是hibernate生成的,关于UserDAO的配置信息写在了applicationContext.xml里。所以在用UserDAO之前要先获取applicationContext.xml

百度上查找了一下相关代码,找到了一个获取applicationContext.xml的方法。Spring框架里的
ClassPathXmlApplicationContext 通过这个类可以获取到我们需要的DAO。名字和applicationContext非常像,看起来就是这个类了,测试一下这个类是否好用,修改LoginAction.java代码如下:

package com.ssh.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ssh.struts.form.LoginForm; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form;
//获取帐号密码
String username = loginForm.getUsername();
String password = loginForm.getPassword();
//获取用户信息
ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(beans);
//帐号密码匹配跳转到登录成功页并显示昵称
if("asd".equals(username) && "123".equals(password)){
request.setAttribute("nickname", "冰封百度");
return mapping.findForward("loginSuccess");
}
//不匹配,跳转到登录失败页并显示提示信息
request.setAttribute("message", "账号或密码错误");
return mapping.findForward("loginFail");
}
}

23.重启Tomcat服务器,访问登录页http://127.0.0.1:8080/SSH/form/login.jsp,点击登录。

javax.servlet.ServletException: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]

出现了一个错误,意思为找不到applicationContext.xml。看来我们填写的路径有问题,这个配置文件应该是从我们项目classes的根目录开始查找的,先看一下我们的项目发布后classes的路径,右键SSH项目 > 属性 > Java构建路径 > 源代码。

可以看到我们项目发布后classes的根目录是SSH/WebRoot/WEB-INF/classes。 applicationContext.xml是这个位置的上一级,那么相对于这个路径的位置就是"../applicationContext.xml"。现在把LoginAction里的路径修改一下:

ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("../applicationContext.xml");

重新启动Tomcat服务器,访问登录页http://127.0.0.1:8080/SSH/form/login.jsp,点击登录:
页面不再报错,正常跳转,控制台也输出了:
org.springframework.context.support.ClassPathXmlApplicationContext@14bb075: startup date [Mon Apr 22 14:26:58 CST 2017]; root of context hierarchy]

如果页面还是出错,出现以下信息,则有可能Java EE库的版本低了,请删除项目里的Java EE库重新添加Java EE 6.0库

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [config/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

24.路径的问题解决了,正确的获取到了配置信息,这个配置信息我们以后要经常用,没必要每次用的时候都把它创建出来,写一个全局变量保存它吧。在src下新建一个包com.ssh.common,在包里新建一个类Global.java。输入代码如下:

package com.ssh.common;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Global {

    public static ClassPathXmlApplicationContext beans = new ClassPathXmlApplicationContext("../applicationContext.xml");

    public static Object getDao(String daoName){
return beans.getBean(daoName);
}
}

26.现在来获取数据库里的数据,上一篇文章中建的user表中已经插入了一条数据,就用这个用户信息来测试。

把LoginAction.java代码修改如下:

package com.ssh.struts.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import com.ssh.common.Global;
import com.ssh.spring.user.User;
import com.ssh.spring.user.UserDAO;
import com.ssh.struts.form.LoginForm; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form;
//获取帐号密码
String username = loginForm.getUsername();
String password = loginForm.getPassword();
//检查该用户是否存在
User instance = new User();
instance.setUsername(username);
instance.setPassword(password);
UserDAO userDAO = (UserDAO)Global.getDao("UserDAO");
List<?> list = userDAO.findByExample(instance);
//如果用户存在,跳转到登录成功页并显示昵称
if(list.size() > 0){
User user = (User)list.get(0);
String nickname = user.getNickname();
request.setAttribute("nickname", nickname);
return mapping.findForward("loginSuccess");
}
//用户不存在,跳转到登录失败页并显示提示信息
request.setAttribute("message", "账号或密码错误");
return mapping.findForward("loginFail");
}
}

重新启动Tomcat服务器,访问登录页http://127.0.0.1:8080/SSH/form/login.jsp,用户名:admin,密码:1234,点击登录。可以看到,跳转到登陆成功页并显示了正确的昵称。

登录功能完成,因为只是个测试页,这些功能就尽量简单了,大家别介意,下面来做注册功能。

三、注册功能

1.切换到struts-config.xml的设计视图,空白处右键选择 New > Form,Action and JSP。

2.在弹出窗口中配置如下信息:

Use case填写“register”
Form Properties点击“Add”添加三个属性
(1)username    type:text
(2)password    type:password
(3)nickname    type:text

3.点击JSP选项,勾选Create JSP form,点击“完成”。

4.关联测试页和登陆页。右键struts-config.xml设计视图中的regiser.jsp 选择  New > Forward。

5.添加注册成功跳转。在弹出窗口中配置如下信息:

(1)选择Local Action Forward
(2)Action Path:/register
(3)Name:registerSuccess
(4)Path:/form/login.jsp

点击“完成”。

6.添加注册失败跳转。右键struts-config.xml设计视图中的regiser.jsp 选择  New > Forward。在弹出窗口中配置如下信息:

(1)选择Local Action Forward
(2)Action Path:/register
(3)Name:registerFail
(4)Path:/form/register.jsp

点击“完成”。

关联成功后struts-config.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config>
<data-sources />
<form-beans >
<form-bean name="loginForm" type="com.ssh.struts.form.LoginForm" />
<form-bean name="registerForm" type="com.ssh.struts.form.RegisterForm" /> </form-beans> <global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/form/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.ssh.struts.action.LoginAction">
<set-property property="cancellable" value="true" />
<forward name="loginSuccess" path="/form/loginSuccess.jsp" />
<forward name="loginFail" path="/form/login.jsp" />
</action>
<action
attribute="registerForm"
input="/form/register.jsp"
name="registerForm"
path="/register"
scope="request"
type="com.ssh.struts.action.RegisterAction">
<set-property property="cancellable" value="true" />
<forward name="registerSuccess" path="/form/login.jsp" />
<forward name="registerFail" path="/form/register.jsp" />
</action> </action-mappings> <message-resources parameter="com.ssh.struts.ApplicationResources" />
</struts-config>

7.汉化注册页。register.jsp修改后代码如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html>
<head>
<title>注册页</title>
</head>
<body>
<html:form action="/register">
昵 称 : <html:text property="nickname"/><html:errors property="nickname"/><br/>
用户名 : <html:text property="username"/><html:errors property="username"/><br/>
密 码 : <html:password property="password"/><html:errors property="password"/><br/>
<html:submit value="确定"/><html:cancel value="取消"/>
</html:form>
<% Object message = request.getAttribute("message"); %>
<% if(message != null) out.print(message); %>
</body>
</html>

8.把注册信息插入数据库。打开RegisterAction.java文件,修改代码如下:

package com.ssh.struts.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import com.ssh.common.Global;
import com.ssh.spring.user.User;
import com.ssh.spring.user.UserDAO;
import com.ssh.struts.form.RegisterForm; public class RegisterAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) { //获取注册信息
RegisterForm registerForm = (RegisterForm) form;
String nickname = registerForm.getNickname();
String username = registerForm.getUsername();
String password = registerForm.getPassword(); //检查表单值是否有效
if(nickname.length() == 0 || username.length() == 0 || password.length() == 0){
request.setAttribute("message", "请填写昵称、用户名和密码");
return mapping.findForward("registerFail");
} //检查用户名是否已被注册
UserDAO userDAO = (UserDAO)Global.getDao("UserDAO");
List<?> list = userDAO.findByUsername(username); //用户名已被注册,返回注册页面
if(list.size() > 0){
request.setAttribute("message", "该用户名已被注册");
return mapping.findForward("registerFail");
} //插入新用户
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setNickname(nickname);
userDAO.save(user);
request.setAttribute("message", "注册成功,请登录:" + nickname);
return mapping.findForward("registerSuccess");
}
}

9.测试注册功能。重新启动Tomcat服务器,访问注册页http://127.0.0.1:8080/SSH/form/register.jsp

(1)不填写信息,直接点击“确定”,会发现提示信息。

(2)填写昵称、用户名和密码后点击“确定”。

昵称:冰封千里

用户名:asd

密码:123

可以看到注册成功了。至此,JSP的简单注册登录功能全部完成。

如果出现乱码请按照以下方式解决。

编码问题是很常见的问题,如果出现中文乱码的问题请打开web.xml配置编码过滤器即可解决这个问题。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 中文乱码过滤器 Start -->
<!-- 在使用Tomcat服务器时,Struts的Form提交不支持中文,需要添加编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 中文乱码过滤器 End -->
<display-name />
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

‡Œ

JSP注册登录页教程的更多相关文章

  1. 我的第一个jsp程序-实现注册登录留言功能

    1,注册功能,包括两个页面 zhuce.jsp注册页面 <%@ page language="java" contentType="text/html; chars ...

  2. 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

      前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...

  3. JSP:注册&登录

    数据库:Mysql 除了_id自动增长,其余全是varchar 注册:register.jsp <%@ page language="java" import="j ...

  4. 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能

    现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...

  5. 如何设计一个 App 的注册登录流程?

    移 动设备发力之前的登录方式很简单:用户名/邮箱+密码+确认密码,所有的用户登录注册都是围绕着邮箱来做.随着移动设备和社交网络的普及,邮箱不再是唯 一,渐渐的出现了微博,QQ,微信等第三方登录方式,手 ...

  6. Spring Security笔记:自定义登录页

    以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello Worl ...

  7. Servlet作业1-实现注册登录

    1,注册功能 注册页面zhuce.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &q ...

  8. 【SSO单点系列】(2):CAS4.0 登录页的个性化定制

    上一篇 [SSO单点系列](1):CAS环境的搭建介绍了CAS最简单环境的搭建,以及一个例子用来讲解CAS的一个最基础的用法. 今天主要是介绍如何对CAS登录页进行个性化定制.    一.开始 下图是 ...

  9. 【SSO单点系列】(3):CAS4.0 登录页验证码的添加

    2016.08.23 更新 注意:这个教程只适合4.0版本的,4.1以及以上的版本的已经不试用了, 后面几篇有人提到过 源码网盘链接更新了下 : 链接: http://pan.baidu.com/s/ ...

随机推荐

  1. AV时间戳dts,pts。从ffmpeg解码过程看过来。

    解码过程中,dts由媒体流读入的包推动(解码包中的dts标记),dts在前进.pts是在dts前进到某处(截点)而进行动作的标记. 物理时间自然流逝,dts可以被控制同步与物理时间同一脚步节奏,也可以 ...

  2. beta week 1/2 Scrum立会报告+燃尽图 02

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...

  3. DDCTF2019 的四道题wp

    MIsc:流量分析 这道题,在比赛的时候就差个key了,但是没想到要改高度,后来群里师傅说了下,就再试试, 导出来改高度. 导出来,把 把%5c(4)前面的hex删掉,改成png,就直接拿去那个img ...

  4. OutOfMemoryError本地线程不足问题分析

    java.lang.OutOfMemoryError本地线程不足问题 11月份中旬客户方的一个系统突然报内存异常,当时是早上上班的时候碰到该项目的项目经理,还跟该项目的项目经理开玩笑说你们系统上线将近 ...

  5. 2019-9-11:渗透测试,基础学习,VMware安装centos 7

    VMware Workstation 15 Pro 安装Centos 7,详细图文步骤 1,点击VMware菜单栏的“文件”-->“新建虚拟机”,选择“典型”使用向导创建虚拟机,点击“下一步” ...

  6. Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...

  7. VS Code 中文社区正式成立啦!VS Code Day 圆满落幕!

    背景简介 Visual Studio Code 是一款现代化轻量级代码编辑器,它免费.开源.跨平台.功能强大.本次 VS Code Day 是广大 VS Code 爱好者一起学习与交流的盛会,让我们对 ...

  8. PHP安全之道3:常见漏洞和攻防

    第一篇 SQL注入 安全配置和编程安全并不是万全之法,攻击者往往可以通过对漏洞的试探找到新的突破口,甚至0days. 下面总结以下常见漏洞,在日常开发维护工作中可以留意. *聊聊老朋友:SQL注入漏洞 ...

  9. Kubernetes 时代的安全软件供应链

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏  阿里云 ...

  10. [动图演示]Redis 持久化 RDB/AOF 详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...