精华内容
下载资源
问答
  • Web服务工作原理概览

    2021-07-31 07:26:12
    web服务器的作用本质是提供内容。一开始只是将静态的内容(文件)传送出去,后来CGI技术允许动态的内容的出现。web容器是web服务器中管理servlet组件的一部分,是servlet的运行时环境。在Java里web容器就是servlet容器...

    web服务器的作用本质是提供内容。一开始只是将静态的内容(文件)传送出去,后来CGI技术允许动态的内容的出现。

    web容器是web服务器中管理servlet组件的一部分,是servlet的运行时环境。在Java里web容器就是servlet容器。servlet容器有管理servlet的生存周期,为servlet匹配url等作用。

    Servlet

    在Java中,开发者使用servlet来生成动态内容。Servlet接口在javax.servlet package中被定义。有3个重要的生存期方法,分别是init(), service(), and destroy()。这些方法在这些时候被调用:

    在Servlet生命周期的初始化阶段,web容器通过调用init()方法来初始化Servlet实例,并且可以传递一个实现 javax.servlet.ServletConfig 接口的对象给它。这个方法在Servlet实例的生命周期里只调用一次。

    初始化后,Servlet实例就可以处理客户端请求了。web容器调用Servlet的service()方法来处理每一个请求。

    最后,web容器调用destroy()方法来终结Servlet。如果想在Servlet的生命周期内关闭或者销毁一些文件系统或者网络资源,可以调用这个方法来实现。destroy() 方法和init()方法一样,在Servlet的生命周期里只能调用一次。

    Servlet类通过懒惰装载和预先装载这两种方式被装载到容器中,一个实例可以为多个线程服务。卸载时由JVM进行垃圾回收。

    ServletContext定义了Servlet和容器之间交流的方法,在web应用装载时有Servlet容器创建出来。同时,在web.xml中定义的Servlet, Filter and Listener都会被创建出一个类的实例。

    创建一个Servlet需要注意以下几点:

    MyServlet类需要继承了HttpServlet。Servlet类要么是继承了javax.servlet.GenericServlet的普通Servlet,要么是继承了 javax.servlet.http.HttpServlet的HTTP Servlet。

    重载 doGet() 和 doPost() 方法。这两个方法都已在 HttpServlet 类里定义了。当一个GET或POST请求到来时,它就会被映射到相应的方法里。例如,如果你向这个servlet发送一个HTTP GET请求,doGet()方法就会被调用。如:

    protected void doPost(HttpServletRequest request,

    HttpServletResponse response) throws ServletException, IOException {

    //Do some other work

    }

    HttpServletRequest 和 HttpServletResponse 是所有doXXX()方法的默认参数。

    Servlet容器和web服务器连接在一起,web服务器在特定的端口处(80)监听HTTP请求。当client(浏览器)发送一条HTTP请求时,Servlet容器创建了HttpServletRequest和HttpServletResponse各一个实例,然后匹配事先创建好的filter、servlet实例与请求的url,再把Request、Response传递给匹配实例的方法。requst实例的作用是处理HTTP请求的信息(HTTP头,请求主体);response实例的作用是帮助控制发送HTTP响应。

    在web应用中,要获取请求参数,需要调用 HttpServletRequest 对象的 getParameter() 方法,并且传递你要获取的输入参数的id给该方法。

    String value1 = req.getParameter("param1");

    String value1 = req.getParameter("param2");

    使用RequestDispatcher.forward()转发请求到另一个Servlet:有时候,你的应用需要把一个Servlet要处理的请求转让给另外的Servlet来处理并完成任务。而且,转让请求时不能重定向客户端的URL。即浏览器地址栏上的URL不会改变。在 ServletContext 里已经内置了实现上面需求的方法。当你获取了 ServletContext 的引用,你就可以简单地调用getRequestDispatcher()方法去获取用来转发请求的 RequestDispatcher 对象。当调用getRequestDispatcher()方法时,需要传递包含servlet名的字符串,这个Servlet就是你用来处理转让请求的Servlet。获取 RequestDispatcher 对象后,通过传递 HttpServletRequest 和HttpServletResponse 对象给它来调用转发方法。转发方法负责对请求进行转发。如下:

    RequestDispatcher rd = servletContext.getRequestDispatcher("/NextServlet");

    rd.forward(request, response);

    使用HttpServletResponse.sendRedirect()重定向请求到另一个Servlet:

    当应用内的特定URL被访问时,你想把浏览器的URL重定向到另外一个。要实现这种功能,你需要调用 HttpServletResponse 对象的sendRedirect()方法。

    httpServletResponse.sendRedirect("/anotherURL");

    Session和Cookie

    client第一次访问web应用时,或HttpSession通过request.getSession()获得时,servlet会生成一个长而独特的ID( session.getId()),然后存在内存里,再在response中设置一个Cookie,JSESSIONID作为Cookie名,ID值作为Cookie的值。在Http Cookie验证阶段,client回送有效的Cookie,servlet容器会使用Cookie的值来从内存中获取HttpSession。 HttpSession默认存活30分钟,client30分钟内没有访问web应用就会被销毁。client用新的browser实例去访问会创建一个新的HttpSession。

    线程安全

    public class MyServlet extends HttpServlet

    {

    private Object thisIsNOTThreadSafe; //Don't to this

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

    Object thisIsThreadSafe;

    thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!

    thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.

    }

    }

    这段代码很好的解释了如何规避线程不安全的行为。一个Servlet实例能为多个请求服务,如果多个请求共用一个变量就会造成线程不安全。

    参考

    展开全文
  • selenium的web控件定位与常见操作元素定位控制浏览器操作控制浏览器窗口大小控制浏览器前进后退刷新页面webdriver常用方法鼠标事件定位一组元素多表单切换警告框处理cookie操作WebDriver操作cookie的方法:调用...

    元素定位

    一共有8中定位方式:id、name、class name、tag name、link test、partial link text、xpath、css selector,每种定位方式所对应的方法如下:

    定位方式具体方法具体方法
    idfind_element_by_id()
    namefind_element_by_name()
    class namefind_element_by_class_name()
    tag namefind_element_by_tag_name()
    link textfind_element_by_link_text()
    partial linktext find_element_by_partial_link_text()
    xpathfind_element_by_xpath()
    namefind_element_by_name()通过xpath定位有多种方法,列出常用的几个:
    dr.find_element_by_xpath("//[@id=‘kw’]")
    dr.find_element_by_xpath("//
    [@name=‘wd’]")
    dr.find_element_by_xpath("//input[@class=‘s_ipt’]")
    dr.find_element_by_xpath("/html/body/form/span/input")
    dr.find_element_by_xpath("//span[@class=‘soutu-btn’]/input")
    dr.find_element_by_xpath("//form[@id=‘form’]/span/input")
    dr.find_element_by_xpath("//input[@id=‘kw’ and @name=‘wd’]")
    css selectorfind_emelent_by_css_selector()通过css selector定位有多种方法,列出常用的几个:
    dr.find_element_by_css_selector("#kw")
    dr.find_element_by_css_selector("[name=wd]")
    dr.find_element_by_css_selector(".s_ipt")
    dr.find_element_by_css_selector(“html > body > form > span > input”)

    常用的xpath

    一般情况下,表达式“/”表示从根节点选取子节点;"//"表示选取当前节点中的所有元素,包括子节点,孙子节点,重孙节点……;“.”表示选取当前节点;“…”表示选取当前节点的父节点;@表示选取属性。
    在这里插入图片描述

    常用的css选择器

    css selector和xpath一样,都可应用于selenium和appium中,但appium原生控件不支持css selector,只有在webview中才能够适用css selector

    选择器示例描述
    .class.intro选择class="intro"的所有元素
    #id#firstname选择id="firstname”的所有元素
    **选择所有元素
    elementp选择所有<p>元素
    element,elementdiv,p选择所有<div>和<p> 元素
    element elementdiv p选择<div>元素内部的所有<p>元素
    元素之间用的是空格占位符,表示获取空格左边元素<div>的所有的子元素,孙子元素……中的<p>元素
    element>elementdiv>p选择父元素为<div>元素的所有<p>元素,“>”只能选取子节点
    element+elementdiv+p选择紧接在<div>元素之后的所有兄弟<p>元素,div与p是同级的
    [attribute][target]选择带有target属性的所有元素
    [attribute=value][target=_blank]选择target="_blank"的所有元素
    [:nth-child(n)]p:nth-child(2)选择属于其父元素的第二个子元素的每个<p>元素
    [element1~element2]p~ul选择前面有<p>元素的每个<ul>元素

    不管用xpath还是css selector,都可以打开浏览器的开发者工具,在console中调试尝试下,如下
    用xpath来调试定位元素的语法:

    $x('//*[@id="kw"]')
    

    在这里插入图片描述
    用css selector来调试定位元素的语法:

    $('#kw')
    $('[id=kw]')
    

    在这里插入图片描述

    控制浏览器操作

    控制浏览器窗口大小

    可以通过设置参数来控制浏览器窗口的大小,方法set_window_size(宽度,高度),参数数字为像素点,如:

    from selenium import webdriver
    		 
    driver = webdriver.Firefox()
    driver.get("http://m.baidu.com")
    # 参数数字为像素点 
    print("设置浏览器宽480、高800显示") 
    driver.set_window_size(480, 800)
    driver.quit()
    

    另外,maximize_window()方法用来控制浏览器窗口以全屏的方式打开,无参数

    控制浏览器前进后退

    WebDriver提供了的back()和forward()方法来模拟浏览器的后退和前进按钮,如:

    from selenium import webdriver 
    		
    driver = webdriver.Firefox() 
    		
    #访问百度首页 
    first_url= 'http://www.baidu.com' 
    print("now access %s" %(first_url)) 
    driver.get(first_url) 
    		
    #访问新闻页面 
    second_url='http://news.baidu.com' 
    print("now access %s" %(second_url)) 
    driver.get(second_url) 
    		
    #返回(后退)到百度首页 
    print("back to %s "%(first_url)) 
    driver.back()
    		
    #前进到新闻页 
    print("forward to %s"%(second_url)) 
    driver.forward() 
    		
    driver.quit()
    

    刷新页面

    刷新页面的方法:driver.refresh()

    webdriver常用方法

    方法释义备注
    clear()清除文本
    send_keys(value)模拟按键输入
    click()单击元素
    submit()提交有时候 submit()可以与click()方法互换来使用, submit()同样可以提交一个按钮, 但 submit()的应用范围远不及 click()广泛
    size()返回元素尺寸
    text()获取元素的文本
    get_attribute(name)获得属性值
    is_displayed()设置该元素是否用户可见
    sleep() (Python函数)推迟调用线程的运行使用该函数要先import time,使用时:time.sleep(单位为秒)

    鼠标事件

    在webdriver中,关于鼠标操作的方法封装在ActionChains类中提供
    ActionChains提供的常用方法有:

    方法释义
    perform()执行所有ActionChains中存储的行为
    context_click()右击
    Double_click()双击
    drag_and_drop()拖动
    move_to_element()鼠标悬停

    执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作按顺序存放在一个队列中,当调用perform()方法时,队列中的事件会依次执行
    更多更详细的方法可参考官网:ActionChains官方文档

    基本用法

    # 生成一个动作 
    action ActionChains(driver)
    # 动作添加方法1
    action.方法1
    # 动作添加方法2
    action.方法2
    # 调用perform()方法执行
    action.perform()
    
    # 链式写法
    ActionChains(driver).move_to_element(ele).click(ele).perform()
    
    # 分布写法
    actions = ActionChains(driver)
    actions.move_to_element(ele)
    actions.click(ele)
    actions.perform()
    

    ActionChains模拟按键

    模拟按键有多种方法,可用win32api实现,或SendKeys,或selenium的WebElement对象的send_keys()方法,这里介绍ActionChains的几个方法
    用法如下

    action = ActionChains(driver)
    action.send_keys(Keys.BACK_SPACE)
    # 或者:
    action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL)
    action.perform()
    

    TouchAction鼠标模拟

    ActionChains只能对PC端的设备进行模拟操作,对H5端是无效的,但TouchAction都可以,能够实现滑动,拖拽,多点触控,模拟手势等各种操作
    手势控制:

    方法描述
    tap在指定元素上点击
    double_tap在指定元素上双击
    tap_and_hold在指定元素上点击但不释放
    move手势移动指定偏移
    release释放手势
    scroll手势点击并滚动
    scroll_from_element从某个元素位置开始手势点击并滚动(向上滑动为正数,向下滑动为负数
    long_press长按元素
    flick手势滑动
    flick_element从某个元素位置开始手势滑动(向上滑动为负数,向下滑动为正数)
    perform执行

    定位一组元素

    webdriver提供了8种用于定位一组元素的方法:

    find_elements_by_id() 
    find_elements_by_name() 
    find_elements_by_class_name() 
    find_elements_by_tag_name() 
    find_elements_by_link_text() 
    find_elements_by_partial_link_text() 
    find_elements_by_xpath() 
    find_elements_by_css_selector()
    

    多表单切换

    switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

    #先通过xpth定位到iframe
    xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
    #再将定位对象传给switch_to.frame()方法
    driver.switch_to.frame(xf)
    driver.switch_to.parent_frame()
    

    警告框处理

    在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。
    • text:返回 alert/confirm/prompt 中的文字信息。
    • accept():接受现有警告框。
    • dismiss():解散现有警告框。
    • send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

    cookie操作

    有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

    WebDriver操作cookie的方法:

    get_cookies(): 获得所有cookie信息。
    get_cookie(name): 返回字典的key为“name”的cookie信息。
    add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
    delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,选项包括“路径”,“域”。
    delete_all_cookies(): 删除所有cookie信息
    

    调用JavaScript

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。
    用于调整浏览器滚动条位置的JavaScript代码如下:

    window.scrollTo(左边距,上边距); 
    window.scrollTo(0,450);
    window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距
    

    窗口截图

    WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。

    关闭浏览器

    可以使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。
    例如多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

    close() 关闭单个窗口
    quit() 关闭所有窗口
    
    展开全文
  • 简单的Web调用OCX控件

    热门讨论 2013-05-27 12:39:58
    本程序简单描述ocx在网页中的调用方式,适合初步接触网页的设计人员对web调用ocx方式的理解。
  • iOS开发中一般用UILabel来展示文字、UIImageView用来显示图片、UIButton用于简单的图文点击响应事件,稍复杂一点的可以借助NSAttributedString来实现图文混排需求,...要实现以上需求,我们首先从iOS图文展示原理说起。
  • WEB控件的交互进阶

    2021-10-19 16:57:32
    执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作,按照顺序存放在一个队列里,当调用perform()方法时,队列中的时间才会一次执行 基本用法 action = ActionChains(driver)生成一个动作 action....

    常见的操作事件:右键点击,页面滑动,表单操作
    ActionChains :执行PC端的鼠标点击,双击,右键,拖拽等动作
    TouchActions:模拟PC端和移动端的点击,滑动,拖拽,多点触控等多种手势的操作


    动作链接ActionChains


    执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作,按照顺序存放在一个队列里,当调用perform()方法时,队列中的时间才会一次执行

    基本用法
    action = ActionChains(driver)生成一个动作
    action.方法1 动作添加方法1
    action.方法2 动作添加方法2
    action.perform 调用perform()执行

     ActionChains的基本用法:
     actions = ActionChains(self.driver)
     actions.click(element_click)
     actions.context_click(element_rightly01)
     actions.double_click(element_doubleclick)
            # time.sleep(3)
    

    ActionChains的具体用法:链式用法,分布写法
    链式用法:
    ActionChains(self.driver).move_to_element(element).click(element).perform()
    分布写法:
    actions = ActionChains(self.driver)
    actions.move_to_element(element)
    actions.click(element)
    actions.perfrom()

    import time
    
    import pytest
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from time import sleep
    
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    
    
    class TestActionChains:
        def setup(self):
            self.driver = webdriver.Chrome()
            self.driver.implicitly_wait(5)
            self.driver.maximize_window()
            print('setup')
    
        def teardown(self):
            self.driver.quit()
            print('teardown')
    
    -------------------点击,右键,双击-------------
        def test_case_clicks(self):
            self.driver.get('http://sahitest.com/demo/clicks.htm')
            找到操作的元素
            element_click = self.driver.find_element_by_xpath('//input[@value="click me"]')
            element_doubleclick = self.driver.find_element_by_xpath('//input[@value="dbl click me"]')
            element_rightly01 = self.driver.find_element_by_xpath('//input[@value="right click me"]')
            actions = ActionChains(self.driver) 生成一个动作
            actions.click(element_click)		动作添加方法:点击
            actions.context_click(element_rightly01)	动作添加方法:右击
            actions.double_click(element_doubleclick)	动作添加方法:双击
            # time.sleep(3)
            actions.perform()		执行actions
            time.sleep(3)
    
    -------------------鼠标移动到----------------
        def test_case_moveto(self):
            self.driver.get('https://www.baidu.com/')
            element_moveto = self.driver.find_element(By.ID, 's-usersetting-top')
            actions = ActionChains(self.driver)
            actions.move_to_element(element_moveto)
            actions.perform()
            sleep(3)
    
    -------------------点击不放,拉到某个位置,放开------
        def test_drag_drop(self):
            self.driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
            ele_drag = self.driver.find_element(By.ID, 'dragger')
            ele_drop = self.driver.find_element_by_xpath('/html/body/div[2]')
            actions = ActionChains(self.driver)
           # actions.drag_and_drop(ele_drag, ele_drop)
            '''
            actions.click_and_hold(ele_drag)
            actions.release(ele_drop)
            '''
            actions.click_and_hold(ele_drag).move_to_element(ele_drop).release()
            actions.perform()
            sleep(3)
            
    -------------------模拟按键方法---------------
        def test_keys(self):
            self.driver.get('http://sahitest.com/demo/label.htm')
            ele_input = self.driver.find_element_by_xpath('/html/body/label[1]/input')
            ele_input.click()
            actions = ActionChains(self.driver).pause(1)
            actions.send_keys('usename1').pause(1)  #pause 相当于等待1秒
            actions.send_keys(Keys.SPACE).pause(1)
            actions.send_keys('tom').pause(1)
            actions.send_keys(Keys.BACKSPACE).pause(1)
            actions.perform()
    
    

    TouchActions


    TouchActions类似于ActionChains,TouchActions类似于ActionChains。
    ActionChains只是针对PC端鼠标模拟的操作,不支持H5页面
    TouchChains支持H5页面操作

        tap --- 在指定元素上敲击
        double_tap --- 在指定元素上双敲击
        tap_and_hold --- 在指定元素上点击但不释放
        move --- 手势移动指定偏移(未释放)
        release --- 释放手势
        scroll --- 手势点击并滚动
        scroll_from_element --- 从某个元素位置开始手势点击并滚动
        long_press --- 长按元素
        flick --- 手势滑动
        flick_element --- 从某个元素位置开始手势滑动
    
    -----------------------------------
    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver import TouchActions
    from selenium.webdriver.common.by import By
    
    
    class TestTouchActions:
        def setup(self):
            option  = webdriver.ChromeOptions()
            option.add_experimental_option('w3c', False)
            self.driver = webdriver.Chrome(options=option)
            self.driver.implicitly_wait(5)
            self.driver.maximize_window()
    
        def teardown(self):
            pass
            #self.driver.quit()
    
        def test_touchaction_scrollbotttom(self):
            self.driver.get('https://www.baidu.com/')
            ele = self.driver.find_element(By.ID, 'kw')
            elem = self.driver.find_element(By.ID, 'su')
            ele.send_keys('selenium测试')
            action = TouchActions(self.driver)
            action.tap(elem)
            action.perform()
            action.scroll_from_element(ele, 0, 10000).perform()
            sleep(3)
    
    展开全文
  • html控件和web控件虽然好多功能相同并且长得很像,但是它们的内部实现机制是完全不一样的,Web控件要比Html控件执行效率要好。...Web控件是将集成式的拆解成单功能的:这样就可以节省不必要的控件所...

    html控件和web控件虽然好多功能相同并且长得很像,但是它们的内部实现机制是完全不一样的,Web控件要比Html控件执行效率要好。

    html控件和web控件比较1:使用起来也相当方便,举个简单的例子,例如Button的生成:

    Html控件是将庞大控件集合全部弄到页面中,用到哪个功能,就设置一下属性,如下:

    这样会占用相当大的控件资源 。

    Web控件是将集成式的拆解成单功能的:

    这样就可以节省不必要的控件所占用的资源了

    html控件和web控件比较2:Web控件具有回送功能,能够用ViewState维持控件的状态. Html控件则不能,当点击页面的操作,其状态就会丢失.

    可以做这样的一个实验:

    I. 分别建立两个文件: a.html b.aspx

    II.在a.html页面中加Html控件的RadioButton和一个button,在b.aspx中加Web控件的RadioButton和一个button

    III.a.html直接双击浏览器运行,b.aspx通过IIS运行

    IV.在a.html运行界面中,选中RadioButton,再单击Button按钮,会发现RadioButton会

    取消选中(丢失其状态),但在b.aspx页面执行同样的操作,RadioButton不会丢失,因为ViewState

    给它保存了状态. 您可以在运行界面点击浏览器菜单"查看"->“源文件",打开Html代码文件,

    找到加密后的ViewState,类似于下面:

    其实ViewState实现原理也是将一些信息放到隐藏的一个控件中,并且asp.net生成的ViewState信息是存储在客户端的,这里要注意的一点是:只有当格式为*.aspx文件,并且控件具有属性:"runat=server"时,回送功能才能打开

    html控件和web控件比较3:Html控件与Web控件***的区别是它们对事件处理的方法不同。对于Html窗体控件,当引发一个事件时,浏览器会处理它。但对于Web控件,事件仅由浏览器生成,但浏览器不会处理它,客户端要给服务器发个信息,告诉服务器处理事件。不过有些事件,比如:     按下键/移动/鼠标等事件,asp.net中没有这些事件 (因为这些事件即时性强,服务器处理得不够及时),这时候Html控件就发挥其作用了,结合Html事件协助完成.

    如下是一些Html常用的事件:

    在浏览器上执行的Html控件事件:

    单击时触发:

    鼠标弹起时触发:

    悬浮在控件上方时触发

    鼠标在控件上方移动时触发

    //双击控件时触发

    //当焦点在控件时,按键时触发

    //按键按下时触发

    在不需要与后台进行交互时就使用HTML控件,它的占用的资源比较少,速度也比较快,在需要与后台进行交互时,就使用WEB控件,或者在HTML 控件上加上runat="server" 也可以将一个HTML控件转换成交互控件,但这样占用的资源就和Web控件没任何分别了。

    WEB控件可以响应服务器端事件,可以在后台代码中设置相关属性和方法等!HTML不可, WEB服务器控件需要通过服务器处理后译为HTML控件再发送给浏览器,所以比较耗费服务器资源,并由于有IEWSTATE,所以在回送的时候会保持控件状态(也可以设置不保存)也因此增加了回送信息量。HTML直接发送到浏览器,不另耗费服务器资源,但无状态保存!

    获得HTML控件的值 需要使用REQUEST的FORM 方法,WEB控件就可以直接通过属性直接处理!

    所以,一般来说,对于不需要保存控件状态,并无什么对值处理的地方就可以使用HTML 如果需要对控件进行动态的处理,或要保存其状态等 就可以WEB服务器控件!WEB服务器控件用起来个人认为要方便些,但是就是另外多耗费服务器资源!

    很多书上都说,考虑性能的话在能不用WEB服务器控件的地方就尽量不用。

    什么时候用什么时候不用还是要看具体情况,在条件宽松的情况下就看个人习惯了。

    区别就是服务器控件有runat=server不是很必要的话用html,web太浪费资源。

    【编辑推荐】

    【责任编辑:王苑 TEL:(010)68476606】

    点赞 0

    展开全文
  • 第一章:Web打印控件原理  Web打印控件的工作的原理如下: 在需要打印的客户端电脑(操作系统为:Windows系统,XP需要先安装.NET Framework 3.5,其它版本的Windows不需要安装)上下载安装打印的客户端软件。检...
  • WebOffice是流行于国内市场的文档管理控件。20多年来,经华尔太科技研发团队不断迭代升级,WebOffice已更新至2019版本,最新版永久突破谷歌...本文将为大家介绍WebOffice控件的产品架构原理,请继续往下阅读↓1、浏...
  • web控件的常用操作:输入文字,左键右键点击,页面滑动,表单操作等 selenium提供的操作接口: ActionChains:执行PC端的鼠标点击,双击,右键,tuozhuai等操作 TouchActions:模拟PC和移动端的点击,滑动,拖拽...
  • Web自动化测试原理

    2021-02-28 11:08:20
    目前有很多Web UI自动化测试框架,如WatiN,Selinimu,WebDriver等,这些框架都可以操作Web中的控件,模拟用户输入,点击等操作,实现Web自动化测试。其实这些工具的原理都一样,都是通过调用IE COM接口和HTMLDOM 对IE...
  • 文章目录控件定位XPATHCSS Selector交互ActionChainsTouchActions 控件定位 XPATH XML Path Language 用于解析html与xml 缺点:速度相对慢 表达式 说明 / 从根节点开始 或 当前节点的子元素 // 从当前节点...
  • 本文为原创,如需转载,请注明作者和出处,谢谢!现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很...在asp.net中也有相应的上传文件的控件。虽然现在有很多上传组件可以利用,但是了解Web上传文件的原...
  • 【Selenium】(七)selenium中执行JavaScript脚本 当我们学会对页面元素进行定位后,下一步就是学习如何与WEB控件进行交互。Selenium为我们提供了与WEB控件进行交互的API,下面就为大家介绍ActionChains和...
  • WEB控件我们已经很熟悉,因为它是ASP.NET提供,一般关于ASP.NET的教程文章都会仔细介绍这些控件的详细应用技巧;而HTML控件,很多关于ASP.NET的文章仅仅一句话略过,甚至说只要在原来的HTML基础上加上“RunAt=”...
  • Web窗体的基本控件

    千次阅读 2012-04-26 13:18:42
    第5章 Web窗体的基本控件 与ASP不同的是,ASP.NET提供了大量的控件,这些控件能够轻松的实现一个交互复杂的Web应用功能。在传统的ASP开发中,让开发人员最为烦恼的是代码的重用性太低,以及事件代码和页面代码不能...
  • Slider(滑动条控件)

    2010-04-23 21:14:51
    类似于AJAX里的Slider控件,实用于任任浏览器
  • 常用Web控件

    千次阅读 2012-09-20 19:57:07
    1.文本类型控件  (1) Label(标签)  作用: 用于在页面上显示文本 。  语法:  Label控件。Text属性为显示文本。AssociatedControlID属性用来关联一个控件,如果为空的话会展示为一个,如果指定为一个...
  • web文件上传下载原理浅析

    万次阅读 2017-12-11 10:58:36
    一、web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload、还有Struts1.x和Struts2中...虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理
  • Web内部控件DropDownList

    千次阅读 热门讨论 2013-07-21 21:52:28
     DropDownList控件用于创建下拉列表。支持数据绑定  二、属性  1、AutoPostBack属性:用于设置当改变选项内容时,,是否自动回送到服务器。True表示回送;False(默认)表示不回送。  2、DataSource属性:用于...
  • 一.Actions ... ... 二.... 参考:7.2 行为链 - selenium-python中文文档 (python-selenium-zh....1.原理: 调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序放在一个队列中,当你调用perform()方法时
  • web开发中的form表单的原理与介绍

    千次阅读 2018-11-23 21:32:08
    据我的理解:表单应该是得包括输入文本框,提交按钮,由他们组合而成就叫做form表单控件(前端开发中会提供多种多样的控件) &lt;form action="Handler1.ashx" method="post" &gt; &...
  • Html控件与Web控件的区别与用途

    千次阅读 2007-05-10 08:38:00
    Html控件与Web控件的区别与用途 Web控件和Html控件虽然好多功能相同并且长得很像,但是它们的内部实现机制是完全不一样的,Web控件要比Html控件执行效率要好。 1. 使用起来也相当方便,举个简单的例子,例如Button的...
  • 知识点:理解 ASP.NET 的控件的分类、掌握服务器控件和页面回发的原理、掌握基本的 Web 服务器控件、掌握服务器控件的客户端事件处理。 在第一课【使用ASP.NET开发Web项目】第一课——初识ASP.NET中,我么创建了...
  • Asp.net在客户端开发和web开发所用到的控件还是有很大的差别的,而且Web开发的界面是在浏览器中显示的,所以控件的设计都和前边学习HTML设计有联系,没有客户端开发那么简单,不过我们可以通过专门工具,例如...
  • 第5章 Web窗体的基本控件

    千次阅读 2013-02-08 15:27:55
    第5章 Web窗体的基本控件 与ASP不同的是,ASP.NET提供了大量的控件,这些控件能够轻松的实现一个交互复杂的Web应用功能。在传统的ASP开发中,让开发人员最为烦恼的是代码的重用性太低,以及事件代码和页面代码不能...
  • WebOffice 文档在线编辑

    2021-10-28 10:09:30
     本文介绍的 WebOffice 控件是由广州市华尔太科技有限公司开发的一款在网页里处理 Office 文件的产品。 WebOffice 控件支持几乎所有对在线文档功能的需求,如在线新建、编辑、保存、多人协作 Office 文件等。 它...
  • 关于Web UI自动化测试的学习,一般会分为几个步骤: 1、了解Selenium的历史、原理、演进过程 2、学习Selenium的API 在这个阶段,当时笔者为了亲自尝试操作各种API,就不得不找各种前端控件,比如:Select、Alert、...
  • 目 录 一、工作原理...5 1.1开发流程...5 1.2WEB页面调用控件:.6 二、接口说明...7 2.1接口...7 2.1.1AboutBox.7 2.1.2AcceptAllRevisions.7 2.1.3CloseDoc.7 2....
  • 本文主要讲解如何使用VS 2010 的IDE开发网页OCX控件,及网页(Javascript)如何使用OCX控件(OCX控件在网页中使用方法)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,852
精华内容 18,740
关键字:

web控件的原理