前端控制器配置:第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 使用此种方式可以实现 RESTful风格的url 处理器映射器: 对标记@Controller类中标识有@RequestMapping的方法进行映射。在@RequestMapping里边定义映射的url。使用注解的映射器不用在xml中配置url和Handler的映射关系。 注解处理器适配器和注解的处理器映射器是配对使用。理解为不能使用非注解映射器进行映射。 <mvc:annotation-driven><mvc:annotation-driven>可以代替下边的配置: <!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--注解适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 实际开发使用:mvc:annotation-driven @Controller //代表是一个控制器 @RequestMapper('user') //作用类相当于命名空间 @RequestMapper("addUser") //请求方法路径 @RequestBody //该方法可以做出ajax的响应 将返回值的字符串,作为文本响应到客户端。 <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--配置jsp路径的前缀--> <property name="prefix" value="/WEB-INF/jsp"/> <!--配置jsp路径的后缀--> <property name="suffix" value=".jsp"/> </bean>二,两种跳转方式在Servlet和struts里面我们知道有两种跳转方法 1,请求转发 【项目内部,一次请求一次响应】 2,请求重定向【可以转发到外部的项目,两次请求两次响应】同理springmvc里面也提供了这两种方法 在Controller里面的返回值可以是String ModelAndView 如果是ModelAndView默认的就是请求转发 如 return "index.jsp" 这种方法是默认的请求转发 这个写法====return "forward:index.jsp" 如 return "redirect:index.jsp"这种方法是就重定向到index.jsp页面 响应json对象到客户端1,实现方法①,可以使用上面的方法组装一个json的字符串,让Handler里面的方法返回一个字符串就可以了②,springmvc里面内置了jackson的json生成和解析的方法,【但是要导jackson的包】中文乱码处理,在web.xml配置过滤器,CharacterEncodingFilter<!-- 进行springmvc的中文乱码处理 --> <filter> <filter-name>charset</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charset</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> 一,什么是RestFul 什么是rest?当我看到这个词的时候,我也不知道,我还以为是休息,最后查了一下,做web开发必须要知道rest 好了,就来简单介绍一下rest rest即Representational State Transfer,表现层状态转化 互联网上资源(是服务)细化理解为一个url,如果访问某个资源通过http url访问。 我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation) 表现层对用户展示的形式:html、json、xml、pdf、图片。。 由于http协议的限制,服务器和客户端不能实现主动通信,只能有客户端发起请求服务端响应请求,也就是将请求方法和参数都包含url, 使用rest和不使用rest的规则都是这样做的,但是rest对于url做了很好的规划,这个规则将方法和资源分开看起来做的很简单,但是却使我们更好理解了,上网无非就是对于网络资源的操作,网络资源在internet中直白点说就是url(个人理解)所以如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。 GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源\ log4j的配置 创建log4j.properties 修改mybtais.xml让mybtis使用log4j的日志输出 <settings> <setting name="logImpl" value="LOG4J"/> </settings>web.xml的配置什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。 用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。 orm工具的基本思想 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在Java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 Mapper :定义了对应的数据库操作的语句,完成对数据库的不同操作进隔离(区分) Namespace属性=“自定义”DML操作标签:isnert,update,delete 定义了数据库的具体dml操作。 id属性=”自定义”,用来namespace.id 获得对应的Statement对象(sql) parameterType=“Mapper接口中方法形参的完全限定名”DQL操作标签:select 定义具体的DQL操作resultType属性=“Mapper接口中方法的返回值的完全限定名,集合指定集合中元素的类型”1、面向接口编程:好处:扩展性好,分层开发中,上层不用管具体的实现,大家都遵循共同的标准,使得开发变得容易。规范性更好2、注解的实现:MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。使用逆向工程使用MyBatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官方文档说的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的1P、2P,基友搭配,效率翻倍。特性无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有Mybatis 原生的特性依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。缺点是无法作废已颁布的令牌/不易应对数据过期。可能习惯了redis保存session,使用shiro做登陆,突然使用JWT有点不适应,因为太简单了,我个人不是很建议使用,还是那句话,你的选择权有多大,你有学多少知识。概念介绍JWT消息构成一个token分3部分,按顺序为头部(header)其为载荷(payload)签证(signature)由三部分生成token3部分之间用“.”号做分隔。例如Jwt的头部承载两部分信息:声明类型,这里是jwt声明加密的算法 通常直接使用 HMAC SHA256JWT里验证和签名使用的算法,可选择下面的。互联网服务离不开用户认证1.向服务器发送用户名和密码2、服务器认证通过后,在当前会话中(session)里面保存相关数据,比如用户角色登录时间,等等3、服务器向用户返回一个session_id,写入用户的cookie4.用户随后的每一次请求,都会通过Cookie,将session_id传回服务器。5.服务器收到session_id,找到前期保存的数据,由此得到用户的身份.这种模式的问题在于,扩展性不好,单机当然没有问题,如果是服务器集群,或者是服务器跨域导向架构,就要求session数据共享,每台服务器读取session数据。举例来说,A网站和B网站是同一家公司的关联。现在要求,用户只在一家公司网站上登陆,再访问另一个网站就会自动登录,请问怎么实现。一种解决方案是session数据持久化,写入数据库或别的持久层。各服务收到请求后,都向持久层请求数据。这种方案的优点是结构清晰,缺点是工程量较大。另外持久层挂了,就会单点失败。另一种方案就是服务器索性不保存session数据。所有的数据都保存到客户端,每次请求都发回服务器。JWT就是这种方案的代表。用户与服务端通信的时候,都需要发回这个JSON对象,服务器完全只靠这个对象认定用户身份,为了防止用户篡改数据,服务器在生成对象的时候,会加上签名。JWT 的使用方式客户端收到服务器返回的JWT,可以存储到Cookie里面,也可以储存在 localStorage。此后,客户端每次与服务器之间通信,都要带上这个JWT。你可以把它放在Cookie里面自动发送,但是这样不能跨域。所以更好的做法是放在HTTP请求的头信息Authorization 字段里面。另外一种做法是,跨域的时候,JWT就放在POST请求数据里面。JWT几个特点JWT默认是不加密的,playload
来源:https://www.cnblogs.com/jacksonxiao/p/11728594.html