发表于: 2017-10-04 20:34:59

1 808


今日完成:

使用maven建立web项目,并部署至tomcat服务器进行测试。详细步骤如下,http://www.cnblogs.com/yjqc/p/6590565.html

这里就十分有意思在访问地址时,并不像之前的使用http://localhost:8080/项目名/名称空间,在对项目不加任何名称空间时

maven项目直接覆盖原来的tomcat主地址http://localhost:8080/,从而对web项目直接访问,真滴是相当的方便,即使修改如

在访问tomcat主地址http://localhost:8080/ 会404报错,那么OK,将这简单的hello world 项目上传到服务器,我们从本地进行访问,这里需要将解压好的war压缩文件,上传到Tomcat的webapps下,启动tomcat的startup.bat,会自动解压项目,

但是不使用其他插件下直接访问项目地址为http://localhost:8080/项目名 也就是你文件夹的名字,这里太长了我就复制了这个项目取名为test,在服务器内自己访问自己,进行测试!没问题,从本地电脑上访问迟迟不行,

那么说明我服务器的端口没有开放,去阿里云服务器核对开放端口,果然。

那么去服务器下找到tomcat安装包下的conf文件夹下的server.xml文件;

找到Connector节点;

  1. <Connector port="8080" protocol="HTTP/1.1"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />  

我们把port="8080"改成80端口即可,因为我们服务器中的80端口是向所有外网IP开放的,这样我们就可以不用端口了。不加端口就是默认访问80端口;

我们在最后 找到Host节点:

  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  
  3.   
  4.         <!-- SingleSignOn valve, share authentication between web applications  
  5.              Documentation at: /docs/config/valve.html -->  
  6.         <!--  
  7.         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />  
  8.         -->  
  9.   
  10.         <!-- Access log processes all example.  
  11.              Documentation at: /docs/config/valve.html  
  12.              Note: The pattern used is equivalent to using pattern="common" -->  
  13.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
  14.                prefix="localhost_access_log." suffix=".txt"  
  15.                pattern="%h %l %u %t &quot;%r&quot; %s %b" />  
  16.   
  17.       </Host>  

我们在里面加一个节点:

<Context path="" docBase="C:\apache-tomcat-8.5.23\webapps\test" debug="0" reloadable="true" />

  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  
  3.   
  4.         <!-- SingleSignOn valve, share authentication between web applications  
  5.              Documentation at: /docs/config/valve.html -->  
  6.         <!--  
  7.         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />  
  8.         -->  
  9.      

             <Context path="" docBase="C:\apache-tomcat-8.5.23\webapps\test" debug="0" reloadable="true" />   

  10.         <!-- Access log processes all example.  
  11.              Documentation at: /docs/config/valve.html  
  12.              Note: The pattern used is equivalent to using pattern="common" -->  
  13.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    
  14.                prefix="localhost_access_log." suffix=".txt"  
  15.                pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>  
  16.   
  17.       </Host>  

这里的docBase要给成你的项目所在你服务器的本机的绝对路径;

其他不用变,启动tomcat服务器!

那么激动人心的一刻就要来了,在本地直接访问服务器的外网IP地址

oh my god! 当然了在我买的服务器到期之前,tomcat 我就一直开着了,之后的ssm框架测试也会放在该IP中!原谅我不买域名了,凑活着访问把。。

这里本想拓展一下web项目功能,但想想还是把前几天欠下的知识点补全。


第一个spring aop,在我1号的日报里是这么说的

在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。


不那么概念化说,我这有10个类,每个类都有一个测试方法

 public void test( 

    System.out.println("测试");

)

那么我想要在这个test方法测试之前执行  :在控制台输出"(。・∀・)ノ゙嗨 我要来了!";在执行test方法之后: 在控制台输出"(。・∀・)ノ゙嗨  我走了",那么最土的方法就是

 public void test1( 

    System.out.println("(。・∀・)ノ゙嗨 我要来了!");

    System.out.println("测试");

    System.out.println("(。・∀・)ノ゙嗨  我走了");

)

 一行一行的复制 一个类一个类的复制,那么再做一个简单的抽取创建类 

public class PublicKind {

public static void first(){
System.out.println("(。・∀・)ノ゙嗨 我要来了");
}
public static void end(){
System.out.println("(。・∀・)ノ゙嗨 我要走了");
}
}

方法就改为

@Test
public void test1(){
     PublicKind.first();
     System.out.println("测试");
     PublicKind.end();
}

那么如果我有100个类每个类100个方法 ,那工作量也太高了,那么spring aop 就能帮我做到自动处理。

这里引入概念!

Aop  aspect object programming  面向切面编程

         功能: 让关注点代码与业务代码分离!

关注点,

         重复代码就叫做关注点;

         在这里程序中的

                System.out.println("(。・∀・)ノ゙嗨 我要来了!");

                System.out.println("(。・∀・)ノ゙嗨  我走了");

         就是关注点!


切面,

          关注点形成的类,就叫切面()

          面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。

          在这里我抽理出来的PublicKind类就是切面



切入点,

         执行目标对象方法,动态植入切面代码。

         可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。

public class Demo {

   @Test
   public void test1(){
      PublicKind.first();
      System.out.println("测试");
       PublicKind.end();
   }
}

有了这个概念就开始使用注解实现aop先

使用@Aspect标记切面,@Pointcut 标记切入点  ,@Before和@After切入点之前和之后执行该条件那么

public class PublicKind {

@Pointcut("execution(* test.Demo.*(..))")
public void hifrend(){
}
@Before("hifrend()")
public static void first(){
System.out.println("(。・∀・)ノ゙嗨 我要来了");
}
@After("hifrend()")
public static void end(){
System.out.println("(。・∀・)ノ゙嗨 我要走了");
}
}

在切入点表达式中,execution(* )是固定写法,第一个*表示返回的值为任意类型,加上一个空格后面跟上包名,对应包中的类,类中对应的方法,方法内带参数或不带参数都可以用(..)进行代替,通配符* 表示所有,这儿切入点表达式感觉够用了就没有再深入理解。

@Before和@After就可以跟上Pointcut下的方法了。

@Component
public class Demo {
public void test1(){
System.out.println("测试");
}
}

核心配置文件一定不要忘了加

<!--开启注解扫描!-->
<context:component-scan base-package="test"></context:component-scan>
<!--开启aop注解扫描-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

测试成功!

@Aspect                                                 指定一个类为切面类             

@Pointcut("execution(* test.*.*(..))")                  指定切入点表达式

 

@Before("@Pointcut定义下的方法名()")                    前置通知: 目标方法之前执行

@After("@Pointcut定义下的方法名()")                     后置通知:目标方法之后执行(始终执行)

@AfterReturning("@Pointcut定义下的方法名()")            返回后通知: 执行方法结束前执行(异常不执行)

@AfterThrowing("@Pointcut定义下的方法名()")             异常通知出现异常时候执行

@Around("@Pointcut定义下的方法名()")                    环绕通知: 环绕目标方法执行


这里最后一个环绕方法能更加高度自定义处理方法,做测试

@Aspect
public class PublicKind {

@Pointcut("execution(* test.Demo.*(..))")
public void hifrend(){
}
@Around("hifrend()") //ProceedingJoinPoint表示切入点的方法
   public static void around1(ProceedingJoinPoint pj) throws Throwable {
System.out.println("(。・∀・)ノ゙嗨  我在环绕");
//执行切入点的方法
       pj.proceed();
System.out.println("(。・∀・)ノ゙嗨 我不环绕了");
}

}

结果。

使用xml配置文件实现aop

<!--将切面注入IOC-->
<bean id="publicKind" class="test.PublicKind"></bean>
<!--配置aop-->
<aop:config>
<!--配置切入点-->
   <aop:pointcut id="pt" expression="execution(* test.Demo.*(..))"></aop:pointcut>
<!---对切面配置通知方法-->
   <aop:aspect ref="publicKind">
<!--对publicKind类中的配置执行方法-->
       <aop:around method="around1" pointcut-ref="pt"  />
</aop:aspect>
</aop:config>

删除PublicKind下的所有注释


public class PublicKind {

public static void around1(ProceedingJoinPoint pj) throws Throwable {
System.out.println("(。・∀・)ノ゙嗨  我在环绕");
pj.proceed();
System.out.println("(。・∀・)ノ゙嗨 我不环绕了");
}

}

开始测试

OK那么这儿对AOP的使用已经没什么问题了,但追求其spring aop本质,就是一种代理模式!在spring aop中分为两种

①是jdk代理也叫做动态代理

②是cglib代理

但是就精力有限,只对动态代理进行了学习

放一个核心API,今天不总结了。

|-- Proxy

         static Object newProxyInstance(

ClassLoader loader,       指定当前目标对象使用类加载器

 Class<?>[] interfaces,     目标对象实现的接口的类型

InvocationHandler h       事件处理器

)  

明日计划:提交task1 正式开始web相关,继续补前面欠下的账

今日问题:无

收货:对web项目发布的一个粗略了解



返回列表 返回列表
评论

    分享到