近期项目需要用到底层通讯的继而采用MQTT
之前已经搭建过MQTT 并且用websocket技术进行连接了 http://www.rainfly.cn/?post=285
在EMQTT官网下载 Windows 10 x64 位的包 后解压到目录下面 然后 运行起来
用本地通讯猫测试工具 检查是否开启正常!
在Maven中添加上相关依赖的包
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.0.2</version>
</dependency>
实现代码:打包下载 -> https://github.com/Rain-Fly/MQTT
三种方法
第一种:使用set方法注入
public class User {
private String name;
public void setName(String name) {
this.name = name;
}
}
User user = new User();
user.setName("abcd");
第二种 有参数构造注入
public class User {
private String name;
public User(String name) {
this.name = name;
}
}
第三种使用接口注入
interface Dao {
public void setName(String name);
}
public class DaoImpl implements Dao {
private String name;
public void setName(String name) {
this.name=name;
}
}
给编译器打印控制台添加彩色信息 官方文档 --》传送门
由于Intellij idea不支持显示ascii颜色,grep-console插件能很好的解决这个问题,下面就以开发JavaEE项目中,结合Log4j配置多颜色日志输出功能。
下载好上述压缩包,无需解压。
选择好ZIP文件 后会提示重新启动,当重启完成,插件安装成功后,设置log4j输出状态对应的颜色
剩下工作就是配置使用log4J 来提示文档
配置Log4j
Maven配置文件pom.xml添加log4j的信赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</version> </dependency>
在resource 文件夹添加log.4j的配置文件 log4j.properties 并添加如下内容
### set log levels ###
log4j.rootLogger = debug , stdout
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
测试最终效果
应用JUnit写如下测试代码
@Test
public void testLoger(){
final Logger logger = Logger.getLogger("TestErrOut");
logger.debug(" This is debug!!!");
logger.info(" This is info!!!");
logger.warn(" This is warn!!!");
logger.error(" This is error!!!");
logger.fatal(" This is fatal!!!");
}
Spring框架,IOC 实现原理 可以降低类与类之间的耦合性 解耦
applicationContext.xml 中对been进行配置
<bean id="userService" class="cn.rain.UserService" />
IOC DI工厂
通过 dom4j 对xml文件进行解析 根据id =userService 获得class对象
String classValue = "获得的class属性值"
使用反射创建类对象 ->>>传送门 (介绍反射)
通过class属性值获取类对象
Class clazz = Class.forName(classValue);
通过类对象创建 UerService对象
UserService service = clazz.newInstance();
返回创建好的对象
return service;
内容代码没有错误 但是项目出现错误,
先找到错误在哪。
Problems选项卡会有详细的错误描述。
如果被关闭了的话,重新打开方法:
Eclipse,选Window,Show View,Other,Problems。
第一步:下载相应的资源
PhpStorm2017.3.3 下载地址:http://www.oyksoft.com/soft/40722.html
PhpStudy 下载地址: http://www.phpstudy.net
XdebugHleper 是Google浏览器的插件,可以直接去谷歌商店里面下载
安装PhpStudy,该软件一键安装使用很方便 自动安装Windows环境下的Apache +PHP +MySQL (包括Mysql-Front、PhpMyAdmin等软件)
安装XdebugHelper插件
点击Debug会又灰色变成绿色
启动PhpStudy,点击切换版本 php-5.6.27-nts+Apache
二、配置xdebug
1.在phpstudy上打开xdebug选项
2.打开php.ini,并完成配置
简单解释一下:直接在phpstudy上勾选xdebug,会自动配置好上图中的2007-2009三行,这是xdebug的基本配置,需要我们自己配置的就是图中红框里的内容。
xdebug.remote_enable=1 # 开启远程调试
xdebug.idekey='PHPSTORM' # sessionkey
xdebug.remote_port=9001 # 远程调试通信端口
idekey不要填写别的,xdebug helper给phpstorm的就这个,没得选。端口默认的是9000,这个和fastcgi端口冲突,所以就改了。xdebug其他的配置项都是默认的就行。
重启nginx,打开phpinfo确认一下配置是否正确。
三、设置phpstorm
1.打开设置对话框FIle->Settings(默认快捷键Ctrl+Alt+S)
2.配置Debug :Languages & Frameworks -> PHP -> Debug,只需要把DebugPort端口改为9001,和xdebug的配置保持一致
3.配置Server(就在Debug下面一个) :Languages & Frameworks -> PHP -> Servers,新建一台本地服务器(绿色加号),填写服务器名字以及host,确认debugger是xdebug
第四步:新建调试项目
添加本地PHP版本和之前选的PhpStudy的php版本一样
选择对应的版本 php.exe文件
目录建立在 PHPStudy目录文件夹下的 WWW中 这样方便直接进行调试!
注意将调试按钮打开!
访问homepage就会自动跳转到调试接口!
/* <form id="ff" method="post">
...
</form> */
function submitForm(){
/*
form()参数: submit 提交表单
validate 用于验证提交
clear 清除所有表单项
load 记载记录来填充表单
* */
$('#ff').form('submit',{
url: "http://diao:8080/crmnew/customer/add",
onSubmit: function(){
//提交前触发
//做一些检查来阻止提交
return $(this).form('validate');
},
//返回的状态需要是success
success: function(result){
/* console.info(result); */
var result = eval('('+result+')');
if (result.success){
$('#dlg').dialog('close');
$('#datagrid').datagrid('reload');
} else {
mesTitle = '新增用户失败';
}
$.messager.show({
title: mesTitle,
msg: result.msg
});
}
});
}
function clearForm(){
$('#ff').form('clear');
}
</script>
http://www.jeasyui.net/plugins/166.html
反射的核心就是加载类,解剖出类的各个组成部分 例如:成员变量 、方法 、构造方法!
加载类的三种方法
/提取当前类的 Class 对象。
方法1
Class claszz1=Class.forName("com.rain.demo.Person");
方法2
Class claszz2=Person.class;
方法3
Class claszz3=new Hero().getClass();
解剖类的常用方法
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
public Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法
public Method getMethod(String name, Class<?>... parameterTypes)
//返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
public Field getField(String name)
//私有
public Field getDeclaredField(String name)
//私有
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定私有构造方法。
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
反射功能实际作用是用来开发框架如:spring
实例
Person.java
package com.rain.demo;
public class Person {
public String name="123";
public Person(){
System.out.println("person");
}
public Person(String name){
System.out.println("person name");
}
public Person(String name,int password){
System.out.println("person name password");
}
public void getString(){
System.out.println(name);
}
}
Demo1.java
package com.rain.demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class Demo1 {
//反射新建类的对象
@Test
public void test1() throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Class claszzClass = Class.forName("com.rain.demo.Person");
Constructor c = claszzClass.getConstructor(null);
Person p = (Person)c.newInstance(null);
System.out.println(p.name);
}
@Test
public void test2() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException{
//提取当前类的 Class 对象。
Class claszzClass1=Class.forName("com.rain.demo.Person");
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor c =claszzClass1.getConstructor(String.class);
//使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,
Person p = (Person)c.newInstance("xxxx");
System.out.println("test2");
System.out.println(p.name);
}
@Test
public void test3() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Person p = new Person();
Class claszzClass3=Class.forName("com.rain.demo.Person");
//
Method method = claszzClass3.getMethod("getString", null); //方法名 参数
method.invoke(p, null);
}
}
JSP动作元素在请求处理阶段实例化一个javaBean,并且提供了设置获取方法
在model中创建javaBean,(其实就是java中的类)关于此概念解释 -> 传送门
创建好Javabean 在jsp中请求调用的方法
在浏览器打开 http://127.0.0.1:8080/Test/person.jsp
Spring MVC就是一个MVC框架,个人觉得Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率.以下是记录springMVC开发环境配置
首先下载jar包 :下载地址:http://repo.spring.io/release/org/springframework/spring/
spring 项目启动必须的依赖包 commons-logging-1.1.jar
第一步:在lib文件中添加jar包
第二步:修改web.xml 文件:详细介绍:https://www.cnblogs.com/shinejaie/p/5244258.html
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>SpringMVC</display-name>
<!--配置所有请求的拦截器 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置DispatcherServlet的一个初始化参数:配置springMVC的配置文件的位置和名称-->
<!-- 这里可以省略, 默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/SpringMVC-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第三步:添加spring-servlet.xml
首先需要用内网穿透工具 : 花生壳 .NAT123. ngrok
我使用的是ngrok :https://www.ngrok.cc/
将Tomcat 端口配置为80 (修改server.xml 配置文件) 可以百度Google方法
重启Tomcat 后发现端口改变 127.0.0.1:80
注册登录ngrok后,添加隧道,在本地运行ngrok 启动脚本设置好 隧道ID,然后访问隧道的域名出现正常的页面
则构建成功 可以配合Eclipse实现联合调试!