Web

作者: Y_K柳上原 | 来源:发表于2018-07-18 14:48 被阅读0次

    Cookie

    • 1 maxAge

      最大有效时间(default -1)
      大于0,单位为秒(持久化到本地)
      小于0,关闭浏览器即失效(保存在浏览器内存中)
      等于0,删除

    • 2 path

      允许访问Cookie程序的路径
      /xxxx/ :
      / : all

    • 3 domain

      可以访问该Cookie的域名(第一个字符必须为.)

    • 4 name

      Cookie的名称

    • 5 value

      Cookie的值

    • 6 secure(default false)

      安全传输
      cookie的应用:①保存用户名和密码


    浏览器提交Cookie时只提交name和value


    Session

    • 1 Session的有效时间

      maxInactiveInterval (get && set &&web.xml配置)
      set方法设置有效时间单位为秒,web.xml <session-timeout>单位为分钟
      invalidate() 设置失效

    • 2 Session需要Cookie的支持

      浏览器会发送一个名称为JSESSIONID的Cookie, maxAge为-1
      如果浏览器不支持Cookie,可以使用url重写(response.encodeURL(String url))


    Fliter(javax.servlet.Fliter)

      1. 过滤器链

      ①init
      ②doFliter
      ③destory

    • 2 应用

      ①防止图片盗链(请求头的referer字段)
      ②处理编码
      ③日志记录
      ④权限验证
      ⑤异常捕获(Servlet中可以抛出异常)
      ⑥内容替换Fliter
      HttpServletResponseWrapper类,当Servlet调用response输出字符内容时会调用getWrite()方法,此时将输出内容进行保存而不进行输出; 如果输出二进制内容需要调用getOutputStream()

      ⑦ GZIP压缩Fliter

    Listener (Servlet2.3)

    监听session、context、request对象的创建和销毁

    • HttpSessionListener
    • ServletContextListener
    • ServletRequestListener

    监听session、context、request对象的属性变化

    • XXXAttributeListener

      attributeAdded(xxxEvent e)
      使用e可以获得变动的属性名
      还有属性移除,属性变更的函数


    • 应用

      ①单一登录

       登录的时候把用户信息存到Session,当用户使用同一个账号再次登录时,将Session中旧的客户信息对象移除(同时会出发attributeRemoved),并将新的信息保存,原来的登录发现Session中没有登录信息就强制下线了。当在登陆过的客户端使用别的账号登录时,先把Session中旧的登录用户信息删除,在把新的信息保存
      

    Servlet

    Servlet线程安全问题(单实例多线程)

    Servlet在运行过程中只会初始化一次,之后都使用同一个对象来处理请求
    tomcat(Servlet容器)将请求封装成HttpRequest对象传递给service方法
    当多个线程并发访问时,每个线程会创建自己的堆栈,对于局部变量来说,每个线程
    压入堆栈的局部变量都是不同的,而对于类的成员变量或者静态变量(因为对象一般在堆上)各个线程是共享的,并发操作这些变量可能会造成线程安全问题
    当在Servlet中对某个外部对象如文件进行操作时要进行加锁进行互斥访问

    SSH框架

    Struts2

    工作流程,拦截器截取请求,获取请求参数,根据配置文件,创建一个Action,将请求参
    数封装到该Action实例中,Action处理完一次请求就会销毁

    • Struts2 标签 <%@taglib uri="/struts-tags" prefix="struts" %>
        <struts:form>
            <struts:label value="登录系统"></struts:label>
            <struts:textfield name="acount" label="账号"></struts:textfield>
            <struts:password name="passwd" label="密码"></struts:password>
        </struts:form>
    
    • 拦截器

    配置在struts-core包的struts-default.xml文件中进行配置
    示例
    timer拦截器,记录Action执行时间并打印到控制台
    配置到相应action中
    token拦截器(防止表单重复提交)

    Hibernate

    jar包
    required + jpa + [日志] + 数据库驱动
    配置文件
    1.映射文件
    表的主键的配置(<id>)
    配置主键生成策略(<generate class='native'>)
    表字段和类成员对应配置(<property>)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    
        <!-- 配置类和表结构的映射 -->
        <class name="entity.User" table="h_user">
            <!-- 配置id 
                见到name属性,JavaBean的属性
                见到column属性,是表结构的字段
            -->
            <id name="id" column="uid">
                <!-- 主键的生成策略 -->
                <generator class="native"/>
            </id>
            
            <!-- 配置其他的属性 -->
            <property name="username" column="username"/>
            <property name="password" column="password"/>
            
        </class>
        
    </hibernate-mapping>  
    

    2.全局配置文件
    先配置SessionFactory(一个SessionFactory对应一个数据库)
    数据库驱动+url+用户名+密码+数据库方言(必须配置)
    可选配置[显示SQL语句+格式化SQL语句+自动生成数据库的表结构]
    引入映射的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        
    <hibernate-configuration>
        
        <!-- 记住:先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
        <session-factory>
            
            <!-- 必须要配置的参数有5个,4大参数,数据库的方言 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///day01</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            
            <!-- 数据库的方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            
            <!-- 可选配置 -->
            <!-- 显示SQL语句,在控制台显示 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 格式化SQL语句 -->
            <property name="hibernate.format_sql">true</property>
            <!-- 生成数据库的表结构 
                update:如果没有表结构,创建表结构。如果存在,不会创建,添加数据
            -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            
            <!-- 映射配置文件,需要引入映射的配置文件 -->
            <mapping resource="entity/User.hbm.xml"/>
            
        </session-factory>
        
    </hibernate-configuration>  
    
    • Configuration

      配置对象(数据库相关、映射文件)
      应用程序创建时加载

    • SessionFactory

      配置对象被用于创造一个 SessionFactory 对象,使用提供的配置文件为应用程序依次配置 Hibernate,并允许实例化一个会话对象。SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用

    • Session(单线程对象,不能被公用)

    • Transaction

    Dao 数据访问对象

    相关文章

      网友评论

          本文标题:Web

          本文链接:https://www.haomeiwen.com/subject/oqielftx.html