springMvc+页面静态化+tomcat+nginx

来源:互联网 发布:五十知天命六大而耳顺 编辑:程序博客网 时间:2024/06/07 04:04

项目背景: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);    }


0 0