1.Maven项目模块划分:
- Atcrowdfunding-parent 父工程,聚合其他工程(pom)
- Atcrowdfunding-main Web工程,存放所有页面,框架配置文件(war)
- Atcrowdfunding-manager-impl 后台管理系统,存放控制器类,业务层实现类(jar)
- Atcrowdfunding-manager-api 后台管理系统,存放业务层接口和DAO层接口(jar)
- Atcrowdfunding-potal-impl 前台系统,存放控制器类,业务层实现类(jar)
- Atcrowdfunding-potal-api 前台系统,存放业务层接口和DAO层接口(jar)
- Atcrowdfunding-common 存放所有模块所需要的公共类(jar)
- Atcrowdfunding-bean 存放所有模块的实体类(jar)
2:项目中解决乱码问题:
- GET: 在Tomcat/conf/server.xml中设置编码.
- <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- POST :
- 字符编码过滤器只能解决POST请求乱码问题.不能解决GET请求乱码问题.
- 应用程序和数据库之间数据交互是通过url来指定中间编码进行转换
- jdbc:mysql://localhost:3306/atcrowdfunding170506?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
- 命令行查询数据显示乱码
- 数据库采用utf8编码,而DOS窗口默认GBK,需要通过set names GBK将数据库数据转换为GBK编码之后再显示到DOS窗口就解决乱码问题了.
- 这个设置只是临时的,只针对于当前窗口有效.
- Java中字符串编码转换:
public byte[] getBytes(String charsetName)
字符串对象调用这个方法将字符串转换为二进制数据(将原来编码转换为指定的中间编码)
public String(byte bytes[], String charsetName)
将二进制数组数据再转换为字符串(将数据的中间编码再转换为需要的编码).
3.web.xml中的监听器:
创建Spring框架的IOC容器。 将IOC容器对象存放到application域 ApplicationContext ioc=WebApplicationContextUtils.getWebApplicationContext(application);
ServletContextListener监听器接口: 监听ServletContext创建和销毁。
如果监听到ServletContext创建(服务器启动),就会创建 IOC容器(XmlWebApplicationContext).
如果监听到ServletContext销毁(服 务器停止,或卸载项目),就会销毁IOC容器。
4.<mvc:default-servlet-handler />:
在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
5.org.springframework.web.filter.HiddenHttpMethodFilter:
支持RESTful风格,将POST请求转换为PUT或DELETE请求。
会读取隐含参数:"_method"
6.use-default-filters="false":
use-default-filters 这个属性的作用。use-default-filters 属性的默认值为 true,即使用默认的 Filter 进行包扫描,而默认的 Filter 对标有 @Service,@Controller和@Repository 的注解的类进行扫描,因为前面说过,我们希望 SpringMVC 只来控制网站的跳转逻辑,所以我们只希望 SpringMVC 的配置扫描 @Controllerce 注解标注的类,不希望它扫描其余注解标注的类,所以设置了 use-default-filters 为 false,并使用 context:include-filter 子标签设置其只扫描带有 @Controller 注解标注的类。
如果不配置,则默认值为true,这样springmvc会创建一个service,spring也会创建一个service,根据就近原则,找的是springmvc中
的service,service的声明式事务都是在spring中配置的,这样springmvc中的service就没有事务
7.
- 悲观锁:
- 当一个线程操作数据时,总是以为另一个线程也会来操作这个数据,所以,为了避免冲突,当前线程将这个数据进行锁定.其他线程就无法使用这个数据了.
- 我们只有高并发时,才会出现资源共享的问题,才会出现冲突.
- 如果数据访问量比较小,出现冲突几率是比较小的.
- 悲观锁其实就是数据库中的行级锁.
- Select * from 表 where id = 1 for update
- 复习事务隔离级别?
- 乐观锁:
- 当一个线程操作数据时,允许其他线程也进行操作. 先执行操作的线程可以成功,后执行操作的线程就会失败.
- 原理:
- 给数据或文件增加版本号.(数据库表中增加版本字段; SVN服务器对文件的管理,给文件增加版本号.)
- 每次修改文件提交都需要比较本地文件和服务器的文件版本号是否一致:
- 如果一致:文件没有被其他线程修改过,允许提交.
- 如果不一致:文件被其他线程修改过,不允许提交.