那么就不会执行用户请求的Servlet,把需要执行的

2019-08-10 作者:编程   |   浏览(191)

JDBC入门(4)--- 批处理,jdbc入门

1、Statement批处理

  当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这样做的效率上极差,处理的方案是使用批处理,即一次向服务发送多条SQL语句,然后由服务器一次性处理。

  批处理只针对更新(增删改)语句,批处理与查询无关。

  可以多次调用Statement类的addBatch(String sql)方法,把需要执行的所有SQL语句添加到一个“批”中,然后调用Statement类的excuteBatch()方法来执行当前“批中的语句”。

  • void addBatch(String sql):添加一条语句到“批”中。
  • int[] excuteBatch():执行“批”中所有的语句,返回值表示每条语句所影响的行数据;
  • void clearBatch():清空“批”中的所有语句

2、PreparedStatement批处理

  PreparedStatement的批处理有所不同,因为每个PreparedStatement对象都绑定一条SQL模板。所以向PreparedStatement中添加的不是SQL语句,而是给“?”赋值。

 1 public class Demo5 {
 2     /*
 3     * pstmt对象内部有集合
 4     * 1、用循环疯狂向pstmt中添加sql参数,它自己有模板,
 5     * 使用一组参数与模板就可以匹配一条sql语句
 6     * 2、调用它的执行批方法,完成向数据库发送。
 7     * */
 8     @Test
 9     public void fun1() throws Exception {
10         /*
11         * pstmt
12         * */
13         Connection con = JdbcUtils.getConnection();
14         String sql = "INSERT INTO t_user VALUES (?,?)";
15         PreparedStatement pstmt = con.prepareStatement(sql);
16         for (int i = 0; i < 10000; i  ) {
17             pstmt.setInt(1,i 1);
18             pstmt.setInt(2,i);
19             pstmt.addBatch();//添加批,这一组参数就保存到集合中;
20         }
21         long start = System.currentTimeMillis();
22         pstmt.executeBatch();//执行批处理;
23         long end = System.currentTimeMillis();
24         System.out.println(end-start);
25     }
26 }

打开批处理

MySQL的批处理也需要通过参数来打开:rewriteBatchedStatements=true,如

url = jdbc:mysql://localhost:3306/mydb1?rewriteBatchedStatements=true

效果:

  • 批处理开启前耗时:140794ms
  • 批处理开启后耗时:174ms

批处理,jdbc入门 1、Statement批处理 当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这样做的效率上极差,处理...

过滤器(Filter),过滤器filter

一、JavaWeb三大组件

  都需要在web.xml中进行配置

    • Servlet
    • Listener(2个感知监听器不需要配置)
    • Filter

二、过滤器

1、什么是过滤器   过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。   当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。   其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。 Filter是单例的

创建示例:

 1 package web.filter;
 2 
 3 import javax.servlet.*;
 4 import javax.servlet.annotation.WebFilter;
 5 import java.io.IOException;
 6 
 7 @WebFilter(filterName = "AFilter",urlPatterns = "/AServlet")
 8 //urlPatterns为拦截资源路径名,等同于在下文配置web.xml文件
 9 public class AFilter implements Filter {
10     /*
11     * 创建之后马上执行,用来做初始化,Filter会在服务器启动时就创建
12     * */
13     public void init(FilterConfig config) throws ServletException {
14         System.out.println("过滤器出生了");
15     }
16     /*
17     *每次过滤时都会执行
18     * */
19     public void doFilter(ServletRequest req, ServletResponse resp,
20                          FilterChain chain) throws ServletException, IOException {
21         System.out.println("拦截你");
22     }
23 
24     /*
25     * 销毁之前执行,在服务器关闭时销毁
26     * */
27     public void destroy() {
28         System.out.println("过滤器要销毁了");
29     }
30 }

web.xml文件

1 <filter>
2       <filter-name>AFilter</filter-name>
3       <filter-class>web.filter.AFilter</filter-class>
4 </filter>
5 <filter-mapping>
6       <filter-name>AFilter</filter-name>
7       <url-pattern>/AServlet </url-pattern>
8 </filter-mapping>

 2、过滤器的生命周期

  • init(FilterConfig):在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建!在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法只会被执行一次;
  • 小鱼儿玄机30码 ,doFilter(ServletRequest req,ServletResponse res,FilterChain chain):这个方法会在用户每次访问“目标资源

(<url-pattern>index.jsp</url-pattern>)”时执行,如果需要“放行”,那么需要调用FilterChain的doFilter(ServletRequest,ServletResponse)方法,如果不调用FilterChain的doFilter()方法,那么目标资源将无法执行;

  • destroy():服务器会在创建Filter对象之后,把Filter放到缓存中一直使用,通常不会销毁它。一般会在服务器关闭时销毁Filter对象,在销毁Filter对象之前,服务器会调用Filter对象的destory()方法。

3、FilterConfig

  功能与ServletConfig相似,与web.xml文件中的配置信息对应。下面是FilterConfig的功能介绍:

  • ServletContext getServletContext():获取ServletContext的方法;
  • String getFilterName():获取Filter的配置名称;与<filter-name>元素对应;
  • String getInitParameter(String name):获取Filter的初始化配置,与<init-param>元素对应;
  • Enumeration getInitParameterNames():获取所有初始化参数的名称。

4、多个过滤器执行顺序       一个目标资源可以指定多个过滤器,过滤器的执行顺序是在web.xml文件中的部署顺序; 5、过滤器有四种拦截方式

  • 请求REQUEST:<dispatcher>REQUEST</dispatcher>(默认)
  • 转发FORWARD:<dispatcher>FORWARD</dispatcher>
  • 包含INCLUDE:<dispatcher>INCLUDE</dispatcher>
  • 错误ERROR:<dispatcher>ERROR</dispatcher>
自动配置web.xml:
@WebFilter(filterName = "BFilter",urlPatterns = "/AServlet",dispatcherTypes = FORWARD)
//需导包

6、过滤器的应用场景

  • 执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行,只是在目标资源执行之前做一些准备工作;
  • 通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用;
  • 在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理;

7、设置目标资源

在web.xml文件中部署Filter时,可以通过“*”来执行目标资源:

<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

还可以为<filter-mapping>指定目标资源为某个Servlet,例如:

<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
<filter>
<filter-name>myfilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<servlet-name>myservlet</servlet-name>
</filter-mapping>

当用户访问   8、filter中的注解说明(idea):

@WebFilter(filterName = "AFilter",servletNames = "AServlet",
        urlPatterns = "/AServlet",dispatcherTypes = DispatcherType.FORWARD)
/*filterName 过滤器名
servletNames 指定过滤的servlet名字
urlPatterns为拦截资源路径
dispatcherTypes为拦截类型*/

一、JavaWeb三大组件 都需要在web.xml中进行配置 Servlet Listener(2个感知监听器不需要配置) Filter 二、过滤器...

一位从 vb系转到 JAVA的朋友在一个类中 写了一个类似 VB中MSGBOX的方法,一个类msgbox

//此方法放一个自定义的 JAVA类中

public static boolean msgBoxPlus(Activity objPage, String strTitle,String strMsg,String strOkTitle,String strCancelTitle){

if(strOkTitle==""){
strOkTitle="Ok";
}
if(strCancelTitle==""){
strCancelTitle="Cancel";
}

AlertDialog.Builder dtl= new AlertDialog.Builder(objPage);

dtl.setTitle(strTitle);//���öԻ������

dtl.setMessage(strMsg);//������ʾ������

final TextView txtNote=new TextView(objPage);
dtl.setView(txtNote);

dtl.setPositiveButton(strOkTitle,new DialogInterface.OnClickListener() {//���ȷ����ť

 

@Override

public void onClick(DialogInterface dialog, int which) {//ȷ����ť����Ӧ�¼�

// TODO Auto-generated method stub
txtNote.setText("true");
//finish();

}

});

DialogInterface.OnClickListener dtlclc=new DialogInterface.OnClickListener(){

@Override

public void onClick(DialogInterface dialog, int which) {//��Ӧ�¼�

// TODO Auto-generated method stub
txtNote.setText("false");
//Log.i("alertdialog"," �뱣����ݣ�");
//finish();

}

};

dtl.setNegativeButton(strCancelTitle,dtlclc);

dtl.show();//�ڰ�����Ӧ�¼�����ʾ�˶Ի���

String strOk=txtNote.getText().toString();
if(strOk=="true"){
return true;
}else{
return false;
}

}

 

 

致可敬的程序猿:

大部分的程序猿 在18:00以后继续堆代码,一直到深夜。

大部分的程序猿需要加班,经常加班,白加班。

所谓生命不息,加班不止 是他们的座右铭。

加QQ:1030572498

小鱼儿玄机30码 1        

 

//此方法放一个自定义的JAVA类中 public static boolean msgBoxPlus...

学习、归纳方法(以学习 Maven 为例),归纳maven


当我们要学习新技术/东西

小鱼儿玄机30码 2

  • 上图来源:
  • 在过去未被自己流程化的情况下,自己学习新的东西的时候一直是处理迷迷糊糊的状态,直到我看到这张思维导图,我瞬间就理清自己平时在学习东西时候那混乱的思维了。
  • 可能平时我们也是这样做的,可是我们从来没有认真思考过或是整理过这样的思绪。也许你认为这样不重要,但是对我而言,有记录的东西,代表可以被流程化,这可以帮助特定情况下的我。
  • 下面跟着这张思维导图,我们一起来整理 Maven 的材料。

 

它是什么

  • 术语定义
    • Maven 官网定义:
    • 百度百科定义:
    • 维基百科定义:
      • 在 Wiki 上还需要注意如下,这些有助于你站在更加宏观的角度看待它,但是可能需要积累:
        • 参见
        • 补充阅读
        • 参考资料
        • 外部链接
  • 它的历史
    • Google 搜索:Maven History
    • Google 搜索:Maven 区别Maven difference
    • Google 搜索:Maven 使用场景
    • Google 搜索:What is Maven
    • Google 搜索:To use or not to use Maven
    • Google 搜索:Maven use case
      • 在 Google 搜索结果页最下面,看它提示的搜索关键字内容,看是否有版本上的区别。
  • 同类常见技术(按技术出现时间正序)
    • Ant
    • Gradle
  • 同类技术比较:
    • Google 搜索:Ant Maven Gradle
    • 比如文章:
  • 学习前提/依赖
    • 要有 Java 基础相关

 

为什么会出现

  • Google 搜索:
    • 关键字:为什么用 maven
    • 关键字:why use maven
    • 关键字:What does Maven do
    • 关键字:Why do we need Maven
    • 关键字:Why should we use Maven

本文由小鱼儿玄机30码发布于编程,转载请注明出处:那么就不会执行用户请求的Servlet,把需要执行的

关键词: 小鱼儿玄机30码