黑马程序员技术交流社区

标题: 感受 [打印本页]

作者: 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