===============================================================================

项目背景:SpringMvc+tomcat部署

期望改变:把项目静态化,并且把这部分静态化的html使用nginx

问题:我们知道,如果你在nginx的root目录放置html文件,可以直接使用http://xxx/productList/a.html

但是一般我们使用springMvc会这么构造url http://xxx/productList/a   而不会有.html

 

解决:

这里页面静态化就不多说了,主要讲nginx

 

 

//主要是下面规则
    location ~ ^/productList/[\w|-]+$ {
            rewrite ^/productList/([\w|-]+)$ /productList/$1.html last;
        }

 

面  上面的规则就是使用rewrite转发到html

 

讲解下正则:之前学习正则非常头疼,老是记不住,于是就走了个极端,把正则规则每日背诵下,现在发现 写正则和读正则变得非常容易

 真是熟能生巧

正则里面长会出来$1 $2 $3这样的东西 它的意思其实很简单

^/productList/([\w|-]+)$这条正则的意思 匹配/productList/abd-ddd 这样的url

然而注意到括号里吗([\w|-]+) 记住 从你的正则从左往右数,遇到一个正则 可以用$加数字代替

 

于是上面的意思也就是^/productList/$1$  

看下面的例子:^/p(ro)duct(List)/([\w|-]+)$  ^/p$1duct$2/$3$  

或者这么理解 $1=po $2=List $3=[\w|-]+

 

那么就可以$1 $2 .... $10000 只要你括号够多

 

那有时我们需要括号但是又不想查出来匹配成$1 $2这样的那怎么办 那就使用(?:)匹配但不作为筛选结果使用

^/p(?:ro)duct(List)/([\w|-]+)$  ^/p(?:ro)duct$1/$2$

对于我们不常接触正则 又想使用 但是每次见面有很害怕的人来说,花点时间背诵正则来的实惠 

 

 

 

把html静态化的一种方案拿出来供大家参考 不过需要自己引入httpclient包

 

 

public class HtmlGenerator {
    /** 根据模版及参数产生静态页面 */
    public static boolean createUTF8HtmlPage(String url,String htmlFileName){
        String statusCode="";
        String returnResponse;
        //创建一个HttpClient实例充当模拟浏览器
        HttpClient httpClient = HttpClientBuilder.create().build();
        //创建GET方法的实例
        HttpGet get = new HttpGet(url);
        //设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递
        get.addHeader("Content-type", "text/html;charset=UTF-8");
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(12000).setConnectTimeout(12000).build();//设置请求和传输超时时间
        get.setConfig(requestConfig);
        HttpResponse response;
        try{
            response = httpClient.execute(get);
            HttpEntity entity = response.getEntity();
            returnResponse = EntityUtils.toString(entity);
            statusCode = response.getStatusLine().getStatusCode()+"";
            if(!"200".equals(statusCode)){//非正常200
                System.out.println("数据长度:" + returnResponse.length() + "返回状态码:" + response.getStatusLine());
            }else{
                //将解析结果写入指定的静态HTML文件中,实现静态HTML生成
                FileHelper.fastWriteFileUTF8(htmlFileName,returnResponse);
            }
            EntityUtils.consume(entity);
        } catch (ClientProtocolException e) {
            statusCode="ClientProtocolException";
            e.printStackTrace();
        } catch (IOException e) {
            statusCode="IOException";
            e.printStackTrace();
        }catch (Exception e) {
            statusCode="Exception";
            e.printStackTrace();
        } finally {
            get.releaseConnection();
            get.abort();
        }
        return "200".equals(statusCode);
    }