JavaWeb七---Filter、json、ajax、Maven

 

 

 



 


未使用filter前 方法一:在jsp页面中,检查用户是否有登录信息

有局限性---只能在jsp页面中过滤

Filter:

1. 创建filter类实现Filter     ----------     导包 Filter   javax.servlet包下的

2. 重写doFilter方法-----获取session判断用户是否满足登录信息

3. 配置filter程序要拦截的路径

用户登录请求到admin下面的所有页面都将经过filter过滤器---->进入到doFilter判断不满足的请求拦截
此时,访问admin中的所有文件都不会执行需要先判断请求的信息是否满足
注意:缓存没清理,会导致,直接访问浏览器中的缓存文件


对比servlet


再添加登录成功后的代码
---------login.jsp通过servlet跳转

--------判断登陆成功后,用户名赋值给user传入到session中


1. 登录前,访问a.jsp,会请求转发会登录界面
        当从表单提交正确的用户信息--登录后,访问拦截中的文件(a.jsp)
        通过chain.doFilter(request,response),退出拦截,就可以访问admin下的文件了


2. 登陆成功后,浏览器再次访问a.jsp

 

 


1.获取web.xml中filter-name


2.获取web.xml中init-param



3.获取ServletContext对象

 







         

Filter1

            
Filter2

            
target.jsp



执行顺序:

 

取消掉Filter2的chain.doFilter()方法和后置代码
程序会在执行完Filter2的前置代码2后,返回Filter1,继续执行后置代码1


结果:


取消掉Filter1的chain.doFilter()方法和后置代码
程序会在执行完Filter1的前置代码1后,直接返回


结果:

 

多个Filter组成的FilterChain过滤链的执行顺序

Filter1 和 Filter2 的执行顺序是web.xml中的两个filter 的顺序


 

多个Filter过滤器执行的特点:


1. 都在同一线程中
filter1中  获取线程名
filter2中  获取线程名  
target中 
获取线程名  


2. 都使用同一个request对象



甚至filter1在域中设置的值,在filter2或者target.jsp中能读取


 

 
      

      
    -------不能以 / 开头
       
后缀名匹配的后缀名,可以是任意字符串,只要请求时,输入相匹配的后缀名,就能访问到



---------因此Filter过滤器只关心请求的地址匹配,不关心请求资源存在

 

 

 

 

 

 

 




      

 








json就是一个对象,其中的 key就相当于属性




     

访问

当json1中key的值为json2时,访问时直接  .json2的key



值为json数组

1. 

2. 

 



json对象《==》json字符串

JSON.stringify( jsonObj )    json对象 ==》json字符串
JSPN.parse( jsonstring )       json对象《== json字符串





JSON.stringify( jsonObj)
JSON.parse( jsonObjString)


 


需要导包使用谷歌的gson.jar


 
 

1.2.1、javaBean 和 json的互转   gson.toJson()     gson.fromJson()


json字符串转回对象时,fromJson的第二参数,可以使用Class来转一个JavaBean对象


1.2.2、list 和json的互转


------------------------------------------------------------------------------------

------------------------------------------------------------------------------------

json字符串数组转换回List集合时,fromJson()的第二个参数,需要用带反射的类TypeToken<ArrayList(Person)>的Type
使用继承TypeToken类的子类对象,的getType方法做参数


继承TypeToken时,规定好泛型的类型--ArrayList<Person>




1.2.3、map 和json的互转


-----------------------------------------------------------------------------------------------------


-----------------------------------------------------------------------------------------------------
json字符串数组转换回Map集合时,fromJson()的第二个参数,用带反射的类TypeToken<HashMap(Integer,Person)>的Type
并指明TypeToken子类继承的的泛型
使用继承TypeToken类的子类对象,的getType方法做参数


继承TypeToken时,规定好泛型的类型--HashMap(Integer,Person)

 

优化:
json字符串转回 List、Map时,fromJson()的第二参数私用匿名内部类


 

 


使用jackson的jar包 来序列化list为 json


 

 




1.创建XMLHttpRequest对象
2.项服务器发送请求open("get/post","url",true)+send()
3.绑定响应事件onreadystatuchange=function(){if(readstate statu)}



  
问题一:

url处使用相对路径







 

同步、异步执行
异步执行

响应服务器

请求发送代码

异步执行,先执行请求(除了响应代码)的所有代码

响应代码:服务器什么时候响应,什么时候执行



同步执行
响应代码之后的代码,必须等服务器响应后,才能执行

异步请求:提升用户体验------页面的请求和服务器响应异步执行

 



$.ajac方法


                               

 

$.ajax  ( { url: "地址" ,  data: "参数" , type: "GET/POST" , success:  function(data){},  dataType: "数据类型"  } )

              

 

$.get 和 $.post 方法      -----在$.ajax方法基础上

                    
$.get ( "地址" , "参数" , "响应函数" , "数据类型" )



 

$.getJSON方法     ------比$.ajax() 少 数据类型、请求类型 参数



 

表单序列化serialize()



$("#form01").serialize()----------获取表单的全部信息,拼装成键值对方式:username=xxx&password=xxx

将serialize()获取的全部表单参数,连接到请求参数后,需要加上&

注意:getJSON方法的参数,url和callback之间的都是 请求参数

 

 

 

 

 

 

 

导包、编译、单元测试、打包

 

jar包放到jar包仓库,项目中只有jar包坐标



传统的项目,需要放到tomcat目录下的webapps中,再startup启动项目
Maven项目,只需使用mvn tomcat:run   就能使用Maven自带的tomcat运行项目

 

IDEA 自带 maven  setttings.xml      C:\Users\Administrator\.m2\repository
本地仓库路径: C:\Users\Administrator\.m2\repository

 

Maven 安装

需要解压到一个英文路径,并添加环境变量 MAVEN_HOME  为 安装路径,添加Path 新建%MAVEN_HONE%\bin
cmd中输入 mvn -v    

mvn 构建项目的
boot 类加载器
仓库

一般公司就使用私服

本地仓库jar包修改路径----------项目通过该路径寻找jar包

 

Maven标准目录结构

 



mvn clean  删除编译文件

mvn compile  编译  --- 生成target目录
mvn test 编译了test目录下的文件,并且编译了src下的文件
mvn package  将项目打包,并编译src+test文件,打包类型在pom.xml中<packing>中定义了
mvn install  打包项目,并编译src+test文件,打包类型,最后再将包添加到本地仓库

Maven生命周期



 

IDEA集成maven插件

在本地未连网的情况下,配置后,只要之前下载过相关功能的插件,未连网的情况也能配置好

-DarchetypeCatalog=internal

 

 

创建Maven工程时,使用提供的骨架创建,就需要自动下载,创建好后,需要自己创建资源文件夹resource,并设置为资源类文件夹,手动补齐

 

创建骨架时,配置conf下的setting.xml中mirrors为aliyun的镜像


	   <mirror>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<mirrorOf>central</mirrorOf>       
	  </mirror>




idea web小技巧,想要在java文件夹中也创建jsp页面,需要添加java文件夹为web资源结构

 


添加servlet和jsp依赖

作用域


添加依赖时,添加包的作用域,防止冲突(导入的包和Maven自带的包冲突)

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>3.1.0</version>
 <scope>provided</scope>
</dependency> <dependency>
 <groupId>javax.servlet.jsp</groupId>
 <artifactId>jsp-api</artifactId>
 <version>2.1</version>
 <scope>provided</scope>
</dependency>

 

配置另一个tomcat



插件模板一键配置

 

 

 

 

最简短的连接数据库

 @Override
    public List<Items> findAll() throws Exception{
        List<Items> list = null;
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy_mybatis?characterEncoding=utf-8&serverTimezone = GMT","root","123456");
            pst = conn.prepareCall("select * from user ");
            rs = pst.executeQuery();
            list = new ArrayList<>();
            while (rs.next()){
                Items items = new Items();
                items.setId(rs.getInt("id"));
                items.setName(rs.getString("username"));
                list.add(items);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conn.close();
            pst.close();
            rs.close();
        }
        return list;

直接通过连接对象执行SQL语句,返回一个preparedStatement对象

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值