springmvc

Spring Mvc boot解决静态url带jsessionid问题

岁酱吖の 提交于 2019-11-30 17:25:21
1.jsessionid是什么? Jsessionid 只是 tomcat 的对 sessionid 的叫法,其实就是 sessionid ;在其它的容器也许就不叫 jsessionid 了。 2.那么有什么问题? 首先这是一个保险措施 因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cookie的,所以在这个时候就需要在URL中指定服务器上的session标识,也就是EDE802AB96CD1E0CA2AFB3830D18FB10,每当用户第一次访问页面的时候,后端获取的地址是包含 jsessionid参数,这样拼接 静态资源或者A标签或Form的地址的时候,链接就变成了: http://localhost:8080?jsessionid= EDE802AB96CD1E0CA2AFB3830D18FB10home/user 造成访问相关页面404. 3.解决方法 web.xml配置 <session-config> <tracking-mode>COOKIE</tracking-mode> <tracking-mode>URL</tracking-mode> <tracking-mode>SSL</tracking-mode> </session-config> 以上是Servlet3.0最会话跟踪的三个方式,Servlet 3

Java开发框架搭建:配置文件

依然范特西╮ 提交于 2019-11-30 16:09:44
工欲善其事,必先利其器。我们知道,Java开发最难的部分,就是初期框架的搭建工作。本文将记录一个可用的Java开发框架的搭建过程,以期满足大多数Java项目的开发。 本项目采用Maven管理Jar包,主要技术包括: MVC框架:SpringMVC 数据库:MySql ORM框架:Mybatis 日志组件:Log4j2 模板引擎:FreeMarker JS库:jQuery-1.9 其它技术会随着项目的变化而增删。 一、pom.xml 以下为pom.xml中所要依赖的jar包: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.1</version> <scope>test</scope> </dependency> <!-- servlet支持 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5<

Spring MVC源码学习一之初始化

淺唱寂寞╮ 提交于 2019-11-30 08:15:20
一、简单提下使用入门(依赖于注解方式) 1、通过在web.xml中添加配置,引入spring mvc框架,类似于Struts2引入需要在web.xml中配置过滤器StrutsPrepareAndExecuteFilter一样,但是Spring MVC是通过servlet实现的,需要配置一个Servlet。 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springConfig/springmvx-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 2

springmvc学习笔记(1)-框架原理和入门配置

十年热恋 提交于 2019-11-30 07:18:12
springmvc学习笔记(1)-框架原理和入门配置 标签: springmvc [TOC] 本文主要介绍springmvc的框架原理,并通过一个入门程序展示环境搭建,配置以及部署调试。 springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。 springmvc框架原理 给个官网示意图 组件及其作用 前端控制器(DispatcherServlet):接收请求,响应结果,相当于转发器,中央处理器。减少了其他组件之间的耦合度 处理器映射器(HandlerMapping):根据请求的url查找Handler Handler处理器 :按照HandlerAdapter的要求编写 处理器适配器(HandlerAdapter):按照特定规则(HandlerAdapter要求的规则)执行Handler。 视图解析器(ViewResolver):进行视图解析,根据逻辑视图解析成真正的视图(View) 视图(View) :View是一个接口实现类试吃不同的View类型(jsp,pdf等等) 注:其中加粗的为需要程序员开发的,没加粗的为不需要程序员开发的 文末参考链接中《跟开涛学SpringMVC》里面有张图挺好的,感觉很详细. 步骤: 1.发起请求到前端控制器( DispatcherServlet ) 2.前端控制器请求处理器映射器(

整合 SpringMVC 3.2.5 和 Shiro 1.2.3

ぃ、小莉子 提交于 2019-11-29 23:30:59
按着《 SpringMVC整合Shiro 》这篇博文来做即可。但是,在启动时发现Spring的配置被载入两次,很明显SpringMVC 和 Shiro 所使用的不是同一个 Spring Application Context。在参考《 ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别 》后,web.xml 配置改为: ...... <filter> <filter-name>shiroFilter</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>contextAttribute</param-name> <param-value> org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatch </param-value> <

springMVC笔记系列(7)——HiddenHttpMethodFilter过滤器

梦想的初衷 提交于 2019-11-29 11:23:47
什么是REST?首先来段介绍吧。 REST: 即 Representational State Transfer。 (资源)表现层状态转化。 是目前 最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、 扩展方便, 所以正得到越来越多网站的采用。 资源(Resources) : 网络上的一个实体,或者说是网络上的一个具体信息。它 可以是一段文本、一张图片、一首歌曲、一种服务, 总之就是一个具体的存在。 可以用一个URI(统一资源定位符)指向它, 每种资源对应一个特定的 URI 。 要 获取这个资源, 访问它的URI就可以, 因此 URI 即为每一个资源的独一无二的识 别符。 表现层(Representation) : 把资源具体呈现出来的形式,叫做它的表现层 (Representation) 。比如,文本可以用 txt 格式表现,也可以用 HTML 格 式、 XML 格式、 JSON 格式表现,甚至可以采用二进制格式。 状态转化(State Transfer) : 每发出一个请求, 就代表了客户 端和服务器的一 次交互过程。 HTTP协议,是一个无状态协议,即所有的状态都保存在服务器 端。因此, 如果客户端想要操作服务器,必须通过某种手段, 让服务器端发生“ 状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “ 表现层状态转化”。 具体说

springMVC笔记系列(19)——控制器实现详解(上)

僤鯓⒐⒋嵵緔 提交于 2019-11-29 07:41:08
本文我们在前文基础上引入一个例子,边做边聊控制器。 我们想实现一个课程查询的功能。 首先大脑应该条件反射——如何定义MVC。 M:课程(包含章节)——Course(包含Chapter) V:课程页面——course_overview.jsp C:编写一个控制器接收springMVC前端控制器dispatcherServlet的请求转发——CourseController 另外,Service——一些业务逻辑调用——业务接口CourseService,业务实现CourseServiceImpl 然后,在思考如何在springMVC下组织上述各个部分。 C控制器是M、V、Service的中间桥梁,如何组织都是围绕着C展开的。 请求URL由springMVC前端控制器dispatcherServlet转发给控制器C——在web.xml配置dispatcherServlet,给出前端控制器配置文件路径 如何标记控制器C——配置前端控制器配置文件,定义搜索包范围空间、激活注解;在类定义的地方为类添加控制器注解 如何将URL请求与控制器之间建立映射——RequestMapping注解控制器类和方法 控制器C调用Service业务逻辑——在控制器类相应方法中调用Service接口方法;Service被控制器C所关联,控制器C中的Service属性引用需要用spring的依赖注入的方式完成初始化

Spring MVC与Struts比较

情到浓时终转凉″ 提交于 2019-11-29 05:22:03
Struts2与SpringMVC 都是比较优秀,也是被广泛使用的Web开发框架,那么他们之间有什么区别呢?今天小博老师就跟大家来讨论下这个问题。 Struts工作流程图 Struts与Spring 之间主要有以下几点区别: 1、Struts2是类级别的拦截, 一个类对应一个request上下文。 SpringMVC 是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现restful比较困难。因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。 2、SpringMVC的方法之间基本上是独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。而Struts2方法之间也虽然是独立的,但其所有Action变量是共享的,一个Action对象对应一个request上下文。 3、由于 Struts 2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。 4、

SpringMVC+Spring事物失效问题

对着背影说爱祢 提交于 2019-11-29 03:56:18
1、spring扫描配置 springmvc扫描配置导致事物失效 一个项目中既有SpringMVC又有Spring 的时候,会发生事物失效问题 原因:使用的spring注解+springMVC注解,默认情况下spring应该先加载applicationContext.xml,之后再加载springMVC-servlet.xml而两者都配置了component-scan,spring是父容器springmvc是子容器,子容器扫描的配置范围不应该大于父容器的范围 在主容器中(applicationContext.xml),将Controller的注解排除掉 1 2 3 < context:component-scan base-package = "com" > < context:exclude-filter type = "annotation" expression = "org.springframework.stereotype.Controller" /> </ context:component-scan > 而在springMVC配置文件中将Service注解给去掉 1 2 3 4 < context:component-scan base-package = "com" > < context:include-filter type = "annotation"

SpringMVC源码(六)-@RequestBody和@ResponseBody

时间秒杀一切 提交于 2019-11-29 03:10:46
在SpringMVC的使用时,往往会用到@RequestBody和@ResponseBody两个注解,尤其是处理ajax请求必然要使用@ResponseBody注解。这两个注解对应着Controller方法的参数解析和返回值处理,开始时都是只知其用,不知原理。我们来看个例子。 @RequestMapping("/requestBody") public void requestBody(@RequestBody String body, Writer writer) throws IOException{ writer.write(body); } @RequestMapping(value="/responseBody", produces="application/json") @ResponseBody public Map<String, Object> responseBody(){ Map<String, Object> retMap = new HashMap<>(); retMap.put("param1", "abc"); return retMap; } 第一个requestBody请求,使用@RequestBody将HTTP请求体转换成String类型,第二个responseBody请求,将Map对象转换成json格式输出到HTTP响应中