过滤器的执行过程:// 目标资源执行前执行chain.doFilter(request, response);// 目标资源执行后执行

文件上传的前提:1.表单的method方法必须是post2.表单的enctype类型必须是:multipart/form-data3.表单中input的上传输入域为:<input type="file"/><form method="post" enctype="multipart/form-data>    name:<input type="text" name="name"/>    file:<input type="file" name="upLoad"/>    <input type="submit" value="up"/></form>form表单的enctype属性,该属性的作用是用来告知服务器,请求正文内容是MIME类型,相当于Content-type利用第三方组件实施文件上传,apache:commons-fileupload.jar,依赖:commons-io.jar代码:// 检查form的enctype是否是multipart类型boolean isMultipart = ServletFileUpload.isMultipartContent(request);if(!isMultipart)    throw new RuntimeException("文件类型不符")// 解析请求内容,磁盘文件条目工厂DiskFileItemFactory factory = new DiskFileFactory();// 产生FileItem的工厂ServletFileUpload sfu = new ServletFileUpload(factory);// 建立一个数据结构,用于存储FileItem的数据List<FileItem> items = new ArrayList<FileItem>;try{    // 对请求进行解析,吧解析的内容放入到items里面    items = sfu.parseRequest(request);}catch(FileUploadException e){    throw new RuntimeException("failed");}// 对items的数据进行遍历取出for(FileItem item:items){    // 普通字段    if(item.isFormField()){        processFormField(item);    }else{        processUploadField(item);    }}上传中考虑的几个问题1.将文件放到用户访问不到的地方(WEB-INF目录下)2.重复名字文件被覆盖的问题,把文件名做成唯一,UUID:通用唯一标识码。a.txt--->UUID-a.txt3.避免一个文件夹中的文件过多1)按照日期分目录存储2)按照文件名的hashCode随机生成目录int hashCode = fileName.hashCode();int dir1 = hashCode&0xf;4.文件大小的限制web文件上传的内容不宜过大,就是要对工厂的容量进行限制1)限制单个文件的大小sfu.setFileSizeMax(3*1024*1024);2)限制整个文件的大小sfu.setFileMax(5*1024*1024);try{    items = sfu.parseRequest(request);}catch(FileUploadBase.FileSizeLimitExceededException e){    response.getWriter().write("must small 3M");}catch(FileUploadBase.SizeLimitExceededException e){    response.getWriter().write("sum must small 5M");}ServketContextListenerServletContextListenerHttpSessionListenerHttpSessionListenerServletRequestListenerServletRequestListenerServletContextAttributeListenerServletContextAttributeListenerHttpSessionAttributeListenerHttpSessionAttributeListenerServletRequestAttributeListenerHttpSessionBindingListenerHttpSessionActivationListenerAJAX引擎:XMLHttpRequestJSON:js对象标记,js Object Notation

List<String> list = new List<String>;list.add("a");list.add("b");list.add("c");JSONArray json = JSONArray.fromObject(list);

public class CreateDeng{    // 泛型使用之前必须声明    // <T>就是声明泛型类型,放在返回值的前面    public <T> T v1(){        return null;    }    public <T> void m2(T t){    }    public <T> void m3(class<T> t){    }}// 类上声明泛型,实例方法中就可以使用了public class CreateDeng<T>{    public T m1(){        return null;    }    public void m2(T t){    }    public void m3(class<T> t){    }    // 对于静态方法必须都是先声明后使用    public static <T> void m4(class<T> t){    }    public static <K,V> K m5(V v){}}低点:1302.2高点:1310.1点差:7.97.9×0.382=3.0178---->1310.1-3.01=1307.097.9×0.5=3.95---->1310.1-3.95=1306.15hibernate.cf.xml<hibernate-configuration>    <session-factory>        <!--JDBC基本链接-->        <properties name="hibernate.connection.driver_class>com.mysql.jdbc.Driver</properties>        <properties name="connection.username">root</properties>        <properties name="connection.password">sorry</properties>        <properties name="connection.url">jdbc:mysql:localhost:3306/day22</properties>        <!--配置数据库方言-->        <properties name="dialect">com.hibernate.dialect.MySQLDialect</properties>        <properties name="hibernate.hbm2ddl.auto">update</properties>        <!--显示sql的语句及格式>        <properties name="hibernate.show_sql">true</properties>        <properties name="hibernate.format_sql">true</properties>        <!--告知映射文件>        <mapping resource="../Student.hbm.xml"/>

    </session-factory></hibernate-configuration>I not know how to get the money200dao*4=800kuajinStudent.hbm.xml<hibernate-mapping>    <class name="Student" table="STUDENTS">        <id name="id" column="ID">        <!--根据数据库的能力管理主健-->        <generate class="native"></generate>        </id>        <properties name="name" column="NAME"></properties>        <properties name="birthday" column="BIRTHDAY"></properties>    </class></hibernate-mapping>制定自己的三年规划:2018年,存款10W+;2019年,买一套房,付首付;2020年,买一辆自己的爱车奥迪A4L。无论想什么办法都要实现!!!Dao.javapublic  Dao<T>{    void add(T t);    void update(T t);    // 根据主健查找对象    T findOne();    // 根据主健删除对象    void delete(Serializable id)}CustomerDao.javapublic interface CustomerDao extends Dao<Customer>{    List<Customer> findPageCustomer(int startIndex, int size);}config.properties文件用来当作配置文件,通常为用于提供系统参数配置,方便用户对系统参数进行调整,通常以键值对的形式存在maven 软件项目管理工具xxx.hbm.xml类实体映射文件:hibernate.cfg.xml 核心配置文件:数据库配置信息这个其实也没有什么意思,这个算是一种约定就像我们中国人的名字都是第一个字是姓,后面的是名一样我们用这样的命名一眼就可以看出来是hibernate的映射配置文件,当然如果我们其他的xml配置文件也用这样的格式命名也是可以的,但是这样相当于一种约定,一种命名规范一样uuid通用唯一识别码:在xxx.hbm.xml文件中,用于配置主健java 中@的使用1.javadoc 文档关键字/**@author*@date*/自动生成API文档,标注作者,版本,日期,相关参数等2.java annotation /java 标注语法:@关键字(值)用于把关键字和值传递给编译器,更加精确地控制编译器的动作关键字随着技术、框架、编译器的不同而不同,比如@Override,说明会重写父类的该方法@Deprecated 表示当前元素是不赞成使用的@SuppressWarning 表示忽略一些不当的编译器信息src/main/java:存放java文件src/main/resource:存放配置文件src/test/java:存放测试的java文件src/test/resource:存放测试的资源文件src/main/webapp:存放jsp,images,js等文件src/main/webapp:存放jsp,images,js等文件FCK文本编辑框,js进度条,js文本框,js使用highslideJs// 使用InputStream输入流读取到path下的文件,将输入流InputStream写到输出流(response对象中获取)中InputStream in = new InputStream(new File(ServletActionContext.getServletContext.getRealPath(""), path));OutputStream out = response.getOutputStream();while(int b=-1;(b=in.read())!=-1){    out.write(b);}out.close();in.close();//${}:EL表达式表示你从另外一个页面获得的参数值style="CURSOR:hand"// 当鼠标悬浮在标签上表现为手形timestamp:时间戳,是一个数据,一个能够表示在某个时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一表示某一时刻的时间。"${pageContext.request.contextPath}/image.jsp?timestamp="+new Date().getTime()timestamp表示一个参数,一个叫时间戳,浏览器会判断当前请求路径是否发生改变,如果没有改变,它会提取缓存中的数据,而不是重新去请求。加上时间戳,保证每次请求的路径不一样。function checkNumberImage(){    // 获取标签    var imageNumber = document.getElementById("imageNumber");    imageNumber.src = "${pageContext.request.contextPath}/image.jsp?timestamp="+new Date().getTime();}Random rand = new Random();String sRand = "";for(int i=0;i<4;i++){    String rand = String.valueOf(rand.nextInt(10));    sRand += rand;}session.setAttribute("CHECK_NUMBER_KEY",sRand);//ImageIO:用来进行简单的图片IO操作,一个是读(read),另一个是写(write)1.read:File file = new File("c:/test/a.jpg");BufferedImage bi = ImageIO(file);2.write:RenderedImage的子类是BufferedImage,传递子类直接实例化父类public static boolean write(RenderedImage im, String formatName, File output);public static boolean write(RenderedImage im, String formatName, OutputStream output);public static boolean write(RenderedImage im, String formatName, BufferedOutputStream output);// public static boolean isBlank(String str):是否为空(null),长度为0,由空白字符(whitespace)等组成StringUtils.isBlank(null)=true;StringUtils.isBlank("")=true;StringUtils.isBlank("  ")=true;// public static boolean isEmpty(String str):判断为空,标准是String str=null或者String str.length()==0StringUtils.isEmpty(null)=true;StringUtils.isEmpty("")=true;StringUtils.isEmpty("  ")=false;equalsIgnoreCasepublic boolean equalsIgnoreCase(String anotherString)将此字符和另一个字符忽略大小写后进行比较,返回布尔值// 从网页获取数值request.getParameter(xxx)// 从session获取数值request.getSession().getAttribute(xxx);public class loginUtil{    // remember me    public static void rememberMe(String name, String password, HttpServletRequest request, HttpServletResponse response){        // 建立两个Cookie,存放指定值        Cookie nameCookie = new Cookie("name",name);        Cookie passwordCookie = new Cookie("password", password);        // 设置Cookie的有效路径(当前项目)        nameCookie.setPath(request.getContextPath()+"/");        passwordCookie.setPath(request.getContextPath()+"/");        // 设置cookie的生存时间        // 先获取页面用户选定记住我的复选框的值        String rememberMe = request.getParameter("remember");        // 复选框选定        if(remember!=null && remember.equals("yes")){            // 生存时间为7天            nameCookie.setMaxAge(7*24*60*60);            passwordCookie.setMaxAge(7*24*60*60);

        }        // 复选框没有选定        else{            nameCookie.setMaxAge(0);            passwordCookie.setMaxAge(0);        }        // 将Cookie添加到response中        response.addCookie(nameCookie);        response.addCookie(passwordCookie);

    }}// 在页面中读取cookie数据,嵌套java代码<%    String name = ""'    String password = "";    String checked = "";    // 获取请求的cookie    Cookie[] cookies = request.getCookies();    if(cookies!=null  && cookies.length()>0){        // 遍历数据,获取想要的cookie        for(Cookie cookie:cookies){            if(cookie.getName().equals("name")){                name = cookie.getValue();                checked = "checked"            }            if(cookie.getName().equals("password"){                password = cookie.getValue();            }        }    }%>// 要知道,每次访问URL链接的时候,先执行过滤器的doFilter方法// this永远表示当前对象,在jsp中,this就是指9大内置对象的page,Object page = thisrequest.setAttribute("name",name)URLEncoder.encode(name,"utf-8");URLDecoder.encode(name,"utf-8");\URLDecoder:HTML编码的实用工具类

// 在域对象内,进行存值和取值在action中将数据放到值栈中,然后在页面中从值栈中取值每次访问action就创建一次值栈,一个action只有一个值栈栈结构:root对象栈,context叫做Map栈,放入元素,压栈值栈分为两个部分,root部分和context部分ValueStack s = ActionContext.getContext().getValueStack();s.set("username","fireman");// 访问控制系统必须要存在session,这样可以记录用户信息,服务器获取用户登录后的session,如果为空,则跳转到登录页面如果session不为空,直接方形// 如果在action,service,dao中出现异常,使用catch进行异常捕捉,使用log4j将异常存放到指定的日志文件中,通过return "errorMsg"跳转到错误页面

// 粗粒度的权限控制,采用过滤器,精确到session的控制权限,判断session是否存在。如果session不存在就跳转到首页,如果存在可以通过URL链接访问对应的操作// 细粒度的权限控制,采用struts2的拦截器,控制URL,可以访问相关的jsp页面,不可以访问一个jsp页面webservice:用来在多个独立系统之间,建立一个桥梁hibernate的二级缓存机制(cache):对应查询结果相同的数据,可以减少频繁操作数据库的操作sessionFactory:二级缓存:1)类级别缓存;2)集合级别缓存;3)查询级别缓存;4)更新时间戳缓存SQL的联合查询语句,field理解为字段更为合适lucene工作原理:1)索引数据库原理:向索引库中进行增、删、改的时候:IndexWriter:addDocument(),updateDocument(),deleteDocument()-->创建索引库:一堆二进制文件;indexSearcher:从索引中检索数据searcher()Document对象new Field("id");new Field("name");new Field("content");Article对象id,name,content索引库中存放数据的原理Store:是否将数据存储到索引库的数据区域Index:是否将数据更新到索引库的目录区域使用唯一编号来区分数据的唯一性数据库用来存放数据索引库用来查询和检索<properties>    <!--配置扩展-->    <common>IK_Analyzer</common>    <entry key="ext_dic">ext.dic</entry>    <entry key="ext_stopwords>stopword.dic</entry></properties>set和get方法可以提高与变量的安全性和封装性。变量赋值:1)在构造函数内部;2)采用set方法一般对私有变量进行访问操作,大多数都是使用在包含大多数属性的类实体中<script language="javascript" src="${pageContext.request.contextPath}/script/xxx.js"></script>new SimpleDataFormatContent-Disposition:MIME类型指定代理如何显示附加文件。服务器向浏览器发送文件时,如果用户需要保存,可以使用该设置进行文件保存,但是必须要附加上:attachment;filename="xxx";也就是确保浏览器弹出下载对话框response.setHeader("Content-Disposition", "attachment;filename="+fileName);JXL是java操作excel的工具类库,从文件中获取excel数据,读取数据后,将数据写入到集合中用户通过模板导入数据,之后再从模板中读取数据,将数据保存到数据库中,excel导入数据防止表单重复提交:生成一个token,放到:HttpSession;input隐藏域表单提交:input=111,之后从HttpSession获取,input隐藏域。进行对比,一值:保存数据,将HttpSession的数据删除;不一致,重复提交webapps:web应用所在的目录,供外界访问的web资源的存放目录。在该目录下,有几个文件夹就有几个目录WEB-INF:用户无法直接访问。classes:存放编译好的字节码文件;lib:存放应用需要的jar包;web.xml配置部署信息在Tomcat中的lib中的jar包,为所有应用需要的jar包,为所有应用服务Tomcat中的配置信息:<Server>:server容器组件,为顶级元素,可以包含一个或者多个<service>元素<service>:包含一个<engine>,一个或多个<connector><connector>:代表实际与用户交互的组件,接受请求,返回相应<engine>:每个service只有一个engine引擎,处理客户的请求<host>:一个engine有多个host,具有多个应用<context>:使用最频繁的元素,代表一个应用用户的访问都是通过Tomcat的链接过来的,一个引擎中管理多个主机,一个主机有管理多个应用配置虚拟主机,在网站需要发布的时候,要对Tomcat服务器进行域名和主机配置,重要目录为:Tomcat/conf/server.xml在<engine>标签中配置:<Host name="www.deng.com" appBase="e:/appExample"        unpackWARs="true" autoDeploy="true"/>修改本地hosts文件:C:/Windows/System32/drivers/etc/hostsname1=value1&name2=value2只有通过POST提交的方式才能够看到请求正文,正文的内容是要提交的数据name=username&password=mypassword&sex=male请求头的作用是向服务器传递一些附加信息Accept:告诉服务器,浏览器能够接受的MIME类型在磁盘中,通过文件名的后缀区分文件类型在网络中,通过MIME来区分数据MIME特点:大类型/小类型,text/plain1,2,3,4,54:访问的资源不存在5:服务器内部错误,服务程序出现异常浏览器收到服务器的相应,数据都是HTML文件,浏览器对HTML文件进行展现servlet是运行在服务器端的动态资源,能够接受用户请求,发出相应服务器端的编程都是基于http协议的建立一个servlet,继承一个javax.servlet.http.HttpServlet抽象类javax.servlet:通用包javax.servlet.http:与http协议有关load-on-startup:一启动就加载Servlet关联:ServletConfig关联:ServletContextServlet依赖:ServletRequest,ServletResponseGenericServlet实现ServletHttpServlet继承GenericServletHttpServlet依赖HttpServletRequest和HttpServletResponse在配置servlet时候可以配置参数<servlet>    <servlet-name>Demo1</servlet-name>    <servlet-class>com.deng.Demo1</servlet-class>    <init-param>        <param-name>sex</param-name>        <param-value>male</param-value>    </init-param></servlet>//获取ServletConfig cfg = getServletConfig();cfg.getInitParameter("sex")//获取多个值ServletConfig cfg = getServletConfig();Enumeration e = cfg.getInitParameterNames();while(e.hasMoreElements()){    String value = e.nextElement();    cfg.getInitParameter(value);}ServletContext非常重要,每一个应用有一个ServletContext,和应用的生命周期完全一致实现多个Servlet之间的数据共享,ServletContext里面有一个map结构:key:"P",value:"p1"Servlet1:ServletContext.setAttribute("P","p1");Servlet2:ServletContext.getAttribute("P");...域表示的是存活范围向ServletContext存放东西:public void setAttribute(String a, Object obj)从ServletContext去东西:public Object getAttribute(String a)从ServletContext删除东西:public void removeAttribute(String a)获取所有的名称:Enumeration getAttributeNames();

转载于:https://www.cnblogs.com/demo-deng/p/8205835.html

20180105随笔相关推荐

  1. Echo团队Alpha冲刺随笔 - 第九天

    项目冲刺情况 进展 已经进入测试阶段,正在消除系统的bug 问题 通过测试,找出了系统中存在的较多bug...... 体会 测试太重要了,很多原本以为没什么bug,一测就能找到好几个,而且改个bug真 ...

  2. 第一篇随笔——新的开端

    新的开端 这是我第一次开通博客也是第一次在博客上写随笔,这既是博客的新开端也是JAVA学习的新开端,希望能好好经营这第一个博客~. 觉得自己专业吗?对专业的期望 对于这个问题我不得不坦然承认虽然进入信 ...

  3. 我先了解一下博客园创建随笔/文章/日记的过程与三者的区别(隐私等级,是否审核等)...

    我先了解一下博客园创建随笔/文章/日记的过程与三者的区别(隐私等级,是否审核等) 转载于:https://www.cnblogs.com/Totooria-Hyperion/p/5260289.htm ...

  4. web高性能开发系列随笔

    在BlogJava里写了一些关于高性能WEB开发的随笔,因为都是跟前端技术相关(html,http,js,css等),所以也贴到博客园来,吸收下人气. 1. HTTP服务器. 2.性能测试工具推荐 3 ...

  5. cuda图像处理_CUDA随笔之图像直方图(优化历程)

    在忙忙碌碌许久之后,终于有时间写 "CUDA随笔" 系列的第二集了! 这次给大家带来了一个图像处理的应用例子:计算图片的直方图. 虽然使用CUDA可以很轻松地在性能上超越CPU,如 ...

  6. 博客园的“随笔、文章、新闻、日记有啥区别”

    随笔:是一些比较杂乱的技术类东西且有待修改和讨论的文章,假如是原创则只是作者随时提笔写下的内容,而并没有经过太多的推敲,甚至措辞也没有得到很合理的运用. 文章:直接获得的有正规性质的文章,或当随笔中的 ...

  7. [Object-C语言随笔之二] 《NSLog》常用的打印调试语句与自动排版

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-object/395.html ...

  8. 做一个略调皮的个人主页--相册与随笔篇

    目录 做一个略调皮的个人主页--菜单篇 做一个略调皮的个人主页--结构篇 做一个略调皮的个人主页--相册与随笔篇 总算在北京找到个便宜的房子租了,算是稳定下来啦. 新工作的节奏本来很快,有些不适用的, ...

  9. Ibatis学习随笔

    Ibatis学习随笔 < person >       < id > 1 </ id >     < firstName > Clinton </ ...

最新文章

  1. Jmeter 下载和安装
  2. 帝国cms与mysql数据库_帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
  3. C++map容器-构造和赋值
  4. python 图像处理_Python中的十大图像处理工具
  5. python julia go_挑战Python的四个语言:Swift、Go、Julia、R
  6. VS2010中使Unity3d的shader文件关键字高亮
  7. C#SQL注入检测——特别是对于旧版.NET代码
  8. 服务器安全检查指引——日常维护说明
  9. Backbone模型
  10. linux设置ipsan_linux 配置IPSAN存储
  11. 计算机英语CMYK全称,CMYK是什么意思 CMYK与RGB的区别介绍
  12. PLC中ST语言的几种程序流程控制语句
  13. win11磁盘分区_win11系统磁盘如何分区
  14. linux下pip升级
  15. mysql locate不走索引_面试--mysql的模糊查询优化、like、locate、position、instr、find_in_set...
  16. 微信web开发者工具无法打开网络连接失败,网上的办法都无法解决的小伙伴可以用我这个办法
  17. 兰州城市学院计算机专业在哪个校区,兰州城市学院 代码
  18. 手机pdf文件转语音_用smallpdf如何将pdf文件转word文档
  19. 领健医美saas管理系统软件之【医美经营宝典】医美机构微信:如何精准化拓客引流?初入医美咨询行业重点有哪些?
  20. 复制加密内存卡(TF卡、U盘)资料的方法

热门文章

  1. 二分查找算法举例说明C语言,C语言快速排序与二分查找算法示例
  2. valid floating point value什么意思_为什么 0.1 + 0.2 = 0.300000004?
  3. thinkphp6企业项目实战_[MarsZ]ThinkPHP项目实战总结
  4. c 中=和==的区别有哪些?
  5. C语言程序main入口函数
  6. C 的16个大坑,你能躲过几个?
  7. php 字符串 字典序序排序,C++ 怎么实现字典序排序法,自然排序
  8. win10默认浏览器不显示谷歌浏览器_win10系统谷歌浏览器怎么用不了?谷歌浏览器打不开网页的解决方法...
  9. android 地图放大缩小按钮,Android 百度最新地图隐藏 放大缩小按钮、指南针、缩放比例的方法...
  10. 工业级光电转换器产品介绍