当前位置: 首页 > news >正文

上海工程建设造价信息网站烟台网站制作效果

上海工程建设造价信息网站,烟台网站制作效果,微信分身版下载微信2,网站模板 金融项目的结构#xff1a;1.通过Nginx首先把访问首页的请求发送到前端web服务器#xff0c;2.web服务器会根据请求的url中的一些细节#xff0c;来把相关的请求发送到相关的服务器中#xff0c;3.相关的服务器会处理业务#xff0c;并且返回结果到web服务器中#xff0c;最后… 项目的结构1.通过Nginx首先把访问首页的请求发送到前端web服务器2.web服务器会根据请求的url中的一些细节来把相关的请求发送到相关的服务器中3.相关的服务器会处理业务并且返回结果到web服务器中最后在web服务器中去显示。 步骤 01.在Nginx中配置首页的web服务器因为域名之前在hosts文件中已经配置过了所以这次就没有配置hosts文件 首页的配置服务器如下 #配置前台管理服务器 server { listen 80; server_name www.jt.com; location / { #实现http请求的转发 proxy_pass http://localhost:8092; } }02.在总项目jt中去再次声明一个新的子系统web服务器专门用来处理web请求并进行相关的分类转发。 第一步先创建一个新的maven module 第二步 写出相关项目的名称 web 打包方式是war因为有静态资源需要管理。 第三步在新创建的web项目中添加相关依赖 添加总项目的common依赖可以使用common中的工具包 dependencies dependency groupIdcom.jt/groupId artifactIdjt-common/artifactId version0.0.1-SNAPSHOT/version /dependency /dependencies插件 build plugins !--跳过测试类打包 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-surefire-plugin/artifactId configuration skiptrue/skip /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build02.配置伪静态html页面 以京东为例京东的主页面有很多的html文件。但是这样子的html文件都是伪静态的html本质上不是html文件是开发人员为了好看做的修饰。 伪静态是相对真实静态来讲的通常我们为了增强搜索引擎的友好面都将文章内容生成静态页 面但是有时为了实时的显示一些信息或者还想运用动态脚本解决一些问题不能用静态的方式来展示网站内容。这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢这就产生了伪静态技术。伪静态技术是指展示出来的是以html一类的静态页面形式但其实是用ASP一类的动态脚本来处理的。 总结: 以html结尾展现的动态页面。 配置一个专门的类用来修饰伪静态html文件。 Configuration public class MvcConfigurer implements WebMvcConfigurer{ //开启匹配后缀型配置 后缀任意. Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseSuffixPatternMatch(true); } }03.使用httpclient来实现服务器与服务器之间的通信 HTTP 协议是现在 Internet 上使用得最多、最重要的协议越来越多的 Java 应用程序需要直接通过HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能但是 对于大部分应用程序来说JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache JakartaCommon 下的子项目用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为HttpClient 4.5.62015-09-11。 以下列出的是 HttpClient 提供的主要的功能要知道更多详细的功能可以参见 HttpClient 的主页。 1实现了所有 HTTP 的方法GET,POST,PUT,Delete 等 2支持自动转向 3支持 HTTPS 协议 4支持代理服务器等 第一步导入依赖jar包 !--添加httpClient jar包 -- dependency groupIdorg.apache.httpcomponents/groupId artifactIdhttpclient/artifactId /dependency第二步测试入门案例 Test public void doGet() throws ClientProtocolException, IOException { HttpClient httpClient HttpClients.createDefault(); String url http://www.baidu.com; HttpGet get new HttpGet(url); HttpResponse response httpClient.execute(get); if(200 response.getStatusLine().getStatusCode()) { System.out.println(请求正确!!!!!!); // HttpEntity封装返回值信息 HttpEntity entity response.getEntity(); //将entity中携带的信息转化为字符串 String result EntityUtils.toString(entity,utf-8); System.out.println(result); }else { System.out.println(请求异常!!!!!); } }第三步封装需要使用到的对象三个工具类 HttpClientService封装服务器之间通信的方法getpost其中就包括返回结果的状态state package com.jt.util;import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map;import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils;Service public class HttpClientService {Autowiredprivate CloseableHttpClient httpClient;Autowiredprivate RequestConfig requestConfig;public String doGet(String url,MapString,String params,String charset){String result null;//1.判断字符集编码是否为空 如果为空则给定默认值utf-8if(StringUtils.isEmpty(charset)){charset UTF-8;}//2.判断用户是否需要传递参数if(params ! null){try {URIBuilder uriBuilder new URIBuilder(url);for (Map.EntryString,String entry : params.entrySet()) {uriBuilder.addParameter(entry.getKey(), entry.getValue());}//url?id1nametomurl uriBuilder.build().toString();} catch (Exception e) {e.printStackTrace();}}//3.定义参数提交对象HttpGet get new HttpGet(url);//4.为请求设定超时时间get.setConfig(requestConfig);//5.通过httpClient发送请求try {CloseableHttpResponse response httpClient.execute(get);if(response.getStatusLine().getStatusCode() 200){//表示程序调用成功result EntityUtils.toString(response.getEntity(),charset);}else{System.out.println(调用异常:状态信息:response.getStatusLine().getStatusCode());throw new RuntimeException();}} catch (Exception e) {e.printStackTrace();}return result;}public String doGet(String url){return doGet(url, null, null);}public String doGet(String url,MapString,String params){return doGet(url, params, null);}public String doGet(String url,String charset){return doGet(url, null, charset);}//实现httpClient POST提交public String doPost(String url,MapString,String params,String charset){String result null;//1.定义请求类型HttpPost post new HttpPost(url);post.setConfig(requestConfig); //定义超时时间//2.判断字符集是否为nullif(StringUtils.isEmpty(charset)){charset UTF-8;}//3.判断用户是否传递参数if(params !null){//3.2准备List集合信息ListNameValuePair parameters new ArrayList();//3.3将数据封装到List集合中for (Map.EntryString,String entry : params.entrySet()) {parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}//3.1模拟表单提交try {UrlEncodedFormEntity formEntity new UrlEncodedFormEntity(parameters,charset); //采用u8编码//3.4将实体对象封装到请求对象中post.setEntity(formEntity);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}//4.发送请求try {CloseableHttpResponse response httpClient.execute(post);//4.1判断返回值状态if(response.getStatusLine().getStatusCode() 200) {//4.2表示请求成功result EntityUtils.toString(response.getEntity(),charset);}else{System.out.println(获取状态码信息:response.getStatusLine().getStatusCode());throw new RuntimeException();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}public String doPost(String url){return doPost(url, null, null);}public String doPost(String url,MapString,String params){return doPost(url, params, null);}public String doPost(String url,String charset){return doPost(url, null, charset);} } HttpClientConfig 这里获取到上文提到案例中的CloseableHttpClient 对象使用注解Bean来将对象的管理权限交给spring容器进行管理。 package com.jt.config;import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource;Configuration PropertySource(valueclasspath:/properties/httpClient.properties) public class HttpClientConfig {Value(${http.maxTotal})private Integer maxTotal; //最大连接数Value(${http.defaultMaxPerRoute})private Integer defaultMaxPerRoute; //最大并发链接数Value(${http.connectTimeout})private Integer connectTimeout; //创建链接的最大时间Value(${http.connectionRequestTimeout}) private Integer connectionRequestTimeout; //链接获取超时时间Value(${http.socketTimeout})private Integer socketTimeout; //数据传输最长时间Value(${http.staleConnectionCheckEnabled})private boolean staleConnectionCheckEnabled; //提交时检查链接是否可用//定义httpClient链接池Bean(namehttpClientConnectionManager)public PoolingHttpClientConnectionManager getPoolingHttpClientConnectionManager() {PoolingHttpClientConnectionManager manager new PoolingHttpClientConnectionManager();manager.setMaxTotal(maxTotal); //设定最大链接数manager.setDefaultMaxPerRoute(defaultMaxPerRoute); //设定并发链接数return manager;}//定义HttpClient/*** 实例化连接池设置连接池管理器。* 这里需要以参数形式注入上面实例化的连接池管理器Qualifier 指定bean标签进行注入*/Bean(name httpClientBuilder)public HttpClientBuilder getHttpClientBuilder(Qualifier(httpClientConnectionManager)PoolingHttpClientConnectionManager httpClientConnectionManager){//HttpClientBuilder中的构造方法被protected修饰所以这里不能直接使用new来实例化一个HttpClientBuilder,可以使用HttpClientBuilder提供的静态方法create()来获取HttpClientBuilder对象HttpClientBuilder httpClientBuilder HttpClientBuilder.create();httpClientBuilder.setConnectionManager(httpClientConnectionManager);return httpClientBuilder;}/*** 注入连接池用于获取httpClient* param httpClientBuilder* return*/Beanpublic CloseableHttpClient getCloseableHttpClient(Qualifier(httpClientBuilder) HttpClientBuilder httpClientBuilder){return httpClientBuilder.build();}/*** Builder是RequestConfig的一个内部类* 通过RequestConfig的custom方法来获取到一个Builder对象* 设置builder的连接信息* return*/Bean(name builder)public RequestConfig.Builder getBuilder(){RequestConfig.Builder builder RequestConfig.custom();return builder.setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout).setStaleConnectionCheckEnabled(staleConnectionCheckEnabled);}/*** 使用builder构建一个RequestConfig对象* param builder* return*/Beanpublic RequestConfig getRequestConfig(Qualifier(builder) RequestConfig.Builder builder){return builder.build();} } HttpClientClose package com.jt.config;import javax.annotation.PreDestroy;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.pool.PoolStats; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;Component //交给spring容器管理 public class HttpClientClose extends Thread{Autowiredprivate PoolingHttpClientConnectionManager manage;private volatile boolean shutdown; //开关 volatitle表示多线程可变数据,一个线程修改,其他线程立即修改public HttpClientClose() {///System.out.println(执行构造方法,实例化对象);//线程开启启动this.start();}Overridepublic void run() {try {//如果服务没有关闭,执行线程while(!shutdown) {synchronized (this) {wait(5000); //等待5秒//System.out.println(线程开始执行,关闭超时链接);//关闭超时的链接PoolStats stats manage.getTotalStats();int av stats.getAvailable(); //获取可用的线程数量int pend stats.getPending(); //获取阻塞的线程数量int lea stats.getLeased(); //获取当前正在使用的链接数量int max stats.getMax();//System.out.println(max/max: av/av: pend/pend: lea/lea);manage.closeExpiredConnections();}}} catch (Exception e) {e.printStackTrace();throw new RuntimeException();}super.run();}//关闭清理无效连接的线程PreDestroy //容器关闭时执行该方法.public void shutdown() {shutdown true;synchronized (this) {//System.out.println(关闭全部链接!!);notifyAll(); //全部从等待中唤醒.执行关闭操作;}} } 利用HttpClient实现远程商品及商品详情查询 案例运行时候的示意图www.jt.com 是访问前端web服务器的url由Nginx完成代理manage.jt.com是后端处理数据的服务器。 第一步在web服务器中写一个controller类处理发送过来的前端http请求。 这里是item界面的http请求。 Controller //如果需要跳转页面.则使用Controller注解 RequestMapping(/items) public class ItemController { Autowired private ItemService itemService; /** * 请求:http://www.jt.com/items/56237 * 请求分析: 通过jt-web服务器 访问后台商品信息,其中562379表示商品的ID号 * 根据商品id号,之后查询后台数据库,获取商品信息之后进行数据的页面展现 * 参数接收: 需要动态的接收url中的参数 利用restFul风格实现数据的动态获取 *页面展现数据要求: * h1${item.title}/h1 strong${item.sellPoint}/strong 需要查询后台数据之后.将数据保存到域中,之后利用el表达式完成数据的动态取值. */ RequestMapping(/{itemId}) public String findItemById(PathVariable Long itemId,Model model) { //1.根据商品id查询数据库 Item item itemService.findItemById(itemId); //2.将item对象保存到域中 model.addAttribute(item, item); //查询数据之后跳转页面; return item; } }第二步在web服务器中写相关的接口service public interface ItemService { Item findItemById(Long itemId); }第三步在web服务器中写service的实现类这里需要使用到httpclient Service public class ItemServiceImpl implements ItemService { Autowired private HttpClientService httpClientService; /* * 业务分析 * 就是根据接收到的商品的id然后查询商品的数据封装在Item对象 * 如何查询呢 * jt-web是前台系统不能直接连接数据库如何查询数据呢 * 查询方式由前台系统jt-web发起请求去调用具体的后台系统jt-manage去查询商品数据 */ Override CacheFind//使用到了自定义的缓存注解 public Item findItemById(Long itemId) { String urlhttp://manage.jt.com/web/item/findItemById/itemId; String itemJSONhttpClientService.doGet(url); //将json转换成java对象 return ObjectMapperUtil.toObject(itemJSON, Item.class); } }第四步 manage.jt.com来接受web服务器的service接口实现类中使用的httpclient的httpclientservice的get方法。 写一个controller类转过来的也是url RestController RequestMapping(/web/item) public class WebItemController { Autowired private ItemService itemService; /** * 从前台向后台发起请求: * http://manage.jt.com:80/web/item/findItemById/562379 * http://manage.jt.com:80是根目录不用在requestmapping中写出来。因为现在就在manage.jt.com服务器中。 * */ RequestMapping(/findItemById/{itemId}) public Item findItemById(PathVariable Long itemId) { return itemService.findItemById(itemId); } } 再去写接口的中方法和方法在接口实现类中的重写 public interface ItemService { Item findItemById(Long itemId); }Override public Item findItemById(Long itemId) { return itemMapper.selectById(itemId);//利用MP实现查询 }查询商品详情信息数据 第一步业务分析 说明如果需要展现商品详情信息,则需要将商品详情信息添加到域中,之后动态获取数据信息. 在item.jsp div classdetail-content ${itemDesc.itemDesc } /div第二步编辑jt-web项目的ItemController RequestMapping(/{itemId}) public String findItemById(PathVariable Long itemId,Model model) { //1.根据商品id查询数据库 Item item itemService.findItemById(itemId); //2.将item对象保存到域中 model.addAttribute(item, item); //3.查询商品详情信息 ItemDesc itemDesc itemService.findItemDescById(itemId); model.addAttribute(itemDesc, itemDesc); //查询数据之后跳转页面; return item; }第三步编辑jt-web项目的下的ItemService接口 public interface ItemService { Item findItemById(Long itemId); ItemDesc findItemDescById(Long itemId); }第四步编辑jt-web的ItemServiceImpl实现类 Override public ItemDesc findItemDescById(Long itemId) { String url http://manage.jt.com/web/item/findItemDescById/itemId; String itemDescJSON httpClientService.doGet(url); return ObjectMapperUtil.toObject(itemDescJSON, ItemDesc.class); }第五步编辑jt-manage项目下的WebItemController /** * 根据商品Id号动态查询商品详情信息 * http://manage.jt.com/web/item/findItemDescById/562379 */ RequestMapping(/findItemDescById/{itemId}) public ItemDesc findItemDescById(PathVariable Long itemId) { return itemService.findItemDescById(itemId); }
http://www.tj-hxxt.cn/news/227350.html

相关文章:

  • 滑县网站建设服务wordpress搬家后空白
  • 做化验的网站html做网站需要服务器吗
  • 网站后台如何添加代码短网址生成怎么使用
  • 淮北招聘网seo资源网站排名
  • 绍兴网站开发网站建设安装部署必须买吗
  • 开发网站 公司番禺网页设计
  • 有没有直接做网站的软件做网站注意哪方面
  • 网站的关键词库怎么做电子商务网站建设的结论
  • 如何创建自己公司网站做网站如何提需求
  • 知末网官网wordpress插件检测seo是否合理
  • 交友软件网站建设北京网站制作培训
  • 企业网站设计图指定关键词seo报价
  • 网站建设与组织管理注册安全工程师通过率
  • 如何选网站服务器东莞市赢网网络科技有限公司
  • jquery电子商务网站模板房地产管理系统
  • 网站开发账务处理慧聪网是干什么的
  • 海口建网站装潢设计图片
  • 上海服装网站建设武进网站建设基本流程
  • 营销比较成功的企业如何优化seo
  • 石家庄网站建设推广公司报价礼品工艺品网站建设
  • 金融网站织梦模板营销计划书7个步骤
  • 济南网络优化网站seo是什么服务
  • 公司建设网站策划书it外包数据
  • 免费代理上网网站网站忘记密码功能
  • 一个用vue做的网站百度登录账号首页
  • 为什么两学一做进不去网站自己做开箱网站
  • 无锡seo网站推广百度推广介绍
  • 中国最权威的网站排名百度账号免费注册
  • 智能自助建站系统源码深圳网站建设设计平台
  • 彩票娱乐网站建设开发Sage WordPress商城主题