• 2015年创业中遇到的技术问题:21-30


    21.高速清空表中的数据。


    有个ip库的表。数据量几十万。
    想在开发阶段,清空。
    通过mysql-front和mysql控制台。都删除失败。
    反应很慢。还有诸如lock失败的错误。

    解决的方法:复制表的创建结构,比方
    CREATE TABLE `ip_info` (
      `ipbegin` varchar(20) DEFAULT NULL,
      `ipend` varchar(20) DEFAULT NULL,
      `zone` varchar(50) DEFAULT NULL,
      `company` varchar(200) DEFAULT NULL,
      `ipbeginInt` bigint(20) DEFAULT NULL,
      `ipendInt` bigint(20) DEFAULT NULL,
      `province` varchar(50) DEFAULT NULL,
      KEY `ipbegin_int` (`ipbeginInt`),
      KEY `ipend_int` (`ipendInt`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    直接删除这个表,drop table ip_info。很迅速。
    然后再又一次建立这个表。运行上面的“create table ip_info”语句。

    22.Putty设置默认用户和默认编码。
    每次登录,都须要输入username,烦死了。

    输入password,还能够理解。

    每次打开文件,都是乱码,还得手动在transaction下,改动编码为“utf-8”,烦死了。

    解决的方法:
        putty是个很好的连接linux的client工具。可是用putty时,时常出现乱码问题,这时候须要在Translation中设置一下。
       可是每次连接都要设就很麻烦了。这时候,能够在保存session的时候,先设好,以后从保存list中进入。这样就不须要手动设编码了。
       
       默认username。也是这样,Connection-Data-Auto login username。


    (仅仅有设置编码是參考的这个,发现和设置默认username是一个道理,之前在别处看到过设置默认username)

    23.Windows下的bat和Linux上的sh。
    在Linux上运行命令的时候,按tab提示 catalish. 会卡住,由于有2个选项“catalish.sh”和“catalish.bat”。

    比較好的办法是,把Linux上的“catalish.bat”删掉,把Windows上的“catalish.sh”删掉。
    startup.bat,shutdown.bat,catalish.bat等“*.bat”都干掉。

    24.Linux下的Tomcat的catalish配置JVM參数。
    在第235行,加相似的配置:
     JAVA_OPTS="$JAVA_OPTS  -Dp2p.config_path=/var/tomcat/config/  -Dlog4jOutputPath=/var/tomcat/logs -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"

     在这个几行凝视的以下。

     

     # Uncomment the following line to make the umask available when using the
    233 # org.apache.catalina.security.SecurityListener
    234 #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

    尝试放在前一行,貌似不行呀。

    25.跨域一点问题。

    项目中解决Less的訪问,大致了解了下,不想用Less。所以也不须要配置乱七八糟的Filter。

    做个记录,今后说不定用得上。

    CORS介绍

       它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Webserver定义了一种方式,同意网页从不同的域訪问其资源。

    而这样的訪问是被同源策略所禁止的。

    CORS系统定义了一种浏览器和server交互的方式来确定是否同意跨域请求。

    它是一个妥协,有更大的灵活性,但比起简单地同意全部这些的要求来说更加安全。


       而W3C的官方文档眼下还是工作草案。可是正在朝着W3C推荐的方向前进。

       简言之,CORS就是为了让AJAX能够实现可控的跨域訪问而生的。

      
    <filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
          <param-name>cors.allowOrigin</param-name>
          <param-value>*</param-value>
        </init-param>
        <init-param>
          <param-name>cors.supportedMethods</param-name>
          <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
        </init-param>
        <init-param>
          <param-name>cors.supportedHeaders</param-name>
          <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
        </init-param>
        <init-param>
          <param-name>cors.exposedHeaders</param-name>
          <param-value>Set-Cookie</param-value>
        </init-param>
        <init-param>
          <param-name>cors.supportsCredentials</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      网上找了个相似的资料:http://www.verydemo.com/demo_c199_i15317.html
      
    26.MySQL 按指定字段自己定义列表排序

    SELECT * FROM bank 
    ORDER BY FIELD(`id`,20, 22, 21) desc,
    id desc,FIELD('status',21,1)

    要注意的是, FIELD 后面是没有空格的.
    因此, 完整的 SQL 为:
    SELECT * FROM `MyTable` 
    WHERE `id` IN (1, 7, 3, 5) 
    ORDER BY FIELD(`id`, 5, 3, 7, 1)
    常见应用
     SELECT * FROM `MyTable` 
    WHERE `name` IN ('张三', '李四', '王五', '孙六') 
    ORDER BY FIELD(`name`, '李四', '孙六', '张三', '王五')


    27.Jquery选择器语法。
    $("#"+parentId+">a :first").addClass("tab-high"); 
    超链接a后。不应该有空格。


    28.SiteMesh就是一个废材。

    感觉没啥多大用处,不灵活。

    直接用include更好。

    29.依据參数类型,运行不同的构造函数,感觉easy出错。

    /**
     * 分
     */
    public Money(Long cent) {
    this.cent = cent;
    }

    /**
     * 元
     */
    public Money(Double amount) {
    if (amount != null) {
    Double d = DoubleUtil.mul(amount, 100);
    this.cent = d.longValue();
    }
    }
    可能存在这样的需求,前端要求元必须是整数Integer,后端用Integer接收,再构造。就出错了。
    30.SpringMVC拦截404。

    第1种方式:Tomcat直接处理
    web.xml
    <error-page>  
        <error-code>404</error-code>  
        <location>/error/404.htm</location>  
    </error-page>  
    这样的仅仅能展示纯静态的页面,很不灵活。

    第2种方式:利用Spring MVC的最精确匹配
    @Controller
    public class UrlNotFoundController {
    @RequestMapping("*")
    public String test404(){
    //TODO
    return "404Page";
    }
    }

    在网上找到这样的方法,利用SpringMVC的精确匹配,从而在其他Controller找不到相应请求的时候。来处理404。

    可是,这样的方式也有问题。仅仅能拦截一部分。

    比方,假设有这个一个Controller
    @Controller("/home")
    public class HomeController{
    @RequestMapping("a")
    public String a(){
          //
    }
    }

    直接訪问: http://localhost:8080/b.html,会被UrlNotFoundController处理。
    可是http://localhost:8080/home/b.html,就不会被UrlNotFoundController处理。

    这说明,通过精准匹配也是有局限性的。



    第3种方式:自己定义org.springframework.web.servlet.DispatcherServlet,重载noHandlerFound方法。
    <servlet>
    <servlet-name>theDispatcher</servlet-name>
    <servlet-class>base.web.MyDispatchServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-mvc-servlet.xml</param-value>
    </init-param>
    <init-param>
    <param-name>fileNotFondUrl</param-name>
    <param-value>/error/404</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>theDispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    public class MyDispatchServlet extends DispatcherServlet {

    private static final long serialVersionUID = 1L;

    private static final UrlPathHelper urlPathHelper = new UrlPathHelper();
    private String fileNotFondUrl = "/error/404.html";
    public void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {
    if (pageNotFoundLogger.isWarnEnabled()) {
    String requestUri = urlPathHelper.getRequestUri(request);
    pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + requestUri +
    "] in DispatcherServlet with name '" + getServletName() + "'");
    }
    response.sendRedirect(request.getContextPath() + fileNotFondUrl);
    }

    public String getFileNotFondUrl() {
    return fileNotFondUrl;
    }

    public void setFileNotFondUrl(String fileNotFondUrl) {
    this.fileNotFondUrl = fileNotFondUrl;
    }
    }

    默认的DispatchServlet的noHandlerFound方法。
    protected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {
    if (pageNotFoundLogger.isWarnEnabled()) {
    String requestUri = urlPathHelper.getRequestUri(request);
    pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + requestUri +
    "] in DispatcherServlet with name '" + getServletName() + "'");
    }
    response.sendError(HttpServletResponse.SC_NOT_FOUND);
    }
    直接返回HTTP404。

    特别须要说明的是:
      自己定义之后。不能再使用
      <!-- <mvc:default-servlet-handler /> -->
      
      通常情况下。使用这个配置。能够让SpringMVC相应js、css等静态页面,在合适的路径,自己主动去找。

      凝视之后,就仅仅能手动响应静态资源等请求了。
      2种方式:
      第1种:Tomcat处理。
      配置
      <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
    </servlet-mapping>
      
      第2种:SpringMVC处理
      <mvc:resources mapping="/kindeditor/upload/image/**"
    location="file:${kindeditorImagePath}/kindeditor/upload/image/**" />
      
      假设使用了“<mvc:default-servlet-handler />”
    // Determine handler for the current request.
    mappedHandler = getHandler(processedRequest, false);
    if (mappedHandler == null || mappedHandler.getHandler() == null) {
    noHandlerFound(processedRequest, response);
    return;
    }
      DispatchServlet上述代码的mappedHandler就不为空了。因此无法进入noHandlerFound方法。
      
  • 相关阅读:
    多态
    抽象类和接口
    面向对象3
    类的继承 设计模式
    面向对象2
    面向对象
    复习
    对json的简单认识
    关于AJAX
    PHP配置开发环境
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7219807.html
Copyright © 2020-2023  润新知