java服务器端开发遇见的问题:

来源:互联网 发布:js控制class显示隐藏 编辑:程序博客网 时间:2024/05/22 02:27

如何将Eclipse中项目打成war包?(直接war包,代码零散上传(替换掉原来的代码包))

1)war包即Web归档文件,将Web项目打成war包可以直接拷贝到Web服务器发布目录(例如Tomcat服务器webapps目录 ),当Tomcat启动后该压缩文件自动解压,war包方便了web工程的发布,那么在Eclipse中如何将Web项目打成war包呢?

2)选择war文件保存位置,然后点击”Finish“按钮即可将Web工程打成war文件。War包解压,拿到里面的代码文件(包目录),上传到测试服务器,停止、重新启动测试服务器就行。

3)Tomcat启动是需要时间的,启动测试服务器要等待一段时间。

 

项目上线注意事项

1)复制一份旧的代码进行保存,防止意外。新代码不能跑,还能替换回来。

2)只有测试过的代码才能进行发布到测试服务器

3)代码从Ecplise提交到SVN,从SVN提交到测试服务器。

4)项目必须晚上上线,这样影响的用户比较少。

5)前端:(直接替换就行,不需要打war包的

H5测试服务器发布地址:/usr/local/www/wap。 

PC端的发布地址:/usr/local/www/example

服务器端:(需要打war包)

app服务器端的发布地址:/usr/local/tomcat_app-7.0.79/webapps/ROOT/WEB-INF/classes/com;

pc端服务器端的发布地址:/usr/local/tomcat_web-7.0.79/webapps/ROOT/WEB-INF/classes/com

直接覆盖掉测试环境的文件,让测试先测试一遍,看看有没有问题;如果没有问题,再提交到svn。

前端页面是不需要打war包的
覆盖文件之前,要保存上一版的文件。
项目上线后,测试能否进行访问(特别重要)。


服务器端功能可以使用这种方式实现,但是效率比较低,最好直接查询数据库。

List<Map<String,Object>> friendList = drMemberRecommendedDAO.selectDrMemberRecommendedInvest(param);if (friendList!=null&&friendList.size()>0) {for (int i = 0; i < friendList.size(); i++) {Map<String, Object> mapResult = friendList.get(i);DrMemberRecommended drMemberRecommended = (DrMemberRecommended) mapResult.get("rows");BigDecimal investMoney = drMemberRecommended.getInvestMoney();Integer experenceMoney = drMemberRecommended.getExperenceMoney();double doubleValue = investMoney.doubleValue();if (doubleValue<3000) {experenceMoney=0;}else if(doubleValue>=3000&&doubleValue<5000){experenceMoney=88888;}}}


添加数据库授权:mysql用户

Last login: Thu Nov 9 14:20:50 2017 from 192.168.1.125
[mysql@database ~]$  在这里输入密码  而非mysql命令下

mysql -u root -p 

输入密码 query ok

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.150 ' IDENTIFIED BY 'mysql123' WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;  以分号结尾,刚刚忘记了

Query OK, 0 rows affected (0.00 sec)


软件单元测试

单元测试包:用于测试dao层数据是否正确;新建单元测试包进行单元测试。

需要对自己编写的代码进行单元测试(好处是:减少后期维护的精力和费用),这是一些最基本的模块测试。

在进行单元测试的同时也必然得清楚测试的代码的内部逻辑实现,这样在测试的时候才能清楚地将我们希望代码逻辑实现得到的结果和测试实际得到的结果进行验证对比。

JUnitJava单元测试框架

JUnit通过注解的方式来识别测试方法。目前支持的主要注解有:

@BeforeClass 全局只会执行一次,而且是第一个运行

@Before 在测试方法运行之前运行

@Test 测试方法

@After 在测试方法运行之后允许

@AfterClass 全局只会执行一次,而且是最后一个运行

@Ignore 忽略此方法

通过测试方法加载配置文件

package com.junit;import java.math.BigDecimal;import java.util.HashMap;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.jsjf.common.BaseResult;import com.jsjf.service.activity.impl.JsActivityFriendServiceImpl;//这种写法是为了让测试在Spring容器环境下执行@RunWith(SpringJUnit4ClassRunner.class)//指定要加载的Spring配置文件的位置,locations:可以通过该属性手工指定 Spring 配置文件所在的位置@ContextConfiguration(locations="classpath:*.xml")public class TestDao {@AutowiredJsActivityFriendServiceImpl js;@Testpublic void  testMyInvite(){//HashMap<String, Object> hashMap = new HashMap<String, Object>();//hashMap.put("pageOn", 1);//hashMap.put("pageSize", 6);//BaseResult  baseResult=js.myInvitation(31, hashMap, 0);//System.out.println(baseResult.toString());BigDecimal selectByParamSum = new BigDecimal(888888);BigDecimal unit = new BigDecimal(10000);BigDecimal experienceMoney = (selectByParamSum.divide(unit,2, BigDecimal.ROUND_DOWN));System.out.println(experienceMoney+"测试数据");}}


Ecplise中SVN的使用

Team菜单:团队合作

1、关闭项目:

Eclipse工作空间可以包含多个项目。项目可以处于打开状态或关闭状态。

打开项目:消耗内存;占用构建时间。

如果项目没有处于活动开发状态,则可以关闭。要关闭项目,请从项目(Project)中选择关闭项目(Close Project)菜单项。

2、废弃位置:(先断开连接,才能废弃位置)

在MyEclipse和Eclipse中无法废弃svn地址。

先断开所有与该地址相关的项目的svn链接,然后才能废弃定位(废弃地址)

选中项目----右键-----team----断开链接。

3、显示资源历史记录:

查看所有的提交记录;每个人对此文件所做的修改。

4、与资源库同步:

在eclipse中,从show view里调出SVN资源库视图(有的,已经测试过)。

作用是查看服务器与本地资源的差异,“与资源库同步”只是一个检测服务器与本地资源差异的功能,它并不改变任何一段的实际内容。

5、新建——>资源库位置:输入服务器端svn的位置,

添加新的SVN资源库, 资源库导入成功,SVN资源库视图下出现导入的资源库

在资源库视图点击资源库左边的小三角形后出现该资源库下的所有project。

6、选择要下载的project右键——> 检出为

7、自由选择是否更改属性(建议使用默认) --> Finish --> 下载成功

作为新项目检出,就是只检出一个项目;作为工作空间检出,可以检出多个项目。

提交代码必须填写注释。

8、与本地代码有不同的服务器代码将显示在Synchronize视图下,双击可以查看本地代码和服务器代码的对比,加号的为新增的文件(本地还没有)

9、如果出现下图这个符号,则代表本地代码和服务器代码有冲突(即:本地代码在未更新到最新版本的情况下,对代码进行了更改;或者在你对a.java写代码的期间,有人往服务器上传了新的a.java代码,使得代码间出现了冲突)

双击冲突文件进入比较视图

找到服务器上新增的但本地没有的代码块,选中此代码块,点击右上角的按钮(如下图箭头指向的按钮)将服务器代码复制到本地(其他地方也同此操作),如果点击按钮没用,则关闭比较视图重新打开。

解决完有冲突的代码,要标记为合并。将本地代码和远程代码合并到一起


常用快捷键:



常用的sql

Navicat的使用:右键单击表名---->对象信息---->ddl选项卡;可以看到表字段的含义。

调出console,刷新flushdb 刷新Redis缓存。


Tomcat目录结构

/server/lib:存放Tomcat服务器所需的各种JAR文件(但是不能被web应用访问)

/webapps:存放web项目的目录,其中每个文件夹都是一个项目;其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。

Tomcat WEB-INF项目代码的位置,目录下的文件,浏览器一般无法直接方法


前端页面查看网络请求的使用F12



1、Tomcat一闪而过:没有配置系统变量(一般都可以解决这个问题)

添加系统变量:JAVA_HOME,然后配置 变量值是jdk的主目录。


2、如何为Maven项目添加框架支持?

添加Spring框架支持时,找不到对应的框架了

第一次在Add Frameworks support界面中添加Spring支持的时候,异常中断,导致没有成功添加。

第二次进入Add Frameworks support窗口时,发现找不到Spring

解决办法

打开项目根目录下的spring.iml文件,搜索Spring找到这段代码并删除,然后重新添加框架支持即可选择Spring

  <facet type="Spring" name="Spring">

      <configuration>

        <datasource-map />

        <naming-strategy-map />

      </configuration>

    </facet>


今天在webapplicton上使用junit 4 testcase ,装好spring-test.jar 和junit4-4.8.1.jar后,运行test case。
抛此错误java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
后来发现是需要加入hamcrest包。
http://repo2.maven.org/maven2/org/hamcrest/hamcrest-all/1.3/
加入后,此问题就解决了。

eclipse 重新关联源代码
这个时候如果没有关联源代码,可以直接add source。现在已经关联过,那个按钮不存在了。(也可以删除原来的源代码,重新选择)
可以右键工程属性 -- properties -- java Builde Path -- Libraries 在这里找到需要关联源代码的jar包。然后点开这个jar包前的+号。
找到Source attachment,右面选择edit来改变源代码的关联。


3、Process finished with exit code 0

说明程序正常执行完毕,没有出错。

process finished with exit code 1

说明程序出错,也就是代码有问题。


4、自定义注解的作用:

使用自定义注解做权限比较流行。

 

5、在Spring中的注解:

@Service :用于标注配置业务层(service层)组件(业务层类)

@Cotroller:用于标注配置控制层组件(控制层类)

@Reponsitory:用于标注一般的DAOBean对象(数据持久层类)

@Component:泛指组件,对一般不好归入以上三种中的一种是使用

使用注解实现mvc特别简单,依赖注入。

abstract="true",一个类在spring容器中进行了配置,但是不想让这个类创建对象,就是用此属性(一般父类会用此属性)

parent="commonDao",让子类拥有父类的属性

把父类定义成抽象类,不能被创建对象 abstract属性的使用。不想让此bean创建对象;

spring中如果子类想要拥有父类的属性,需要给子类添加parent属性;


6、AOP:全是软件架构的思想

AOP最根本的原理就是代理模式.

使用面向切面编程:事务,日志,安全性框架,权限与目标方法之间完全是松耦合的。

 

1),切面:事务,日志,安全性框架,权限等都是切面(理解为类)

2),通知:切面中的方法称为通知;代理对象中的方法其实就是“通知+目标方法”的结合体。

3),目标类

4),切入点:其实就是判断条件,是否执行某个切面中的方法。在满足某些条件的情况下,

通知和目标方法才能结合到一起,这些条件就叫做切入点。

5),织入:形成代理对象的方法的过程。

 

导入AOP的命名空间:导入目标类,导入切面(切面也是一个类)

切入点表达式.配置切面

Spring配置文件中对aop进行配置

代表以set开头的任意方法

前置通知:在目标方法调用之前调用,比如开启事务

后置通知:在目标方法调用之后调用,比如提交事务

 

Aop代理的原理

Spring aop的加载步骤:

1,当spring容器启动的时候,会加载spring配置文件

2,为配置文件中所有的bean创建对象

3spring容器会解析aop:config的配置,解析切入点表达式,用切入点表达式和纳入spring容器中的bean做匹配,如果匹配成功,就会为该bean创建代理对象,代理对象的方法就是目标方法+通知。如果匹配不成功,就不会创建代理对象。

4,在客户端利用context.getBean()获取对象时,如果对象有代理对象,就返回代理对象;没有就返回目标对象

注意:如果目标类没有实现接口,则spring容器会采用cglib的方式产生代理对象,如果实现了接口,会采用jdk的方式产生代理对象。

 

通知分类:

前置通知

1)在目标方法执行之前执行

2)无论目标方法是否抛出异常,都执行,因为在执行前置通知的时候,目标方法还没有执行,还没有遇到异常

后置通知

1)在目标方法执行之后执行

2)当目标方法遇到异常,后置通知将不再执行(比如:事务不再提交)

3)后置通知可以接受目标方法的返回值,但是必须注意:后置通知的参数的名称和配置文件中returning="var"的值是一致的

最终通知

1)在目标方法执行之后执行

2)无论目标方法是否抛出异常,都执行,因为相当于finally

异常通知

1接受目标方法抛出的异常信息

2)步骤

在异常通知方法中有一个参数(Throwable ex

在配置文件中

<aop:after-throwing method="throwingMethod" pointcut-ref="perform" throwing="ex"/>

环绕通知

1)如果不在环绕通知中调用ProceedingJoinPointproceed,目标方法不会执行;必须显示调用目标方法。

2环绕通知可以控制目标方法的执行。控制目标方法是否执行的作用。

JoinPoint参数 通过该参数可以获取目标方法的信息,特别好用。


一个目标类可以有很多个切面。

异常通知应用需求分析:截获service层所有方法所抛出的异常信息。

-统一的错误异常处理,切入点表达式是用来进行匹配的,为那些创建代理对象 。

如何抛出自定义异常。

Spring的异常处理

通知代码:

使用aop修改查看薪水的代码  aop不用自己设置拦截器了。


Springjdbc的结合使用:

springjdbc整合有三种方法,但实际上核心类为JdbcTemplate

通过给JdbcTemplate注入dataSource

如何在客户端获取DataSource? 只需要知道id 就可以。不需要知道使用的什么数据库连接池。

JdbcTemplate里面封装了很多jdbc的操作。


还有这么多代码没有敲 

1)继承

2)静态代理模式

3)使用Spring修改静态代理模式

4)动态代理模式的代码

5)查看薪水代码

6)对动态代理的代码进行重构。



Jdbc编程的特点:模板编程(模板设计模式:固定代码+动态的参数)

核心:1)创建jdbc连接;2)执行sql语句。

如何获取DataSource就是Springjdbc结合的核心问题,程序员只关注写SQL语句就可以。

核心类:JdbcTemplateJdbcDaoSupport

JdbcTemplate类使用了模板设计模式,封装了很多dao的操作。


服务器可以连接显示器,系统调好以后就不用显示器,其它程序可以通过网络远程安装。

安装操作系统---->安装运行环境---->设置网络和ip---->服务器之间建立集群。



原创粉丝点击