一、了解CDN、F5(硬件负载均衡)
二、创建jt-web项目
1、创建maven项目,修改jdk版本
2、添加继承和依赖
3、添加Tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8092</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
4、配置运行启动
三、修改项目配置
1、web.xml
<!-- 配置SpringMVC -->
<servlet>
<servlet-name>springmvc-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2、spring配置文件
<!--3.3 定义事务切面 (pointcut*, advisor*, aspect*) expression 切入点表达式 within(包名.类名)
按类匹配 控制粒度 粗粒度 execution(返回值类型 包名.类名.方法名(参数列表)) -->
<aop:config>
<aop:pointcut expression="execution(* com.jt.web.service..*.*(..))"
id="pc" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc" />
</aop:config>
需求:当用户访问www.jt.com/index.jsp时,自动访问京淘首页
1、编辑controller
@Controller
public class IndexController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
2、修改Nginx实现反向代理
#前台管理系统
server {
listen 80;
server_name www.jt.com;
location / {
proxy_pass http://localhost:8092;
proxy_connect_timeout 3;
proxy_read_timeout 3;
proxy_send_timeout 3;
}
}
3、修改Host文件–原先修改过
4、重新开启Nginx服务,启动服务器进行测试
前台代码实现
伪静态技术
静态页面特点:
1、浏览解析静态页面速度更快
2、对于搜索引擎 静态页面更加友好 容易被搜索引擎收录
3、交互性差,扩展性弱
动态页面特点:
1、交互性强
2、扩展性好
3、浏览器加载速度慢
总结:以.html形式展现动态页面的技术
实现商品实现
1、新建Controller ==ItemController
HttpClient:
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 .6(2015-09-11)
总结:在java代码中发起http请求,之后解析返回值结果
特点:Http请求协议中,参数类型:String 结果:html/json
入门案例
1、pom文件导入相关依赖
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.1</version>
</dependency>
2、测试类
public class TestHttpClient {
//get请求
@Test
public void doGet() throws ClientProtocolException, IOException {
//1.实例化HttpClient对象
CloseableHttpClient client
= HttpClients.createDefault();
//定义url
String url = "https://www.baidu.com";
//定义请求类型
HttpGet get = new HttpGet(url);
HttpPost post = new HttpPost(url);
String method =
get.getRequestLine().getMethod();
System.out.println("获取请求类型:"+method);
String http =
get.getRequestLine().getProtocolVersion().toString();
System.out.println("获取请求协议:"+http);
CloseableHttpResponse response = client.execute(post);
//判断状态信息是否正确 200
if(response.getStatusLine().getStatusCode() == 200){
String result =
EntityUtils.toString(response.getEntity());
System.out.println(result);
}
client.close();
}
}
Spring整合HttpClient技术
将测试类改写到xml文件,使用工厂模式更方便
1、编辑pro文件
#从连接池中获取到连接的最长时间
http.request.connectionRequestTimeout=500
#5000
http.request.connectTimeout=5000
#数据传输的最长时间
http.request.socketTimeout=30000
#提交请求前测试连接是否可用
http.request.staleConnectionCheckEnabled=true
#设置连接总数
http.pool.maxTotal=200
#设置每个地址的并发数
http.pool.defaultMaxPerRoute=100
2、编辑配置文件,引入HttpClient的pro文件
<property name="locations">
<list>
<value>classpath:/property/jdbc.properties</value>
<value>classpath:/property/redis.properties</value>
<value>classpath:/property/httpclient.propertiesties</value>
</list>
</property>
3、修改HttpClientService类,关于url拼接方式方法一:
// url格式:addUser?id=1&name=tom
// httpClient get请求方式
// 参数:1、string url 2、Map<String,String> 3、字符编码
public String doGet(String url,Map<String,String> params,String charSet) {
// 判断字符集是否为空
if(StringUtils.isEmpty(charSet)) {
charSet="UTF-8";
}
// 判断param是否为空,如果不为空,遍历内容
if(params!=null) {
String paramUrl = url+"?";
for(Map.Entry<String,String> entry:params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
paramUrl = paramUrl+key+"="+value+"&";
}
// 串的结尾都会有一个& 截取掉 subString
paramUrl = paramUrl.substring(0,paramUrl.length()-1);
}
return ~~~ ;
}
@Service
public class HttpClientService {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class);
@Autowired(required = false)
private CloseableHttpClient httpClient;
@Autowired(required = false)
private RequestConfig requestConfig;
// url格式:addUser?id=1&name=tom
// httpClient get请求方式
// 参数:1、string url 2、Map<String,String> 3、字符编码
public String doGet(String url, Map<String, String> params, String charSet) throws ClientProtocolException, IOException {
String result=null;
// 判断字符集是否为空
if (StringUtils.isEmpty(charSet)) {
charSet = "UTF-8";
}
try {
// 判断param是否为空,如果不为空,遍历内容
if (params != null) {
// 使用工具类
URIBuilder builder = new URIBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.addParameter(entry.getKey(), entry.getValue());
}
//利用工具类实现url拼接
url = builder.build().toString();
}
// 发起http请求
HttpGet get = new HttpGet(url);
get.setConfig(requestConfig);
CloseableHttpResponse httpResonpse = httpClient.execute(get);
if(httpResonpse.getStatusLine().getStatusCode()==200) {
result = EntityUtils.toString(httpResonpse.getEntity());
}
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
// 重载方法
public String doGet(String url) {
return doGet(url, null, null);
}
public String doGet(String url,Map<String, String> params) {
return doGet(url,params,null);
}
}
前台系统不直接调用后台系统
后台操作:
前台操作:
测试: