本文目录一览:
- 1、关于SSH框架开发的问题(在线, 等解决)
- 2、ssh框架问题
- 3、SSH框架如何配置filter,防止非法访问?
- 4、ssh框架的优缺点
- 5、java技术,我用的ssh框架,并发问题
- 6、ssh 框架来做的js 脚本收到了跨站脚本攻击
关于SSH框架开发的问题(在线, 等解决)
1、十几开发中,多数是使用Spring中引用hibernate配置信息的方法。这在开发中只是方便了数据库信息的配置而已,并没有什么特殊优势,所以你不嫌麻烦,也可以直接写在Spring配置文件里面。
2、注解和XML配合使用是肯定的。Spring的一个主要功能是IOC,当我们使用一般的DAO和Service等就当然使用注解的,没必要配置XML对吧。但是用起了拦截器、MVC、事务管理等等,当然是交给XML,可以说大部分框架的配置都写在Spring的XML里面的!因为,这就是框架!说通俗点,例如Springmvc的视图驱动,你会自己new一个出来使用么?要怎么使用呢?连我在内的很多写Java的大概都不知道吧,那么行了,我们只要在Spring的XML里面配置了就行了,IoC会帮你解决剩下的问题。
3、struts标签是用在Struts开发中的,换言之,用Struts开发就用它没错!如楼上所说的,个人认为SpringMVC要比Struts2好!我写的项目都是用SpringMVC做的。Struts2之所以慢,一个重要原因就是Struts标签的存在。
ssh框架问题
1-1:为什么每次请求都要创建一个Action对象?
为了防止线程迸发,如果每次都使用同一个Action进行数据修改和传递的话,容易引起线程迸发,使线程不安全。
1-2:ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?
在数据输出之前将数据接收的Bean里面的数据清空。解决了数据混淆的可能性。
1-3:为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?
为了1.可以将数据进行过滤
2.可以进行数据的转码将数据进行统一的编码
1-2:请你给我谈谈ValueStack?
堆值,堆里面的值。
1-5:Struts2是如何实现MVC设计模式的?
在Struts2里面是将每次页面的请求进行处理,然后将请求需要输出的数据转发的需要做数据显示的页面,Struts2只是起一个数据接受和转接的功能,就是Controler控制器,而传来数据的页面叫View显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的链接。
2-1:你为什么要用Spring?
使用Spring 1.主要将各个框架进行有效的联系起来,缩短实际编程的时间,起一个润滑剂的作用。
2.可以将各个框架进行有效的管理和控制,让数据传输中安全。
2-2:请你聊一聊IOC/DI?
依赖注入和控制反转Spring的两大基础作用
主要是将所有组件在Spring提供的外部容器中加载,提高安全性,减低耦合性,使各个框架或者类之间的依赖性降低。
2-3:什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?
声明事物管理主要是将在进行对数据库中数据进行添加或者修改的时候需要执行事物管理。主要是避免在执行数据修改和添加的时候数据添加或者修改不完全,导致数据丢失。
Spring是使用AOP面向切面的思想进行事物管理的。
2-4:把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行 查询任务的方法定义为read-only?
因为添加和删除和更新都涉及到数据库的修改,而查询并为涉及数据修改,所以只需要定义只读,这样可以提高效率,进行更加方便的事物管理。而事物管理主要是为添加和删除和更新设计的。
3-1:请你谈谈你对OR映射的理解?
将数据库里面的每一张表都映射成一个实体。
3-2:很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?
因为Hibernate属于大型框架,里面对许多方法的封装比较多,让SQL控制权降低。这样的话,适用性就会降低,在不必要的操作上会浪费时间。但是只要将Hibernate里的配置进行优化,也能提高其性能。
3-3:Hibernate为什么一定要定义一个数据库标识?
可以让映射文件变得简洁,消除无用的噪音(比如TBL_前缀等)。Hibernate使用的默认策略是几乎什么都不做,所以使用标识的作用就是使数据操作更加简洁和方便
3-4:为什么Hibernate建议你的实体类实现hashCode和equals方法?
因为Hibernate使用了一级和二级缓存,很多查询为了提高效率Hibernate都会先从缓存中进行查找,然后再从数据库进行查找。而HashCode是唯一的,所以这样避免数据操作出现数据混淆的可能,而equals的作用是对比Hibernate缓存中数据是否一致。
3-5:谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?
数据库标识是为了方便和简洁映射文件,而主键是为了使数据不会重复。
3-6:谈谈你对Hibernate关联映射与数据库外键之间关系的认识?
Hibernate在进行映射的时候会将数据库的关系也进行映射将数据库中的外键也使用标签的形式进行管理,这样在人为操作的时候就不需要手动的管理数据库关系了。
3-7:调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解
不会,具体执行步骤如下:
1. 首先在Session内部缓存中进行查找,如果发现则直接返回。
2. 执行实体类对应的Interceptor.isUnsaved方法(如果有的话),判断对象是否为未保存状态。
3. 根据unsaved-value判断对象是否处于未保存状态。
4. 如果对象未保存(Transient状态),则调用save方法保存对象。
5. 如果对象未已保存(Detached状态),则调用update方法将对象与Session重新关联。 。
3-8:调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解
理解同上
3-9:请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size
lazy懒,lazy=“extra”extra属性是不大容易重视的,其实它和true差不多,但有个小的智能的地方是,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
inverse控制翻转,主要是为了让谁去维护关系,一般是在主表中配置,将维护关系的只能交给主键。
fetch取来,fetch="join"主要是在查询的时候Hibernate会自动查询有关联的表。fetch="join",hibernate会通过select语句使用外连接来加载其关联实体或集合,此时lazy会失效
fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合
batch-size配置这个属性是让Hibernate在执行批量的数据库操作
3-10:配置了lazy=”true”一定会实现懒加载吗?
不一定,因为如果再配置中你也使用fetch属性的话此时lazy就会失效
3-11:请你谈谈Hibernate中的“N+1”问题
主要是如果再一般的查询时,如果需要查询很多次,就需要像数据库发送很多条SQL语句,而且,会返回很多个结果,而Hibernate中使用N+1策略时执行Criteria时,会将自动进行SQL构造,并且映射到实体Bean中,就只会返回一个结果,这样不仅提高了性能,而且在处理返回值的时候也变得比较轻松。
3-12:请你谈谈Hibernate有哪些最佳实践?
数据库建模,ORM是Hibernate中比较经典。
此回答只凭本人经验和学习。提供借鉴
SSH框架如何配置filter,防止非法访问?
在你项目中的web.xml中加入filter,如下:
filter
filter-nameSessionFilter/filter-name
filter-class
com.dc.portal.system.sessionmgr.SessionFilter
/filter-class
/filter
filter-class的值是你自己创建的类,给你个大致的例子:
public class SessionFilter implements Filter{
public void destroy() {
}
//这个doFilter方法必须有
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest) request;
HttpServletResponse httpres = (HttpServletResponse) response;
if(httpreq.getSession().getAttribute("userInfo") == null){
((HttpServletResponse)response).sendRedirect("你要重定向的地址");
}else{
chain.doFilter(httpreq, httpres);
}
}
}
上面是纯手巧的,格式不好看或者缺少什么符号的话自己用myeclipse整理一下,希望可以帮到你
ssh框架的优缺点
SSH的缺点主要是在数据库方面的,如果要对数据库进行修改,扩展,或者改换(从Sqlserver改成Mysql)或其他,就会显得麻烦了,还有目前国外的大型站还是利用Servlet的;优点我就不说了,除了效率还是效率!流行的技术有:Android、BI、Qt、VOIP、PHP等
java技术,我用的ssh框架,并发问题
取这个商品用的应该是dao层的时某个方法吧,如果是这样的话就在方法中设置事物的隔离级别为最高:Serializable(当多个线程同时取时,每次只有一个线程能取出,其他线程阻塞,等待正在取的线程完成后才能)
核心代码:
connection.setAutoCommit(false); //设置自动提交为false,相当于start transaction;开启一个事物
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//设置事物隔离级别为最高
connection.commit();//提交事物
ssh 框架来做的js 脚本收到了跨站脚本攻击
输入输出控制好,关键是你后台没做验证呀,后台验证做好了就完全没问题了