感受 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"); }); });
|