站长工具ping,如何提高网站文章收录,近期国外重大新闻事件,公司网站开发毕业设计框架篇一、Struts1的运行原理在启动时通过前端总控制器ActionServlet加载struts-config.xml并进行解析#xff0c;当用户在jsp页面发送请求被struts1的核心控制器ActionServlet接收#xff0c;ActionServlet在用户请求时将请求参数放到对应的ActionForm对象中的成员变量中当用户在jsp页面发送请求被struts1的核心控制器ActionServlet接收ActionServlet在用户请求时将请求参数放到对应的ActionForm对象中的成员变量中然后ActionServlet则会根据struts-config.xml中的映射关系找到相应的Action中的方法将对应的ActionForm一并传给这个Action中的方法里然后执行相应的业务逻辑操作最后就根据ActionMapping的findforward方法返回一个ActionForward,之后在struts-config.xml中找到与之对应的forward标签根据它的配置路径找到对应的jsp页面。二、Struts2的运行原理1、tomcat 启动的时候会加载 web.xml 、核心控制器 FilterDispatcher 会加载并解析 struts.xml2、客户端会发送一个请求到 action 、FilterDispatcher 会根据后缀名进行拦截3、FilterDispatcher根据 struts.xml 的配置文件信息 找到 某个action 对应的某个类里的指定方法4、执行相关的业务逻辑最后返回 一个String5、 里配置 name的属性值与返回的String 进行匹配,跳转到指定的jsp 页面三、struts2的体系结构1、客户端向Servlet容器(例如Tomcat)发送一个请求2、这个请求经过一系列的过滤器(Filter)3、接着FilterDispatcher被调用FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action4、如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy5、ActionProxy通过Configuration Manager询问框架的配置文件找到需要调用的Action类6、ActionProxy创建一个ActionInvocation的实例。7、ActionInvocation在调用Action的过程前后涉及到相关拦截器(Intercepter)的调用。8、一旦Action执行完毕ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是jsp或者FreeMarker的模版。(体系结构图见下一页)四、Spring MVC运行原理整个处理过程从一个HTTP请求开始1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。2.DispatcherServlet接收到客户端请求找到对应HandlerMapping根据映射规则找到对应的处理器(Handler)。3.调用相应处理器中的处理方法处理该请求后会返回一个ModelAndView。4.DispatcherServlet根据得到的ModelAndView中的视图对象找到一个合适的ViewResolver(视图解析器)根据视图解析器的配置DispatcherServlet将要显示的数据传给对应的视图最后显示给用户。五、Struts1.x与Struts2.x的区别Struts 2以WebWork为核心采用拦截器的机制来处理用户的请求struts1严重依赖于servletAPI,属于侵入性框架,struts2不严重依赖于servletAPI,属于非侵入型框架。线程模型方面Struts1的Action是单实例的,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题封装请求参数Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数或者直接使用Action的属性。struts1的前端总控制器(核心总控制器)为ActionServlet,struts2的前端总控制器(核心总控制器)为FilterDispather六、Spring MVC、struts1和struts2区别1.spring mvc 单例 非线程安全struts1单例 非线程安全struts2线程安全对每个请求都产生一个实例2.spring mvc的入口是servlet而struts2是filterspring 的前端总控制器为 DispatcherServletstruts2 的前端总控制器为 FilterDispatcherstruts1 的前端总控制器为 actionServlet3. 参数传递struts是在接受参数的时候可以用属性来接受参数这就说明参数是让多个方法共享的。springmvc 用方法来接受参数4.spring mvc是基于方法的设计,而sturts是基于类七、Struts2中result中的type类型1.dispatcher它是默认的用来转向页面通常处理JSP2.redirect将用户重定向到一个已配置好的URL3.redirectAction将用户重定向到一个已定义好的action4.chain将action和另外一个action链接起来5.freemarker呈现Freemarker模板6.httpheader返回一个已配置好的HTTP头信息响应7.stream向浏览器发送InputSream对象对下载的内容和图片非常有用8.velocity呈现Velocity模板9.xslt该XML可以通过XSL模板进行转换10.plaintext显示原始文件内容例如文件源代码八、Struts2标签首先需要引用 1. 判断标签 后面可跟 2. 迭代标签3. 引入标签 可以把一个JSP页面或者servlet引入一个页面中4. 输出标签5. 标签赋予变量一个特定范围内的值6. 表单标签7. 文本域标签8. 下拉标签9. 声明一个url的路径最常用的是判断循环输出九、SSI整合1、Action继承于Actionsupport2、引入struts-spring-plugin.jar包从而完成struts和spring的整合3、在struts2的action中注入service保证service的名字和配置文件中的一致并生成get,set方法4、Dao层继承于SqlMapClientDaoSupport5、在dao层的配置文件中注入sqlMapClient十、SSH整合1.首先在web.xml中通过ContextLoaderListener来融入spring并加载spring的相关配置文件2.同样配置sturts2的前端总控制器filterDispatcher来过滤相关的请求并且加载struts.xml3.action继承ActionSupport然后通过引入struts-spring-plugin.jar包并且根据配置文件中service的id生成get,set方法来注入service层。4.dao层继承于HibernateDaoSupport并且在dao的配置文件中注入sessionFactory.5.通过spring中的配置文件加载hibernate.cfg.xml文件从而融入hibernate.在ssh框架中是怎么整合spring?首先在web.xml中通过ContextLoaderListener来融入spring并加载spring的相关配置文件在ssh框架中是怎么整合hibernate?通过spring中的配置文件加载hibernate.cfg.xml文件从而融入hibernatedao层继承于HibernateDaoSupport并且在dao的配置文件中注入sessionFactory在ssh框架中是怎么整合struts2?配置sturts2的前端总控制器filterDispatcher来过滤相关的请求并且加载struts.xml十、Spring MVC整合1.首先,要在web.xml里面配置SpringMVC的核心控制器,DispatcherServlet,对指定的后缀请求进行拦截。2.Controller层要加 Controller注解,表明该类是MVC的控制层。3.创建Service接口,给接口加上注解 Component或者 Service 表明这是Service业务处理层4.在Controller层声明Service变量(属性),给变量(属性) 加上 Autowired注解,通过自动绑定机制将Service注入到Controller。 (注Autowired默认是ByType,如果想根据属性名注入,那么就再加上注解 Resource(name“属性名”))5.在Controller层的方法上加上注解 RequestMapping(“requestAddress”) 表明该方法的请求地址6.Dao层要加上注解 Repository 表明这是数据库持久层7.同样将dao实例注入到service层中。8.配置视图解析器 “InternalResourceViewResolver”,对处理后的跳转进行统一配置。十一、Hibernate 中get 和 load的区别加载方式load为延迟加载(返回的是一个只有id属性的代理,只有使用该对象属性时,才发出sql语句)get为立即加载(执行时,会立即向数据库发出sql语句)返回结果load检索不到记录时,会抛ObjectNotFoundException异常get检索不到记录时,会返回null十二、Hibernate、Ibatis、Jdbc三者的区别Hibernate属于全自动 Ibatis属于半自动Jdbc属于手动从开发效率上讲hibernate较高ibatis居中jdbc较低从执行效率上讲hibernate较低ibatis居中jdbc较高因为jdbc是手工写sql语句程序员对sql的控制能力更大可以根据业务需要进行优化而ibatis虽然也可以对sql进行优化但是他里面将resultset封装为实体的过程中采用了反射机制所以一定程度上影响了性能而hibernate因为高度封装所以开发效率相对较高但正因为这个原因所以程序员在对sql语句的控制和优化方面相对比较弱而且在将resultset封装成实体的过程中也采用了反射机制所以在性能方面较低十三、Hibernate的运行原理首先通过configuration去加载hibernate.cfg.xml这个配置文件根据配置文件的信息去创建sessionFactory,sessionFactory是线程安全的是一个session工厂用来创建session,session是线程不安全的相当于jdbc的connection最后通过session去进行数据库的各种操作在进行操作的时候通过transaction进行事务的控制。十四、Hibernate五大核心(类/接口)简述1 .Configuration接口的作用是对Hibernate进行配置以及对它进行启动。(加载hibernate.cfg.xml)并创建一个SessionFactory对象。2 .SessionFactory接口SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理并负责创建Session对象。SessionFactory是线程安全的。3 .Session接口Session(会话)接口是Hibernate应用使用的主要接口。Session接口负责执行被持久化对象的CRUD操作(增删改查)。Session对象是非线程安全的。Session 相当于jdbc的connection4 .Query与Criteria接口总之Query和Criteria接口负责执行各种数据库查询。5 .Transaction接口Transaction(事务)负责操作相关的事务。十五、Hibernate与JDBC的区别1、hibernate和jdbc主要区别就是hibernate先检索缓存中的映射对象( 即hibernate操作的是对象)而jdbc则是直接操作数据库.2、Hibernate是JDBC的轻量级的对象封装它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合3、Hibernate是一个和JDBC密切关联的框架所以Hibernate的兼容性和JDBC驱动和数据库都有一定的关系但是和使用它的Java程序和App Server没有任何关系也不存在兼容性问题。4、如果正确的使用JDBC技术,它的执行效率一定比hibernate要好,因为hibernate是基于jdbc的技术.5、JDBC使用的是SQL语句Hibernate使用的是HQL语句但是HQL语句最终还会隐式转换成SQL语句执行。十六、Hibernate中的两大配置文件.hbm.xml主键生成策略映射关系一对多一对一的关系。Hibernate.cfg.xml方言(用哪个数据库)数据库连接信息包含.hbm.xml内容映射文件也可以配事务。十七、Hibernate事务处理开启事务 session.beginTransaction();执行相关的操作如果成功则session.getTransaction().commit();执行操作失败则 session.getTransaction.rollback();十八、Hibernate的三种状态以及状态的转换Transient(临时)new 一个初始化对象后并没有在数据库里保存数据处于临时状态Persistent(持久化)当执行save()方法调用session.close()方法之前内存中的对象与数据库有 对应关系处于持久化状态Detached(托管/游离)当执行session.close()之后处于托管状态状态的转换处于托管状态下调用update()方法后转换为持久化状态在持久化状态下执行delete()方法后转换为临时状态在未初始化对象之前调用get(),load(),find(),iterate()之后直接进入持久化状态。十九、分页步骤①前台封装一个显示分页的组件②查询总条数③后台封装分页工具类计算开始位置、结束位置、总页数④后台写支持分页的sql语句⑤前台包含分页组件实现分页效果注意:查询总条数的where和查询列表信息的where条件要保证一致。二十、hibernate缓存概述hibernate分为一级缓存即session缓存也叫事务级别的缓存以及二级缓存sessionFactory即应用级别的缓存,还有查询缓存即三级缓存.一级缓存的生命周期和session的生命周期保持一致hibernate默认就启用了一级缓存不能将其关闭可以通过session.clear()和session.evict(object)来管理一级缓存。其中get,load,iterate都会使用一级缓存一级缓存缓存的是对象。二级缓存的生命周期和sessionFactory的生命周期保持一致可以跨session,被多个session共享hibernate3默认开启二级缓存,也可以手动开启并指定缓存插件如ehcache,oscache等。二级缓存也只能缓存对象。三级缓存也叫查询缓存查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id。对query.list()起作用query.iterate不起作用也就是query.iterate不使用查询缓存二十一、Ssh的概述ssh是web开发中常见的一种框架s-strutss-springh-hibernate其中struts在框架中充当控制器实现MVC主要用来处理用户的请求和跳转页面。使项目结构清晰开发者只需要关注业务逻辑的实现即可。spring在ssh充当粘合剂粘合struts-sping-hibernate主要用来进行事物的控制hibernate-充当数据库持久层主要用它来与数据库交互提高开发效率减轻程序员sql控制要求而且hibernate通过反射机制有灵活的映射性还支持各种关系一对一一对多多对多。在进行ssh整合的时候我们应该注意Action继承于ActionSupport引入struts-spring-plugin.jar包从而完成struts和spring的整合在struts2的action中注入service保证service的名字和配置文件中的一致并生成get,set方法Dao层继承于hibernateDaoSupport在dao层的配置文件中注入sessionFactory二十二、防止表单重复提交针对于重复提交的整体解决方案1.用redirect来解决重复提交的问题2.点击一次之后按钮失效3.通过loading4.自定义重复提交过滤器5.解决struts2重复提交可以结合s:token标签来解决重复提交问题利用token的原理1.在前端的jsp页面中加入s:token标签在访问该页面时就会生成隐藏域该隐藏域中包含一个随机生成的字符串并把该字符串存入session中2.在struts2的配置文件中加入token拦截器后当正常访问action的时候会从session中取出该字符串然后和页面隐藏域中提交字符串做对比如果一致则正常执行并删除session中存储的字符串。二十三、JSP标签1.JSP include动作jsp:include 动作以“ ” 结束比如2.JSP指令以“ ” 结束。比如3.JSP输出表达式输出变量的值后边不能加4.JSP Scriptlet【脚本】: 例子5.JSP声明 例子String getHello(String name) {return “Hi,” name “!”;}%6.迭代标签Jstl中的核心标签(core)7.JSP注释8.el表达式${}9.jsp:include动作是在运行时动态包含。include指令是在编译时包含。它们两个都只能包含本项目的相关文件不能包含其他项目的。如果要包含其他项目的文件可以使用c:import二十四、过滤器filter的概述:filter是一个过滤器用来在请求前和响应后进行数据的处理。filter的生命周期是:实例化—初始化(init)–进行过滤(doFilter)—销毁(destroy)–释放资源一个Filter必须实现javax.servlet.Filter接口在项目中我们通常通过filter进行编码转换进行安全验证进行重复提交的判断。了解(不需要主动说)filter 相当于 拦截器 相当于Spring AOPservletjspjavabeanjdbcfilterencodingFilterorg.leopard.filter.EncodingFilterencodeutf-8encodingFilter*二十五、拦截器的理解什么是拦截器拦截器是AOP中的概念它本身是一段代码可以通过定义“织入点”来指定拦截器的代码在“织入点”的前后执行从而起到拦截的作用正如上面 Struts2的Reference中讲述的Struts2的Interceptor其拦截的对象是Action代码可以定义在Action代码之前或者之后执行拦截器的代码。在项目中我们经常用来拦截通过非正常程序而进行的访问Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前Struts2会首先执行在struts.xml中引用的拦截器在执行完所有引用的拦截器的intercept方法后会执行Action的execute方法。其中intercept方法是拦截器的核心方法所有安装的拦截器都会调用之个方法。在Struts2中已经在struts-default.xml中预定义了一些自带的拦截器如timer、params等。如果在标签中继承struts-default则当前package就会自动拥有struts-default.xml中的所有配置。代码如下… 拦截器是Struts2框架的核心它主要完成解析请求参数、将请求参数赋值给Action属性、执行数据校验、文件上传等工作在struts-default.xml中有一个默认的引用在默认情况下(也就是中未引用拦截器时)会自动引用一些拦截器。struts2中默认的拦截器是defaultStack.自定义拦截器需要特别注意的是不要忘记引入struts2默认的拦截器。为了实现某些操作我们可以自定义拦截器自定义拦截器有三种方式定义。分别为实现Interceptor接口继承抽象类AbstractInterceptor继承MethodFilterInteceptor类。拦截器在项目中的运用同时可以减轻代码冗余提高重用率。如果要求用户密码、权限等的验证就可以用自定义的拦截器进行密码验证和权限限制。对符合的登入者才跳转到正确页面。二十六、Spring融入框架我们通过在web.xml中配置ContextLoaderListener这个监听器也加载spring的配置文件从而融入到项目框架中。二十七、项目的部署方式1、如果项目单独部署到tomcat中的时候应该看tomcat中的server.xml;2、如果和eclipse结合使用进行项目部署的时候应该看eclipse里面的server.xml.