用户注册案例的实验

  0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm 

用户注册案例的实验 ——FormBean基础


步骤:

1.在网页中添加原始的<form>标签、三个输入框(用户名,密码,密码2)和一个提交按钮。

2.由提交路径编写不方便引入<html:rewrite>和在action中用request.getParameter获得参数,在action中直接向response中打印出formbean的信息,然后进行访问测试。

3. 引入formbean,创建和配置formbean,formbean中全部用基本属性的方式。

4.在formbean中引入复杂属性user实体对象,formbean中包含user实体对象和password2字段。对于复杂属性对象一定要初始化,否则,在提交数据时就会出问题。

5.在最后的成功页面中用el表达式从formbean中提取数据显示,引出attribute和scope属性的讲解,顺便分析Session的序列化问题。

总结:

如果某个Action关联了一个FormBean,那么,当浏览器请求这个Action时,Struts框架将创建这个FormBean,把这个FormBean存储在相应的Web域中,并用请求参数来填充这个formbean。

对于请求消息中的每个参数(包括网页表单中的每个字段),其相关的ActionForm 通常都有一个对应的属性来接受相应的参数值。



第2步:使用<html:rewrite>生成url地址和在action中用request.getParameter获得参数,Action的execute的可以不返回ActionForward对象,而是返回null,完全可以把exeucte方法当作一个servlet的service方法来用,例如,用response.getWriter().write()输出内容,不过这时候失去了struts的特性了,没什么意义了。实验首先不返回null,而是直接在原来返回ActionForward对象的基础上,增加response的输出代码,正好可以演示response的输出结果被覆盖掉的效果。


第4步实验:为了便于大家复习代码,最好保留原来的formbean,重新编写一个新formbean。写完formbean,提问复杂属性必须初始化一个实例对象吗?刚开始故意不对 formbean的user成员变量进行初始化,提交数据时,beanutil总是报告说bean not found的错误。然后比喻说你要一杯水,我是先取你的水杯后再向其中加水,然后找一个新水杯加水后给你,对于前者你必须有个空的水杯,后者则不需要。这时候在formbean的setUser和getUser方法中加入监视代码即可知道,复合属性调用的是formbean.getUser().setName()。


第5步:要提问struts框架保存formbean时,以什么key存在什么域中,这是通过attribute属性和scope属性配置的,在第二个JSP页面中,用下面代码分析了formbean是默认存储在Session中的和存储时的key值是什么:

<c:forEach items="${applicationScope}" var="oneAttr">

${oneAttr.key }:${oneAttr.value }<br>

</c:forEach>


另外,引入user实体对象后,应用程序每次重新加载前,也即关闭时都报告Session序列化的错误,这是因为User没有实现Serializable接口造成的,在这里顺便分析和解决User没有实现Serializable接口造成的重启应用程序时报告Session序列化的错误的问题。这里提问前面的User对象为什么会被序列化?因为被保存在了Session中,tomcat在重启时要把Session对象序列化到硬盘。在解释时发现,几乎所有的学员对什么时候需要实现Serializable接口的概念很陌生。我的解释是把对象保存到硬盘上,你可以自己写代码保存和还原,你也可以让java提供的OutputStream的writeObject方法帮你做,如果让java 帮你做,你必须实现serializable接口,这样,javac编译时就会进行特殊处理,编译的类才可以被writeObject方法操作。只要是要将一个对象向外序列化出去,例如,复制到网络上的其他计算机,存储到硬盘等等,就要让其实现Serializable接口。



用户注册案例的实验 ——FormBean表单校验


步骤:

1.讲述表单校验的基本原理,分析FormBean的validate方法和返回校验结果的方式,编码说明当formbean的password2与user的password不相等时,则生成错误提示信息, ActionMessage对象关联的错误提示信息先直接用程序中的字符串来定义。

2.根据运行的错误提示信息,引入input属性的讲解。

3.画一个用于分析校验出错后应回到输入jsp页面和要传递哪些数据给该页面的简单示意图。(见下页)

4.用普通el表达式从formbean中提取数据回显和用el表达式显示错误信息。

第1步: validate方法返回的errors对象是干什么用的呢?它就是要给后面的jsp页面显示用的,errors对象中要存储的就是要显示错误信息。

第2步:先提问校验出错了该怎么办?返回到的通常应该是刚才填写表单信息的页面,并要在该页面中显示出上次填入的内容和错误提示信息。

第3步:校验出错后回到输入jsp页面前,错误信息和表单中原来填写的数据传递该jsp页面,如何传递呢?把数据装在一个对象中,再把对象存储在request作用域中。 Formbean中存储有上次输入的数据,关于formbean的存储,前面已经分析过,而载有错误的信息的errors是怎么存储进request中的呢?是Struts框架,即ActionServlet,应该使用request.setAttribute(“特殊属性名”,erros);存入的属性名是一个固定的特殊名称,这样,你才能够显示这个错误。存储的关键字是什么?Globals.ERROR_KEY。 


第4步:显示错误信息使用的el表达式为${requestScope["org.apache.struts.action.ERROR"]} 。



阶段与面试有关的目标


在action中可不可以直接向浏览器输出内容?

struts配置文件中的action元素的attribute属性的作用?

struts配置文件中的action元素的input属性的作用?


答案:第1题的答案:

可以,不过这时候不能返回ActionForward对象,而是必须返回null,否则,会被覆盖掉。


第2题的答案:

action中的attribute属性的作用:action通常与一个formbean关联,formbean用于收集提交给action的参数,而随后的jsp页面往往也需要提取并显示formbean中的数据,所以,struts框架还要将formbean保存在request或者session作用域中,以便jsp页面可以获取,formbean保存在web作用域中的key值就是通过attribute属性指定的。如果没有指定attribute属性,那么,其默认为name属性的值。


第3题的答案:

        formbean的validate方法校验出错时,ActionServlet将返回一个显示错误的页面,这个页面就是通过input属性指定的,从input这个名称上来看,struts框架设计者希望这个页面就是用于输入和提交表单数据的那个页面,以便用户可以再次重新输入正确的数据。

 

 

 

HTML用户注册页面的实现通常包含以下几个步骤和原理: 1. **基本结构**:首先创建一个HTML文件,结构上主要包括`<!DOCTYPE html>`声明、`<html>`标签、`<head>`部分用于定义元信息(如标题、CSS链接等),以及`<body>`部分用于显示页面内容。 ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>用户注册</title> <link rel="stylesheet" href="styles.css"> <!-- CSS样式表 --> </head> <body> <!-- 注册表单内容 --> </body> </html> ``` 2. **表单元素**:在`<body>`里添加用户注册所需的各种输入字段,如`<form>`标签用于包裹整个表单,`<input type="text">`用于姓名、邮箱、密码等文本输入,`<input type="email">`验证电子邮件格式,`<input type="password">`隐藏输入密码以保证安全,还有提交按钮`<button type="submit">注册</button>`。 ```html <form id="registerForm"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required> <label for="password">密码:</label> <input type="password" id="password" name="password" required> <button type="submit">注册</button> </form> ``` 3. **事件处理**:通常会配合JavaScript来处理表单提交,验证输入数据的有效性和完整性,并防止跨站脚本攻击(XSS)。可以使用`addEventListener("submit", function(event) {...})`来监听表单提交事件。 4. **服务器交互**:当用户点击提交按钮后,表单数据会被发送到服务器端,比如PHP、Node.js、Python等后端语言处理。后端接收到数据后,进行进一步验证存储到数据库中。 ```javascript document.getElementById('registerForm').addEventListener('submit', function(event) { event.preventDefault(); // 阻止默认提交行为 // 这里只是一个示例,实际需要与后端API交互 fetch('/api/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: document.getElementById('username').value, email: document.getElementById('email').value, password: document.getElementById('password').value }) }).then(response => response.json()) .then(data => { console.log(data); // 根据返回结果处理成功或失败的情况 }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值