黑马程序员技术交流社区
标题: 感受 [打印本页]
作者: csbl 时间: 2018-5-27 16:26
标题: 感受
感受
JSP + JavaBean
* 演示模式一的过程:
* 在模式一开发中提供了一些JSP的标签:<jsp:useBean>,<jsp:setProperty >,<jsp:getProperty>
* 使用模式一进行简单的测试:
<%
// 接收数据:
/* Stringusername = request.getParameter("username");
Stringpassword = request.getParameter("password");
// 封装数据:
User user= new User();
user.setUsername(username);
user.setPassword(password);*/
%>
<jsp:useBean id="user"class="com.itheima.demo1.domain.User"scope="page"></jsp:useBean>
<%-- <jsp:setPropertyproperty="username" name="user"/>
<jsp:setProperty property="password"name="user"/> --%>
<jsp:setPropertyproperty="*" name="user"/><!-- 表单的元素的name属性的值与User中的属性名称一致 就可以自动封装-->
<jsp:getProperty property="username"name="user"/>
Ø 内省的代码:
publicvoid demo1() throws Exception{
// 获得了Bean的信息
BeanInfobeanInfo = Introspector.getBeanInfo(User.class);
// 获得Bean的属性描述了ddddddddddddddddddd
PropertyDescriptor[]pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptorpd:pds){
System.out.println(pd.getName());
/*pd.getReadMethod();// 获得get方法
pd.getWriteMethod();//获得set方法.
*/ }
Ø 使用内省封装一个MyBeanUtils:
public class MyBeanUtils {
publicstatic void populate(Object obj,Map<String,String[]> map) throwsException{
// 获得类的所有的属性的名称:
BeanInfobeanInfo = Introspector.getBeanInfo(obj.getClass());
// 获得类中所有的属性:
PropertyDescriptor[]pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd d:pds) {
if(map.containsKey(pd.getName())){
Methodmethod = pd.getWriteMethod();
//执行set方法:
method.invoke(obj,map.get(pd.getName())[0]);
}
}
}
}
商品的添加的功能:
// 判断是否是重复提交:
Stringtoken1 = (String)request.getSession().getAttribute("token");
Stringtoken2 = request.getParameter("token");
//清空session中的令牌:
request.getSession().removeAttribute("token");
if(!token2.equals(token1)){
request.setAttribute("msg","亲!您已经提交过!请不要重复提交了!");
request.getRequestDispatcher("/jsp/msg.jsp").forward(request,response);
return;
}
// 判断是否是重复提交:
Stringtoken1 = (String)request.getSession().getAttribute("token");
Stringtoken2 = request.getParameter("token");
//清空session中的令牌:
request.getSession().removeAttribute("token");
if(!token2.equals(token1)){
request.setAttribute("msg","亲!您已经提交过!请不要重复提交了!");
request.getRequestDispatcher("/jsp/msg.jsp").forward(request,response);
return;
}
期的时候JS技术根本不受重视.后台开发人员经常将JS当成一种玩具式语言.JS中有一个对象XMLHttpRequest对象可以向服务器异步发送请求.传统的B/S结构的软件,所有实现功能都需要在服务器端编写代码(胖服务器).现在有了AJAX以后,可以将部分代码写到客户端浏览器(RIA:Rich InternetApplication).FLEX:AS脚本编程.
Ø GET方式提交请求:
function ajax_get() {
// 1.创建异步对象
var xhr =createXMLHttp();
// 2.设置状态改变的监听 回调函数.
xhr.onreadystatechange= function(){
if(xhr.readyState== 4){ // 请求发送成功
if(xhr.status== 200){ // 响应也成功
//获得响应的数据:
vardata = xhr.responseText;
//将数据写入到DIV中:
document.getElementById("d1").innerHTML= data;
}
}
}
// 3.设置请求路径
xhr.open("GET","/day15/ServletDemo1?name=aaa&pass=123",true);
// 4.发送请求
xhr.send(null);
}
Ø POST方式提交请求:
function ajax_post(){
// 创建异步对象:
var xhr =createXMLHttp();
// 设置监听:
xhr.onreadystatechange= function(){
if(xhr.readyState== 4){
if(xhr.status== 200){
document.getElementById("d1").innerHTML= xhr.responseText;
}
}
}
// 打开路径:
xhr.open("POST","/day15/ServletDemo1",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// 发送请求:
xhr.send("name=张三&pass=123");
创建数据库和表:
create database web_15;
use web_15;
create table user(
id intprimary key auto_increment,
usernamevarchar(20),
passwordvarchar(20),
nicknamevarchar(20),
typevarchar(20)
);
insert into user values (null,'aaa','111','小凤','user');
insert into user values (null,'bbb','111','小森','user');
代码实现:
function checkUsername(){
// 获得文本框的值:
varusername = document.getElementById("username").value;
// 创建异步对象:
var xhr =createXMLHttp();
// 设置监听:
xhr.onreadystatechange= function(){
if(xhr.readyState== 4){
if(xhr.status== 200){
vardata = xhr.responseText;
if(data== 1){
document.getElementById("s1").innerHTML= "<font color='green'>用户名可以使用</font>";
document.getElementById("regBut").disabled= false;
}elseif(data == 2){
document.getElementById("s1").innerHTML= "<font color='red'>用户名已经被占用</font>";
document.getElementById("regBut").disabled= true;
}
}
}
}
// 打开连接:
xhr.open("GET","/day15/ServletDemo2?username="+username,true);
// 发送请求:
xhr.send(null);
}
$(function(){
$("#username").blur(function(){
// 获得文本框的值:
varusername = $(this).val();
// 演示load方法:
//$("#s1").load("/day15/ServletDemo3",{"username":username});
// 演示get/post方法:
$.get("/day15/ServletDemo3",{"username":username},function(data){
if(data== 1){
$("#s1").html("<fontcolor='green'>用户名可以使用</font>");
$("#regBut").attr("disabled",false);
}elseif(data == 2){
$("#s1").html("<fontcolor='red'>用户名已经存在</font>");
$("#regBut").attr("disabled",true);
}
});
});
});
使用JQuery的AJAX的部分可以完成.
create table words(
id intprimary key auto_increment,
wordvarchar(20)
);
代码实现:
$(function(){
// 为文本框绑定事件:
$("#word").keyup(function(){
// 获得文本框的值:
varword = $(this).val();
// 异步发送请求:
if(word!= ""){
$.post("/day15/ServletDemo4",{"word":word},function(data){
$("#d1").show().html(data);
});
}else{
$("#d1").hide();
}
});
});
在注册页面上的籍贯的地方有选择省,省发生变化市也会跟着变化.市的数据从服务器端获取.响应JSON格式的数据.
$(function(){
// 为省份下拉列表绑定事件:
$("#province").change(function(){
varpid = $(this).val();
$.post("/day15/ServletDemo8",{"pid":pid},function(data){
//alert(data);
//JS识别JSON:
//var json = eval(data);
var $city = $("#city");
$city.html("<option>-请选择-</option>");
$(data).each(function(i,n){
//alert(n.cname);
$city.append("<optionvalue='"+n.cid+"'>"+n.cname+"</option>");
});
},"json");
});
});
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |