SpringMVCNote 一些概念 三层架构 一般情况下, 我们的开发架构都是基于两种 :C/S 架构 ( 客户端 / 服务器 ) 和 B/S 架构 ( 浏览器 / 服务器 ), 我们学习的 JavaEE 开发, 基本上都是基于 B/S 架构, 而在 B/S 架构中, 系统标准的三层架构包括 :

Size: px
Start display at page:

Download "SpringMVCNote 一些概念 三层架构 一般情况下, 我们的开发架构都是基于两种 :C/S 架构 ( 客户端 / 服务器 ) 和 B/S 架构 ( 浏览器 / 服务器 ), 我们学习的 JavaEE 开发, 基本上都是基于 B/S 架构, 而在 B/S 架构中, 系统标准的三层架构包括 :"

Transcription

1 SpringMVCNote 一些概念 三层架构 一般情况下, 我们的开发架构都是基于两种 :C/S 架构 ( 客户端 / 服务器 ) 和 B/S 架构 ( 浏览器 / 服务器 ), 我们学习的 JavaEE 开发, 基本上都是基于 B/S 架构, 而在 B/S 架构中, 系统标准的三层架构包括 : 表现层 业务层 持久层 这三层架构, 每一层各自负责服务的不同方面 表现层也就是我们常说的 web 层, 它负责接收客户端的请求, 向客户端响应结果, 通常客户端会使用 http 协议请求 web 层,web 层接收 http 请求并完成响应 它包括展示层和控制层, 控制层负责接收请求, 展示层负责结果的展示 它依赖于业务层, 接收到的客户端请求一般会调用业务层进行业务处理并将处理结果响应给客户端 表现层的设计一般都会采用 MVC 模型, 所以,MVC 只是表现层的设计模型, 与其它层无关 业务层也就是我们常说的 service 层, 它负责业务逻辑的处理,web 层依赖 service 层, 但是 service 层不依赖 web 层, 但是有时候,service 层在处理业务时, 会依赖持久层 在业务处理时如果涉及到数据的持久化, 则应该保证事务的一致性, 即将事务放在业务层来控制 持久层也就是我们常说的 dao 层, 它负责数据的持久化, 包括数据库和数据访问层, 数据库是对数据进行持久化的载体, 数据访问层是业务层和持久层交互的接口, 业务层主要通过数据访问层将数据持久化进数据库中 MVC 模型 MVC, 是 Model View Controller 的首字母缩写, 是一种用于设计创建 web 应用程序表现层的模式 Model( 模型 ): 通常指的是我们的数据模型, 一般用于封装数据 View( 视图 ): 通常指的是我们的 jsp 或 html 页面, 一般用于展示数据 Controller( 控制器 ): 是应用程序中处理用户交互的部分, 一般用于处理程序逻辑 SpringMVC 框架 SpringMVC 是一种基于 Java 实现的 MVC 设计模型的请求驱动类型的轻量级 web 框架, 属于 SpringFrameWork 框架的后续产品, 已经融合在了 Spring Web Flow 里面 Spring 框架提供了构建 web 应用程序的全功能 MVC 模块, 使用 Spring 可插入 MVC 架构, 从而使得在使用 Spring 进行 WEB 开发时, 可以选择使用 SpringMVC 框架或者集成其他的 MVC 开发框架, 如 Struts,Struts2 等 SpringMVC 已经成为了目前最为主流的 MVC 框架之一, 并且随着 Spring3.0 的发布, 全面超越了 Struts2 成为了最优秀的 MVC 框架 SpringMVC 框架的优势 1. 角色划分清晰 : 前端处理器 (DispatcherServlet) 请求到处理器映射 (HandlerMapping) 处理器适配器 (HandlerAdapter) 视图解析器 (ViewResolver) 处理器页面控制器 (Controller) 验证器 (Validator)

2 命令对象 (Command 请求参数绑定到的对象 ) 表单对象 (Form Object 提供给表单展示和提交的对象 ) 2. 分工明确, 扩展点灵活, 可以很容易扩展 3. 命令对象就是一个 POJO, 无需继承框架特定的 API, 可以使用命令对象直接作为业务对象 4. 和 Spring 其他框架无缝集成, 是其它 web 框架所不具备的 5. 可适配, 通过 HandlerAdapter 可以支持任意类作为处理器 6. 可定制性,HandlerMapping,ViewResolver 等能够很简单的进行定制 7. 功能很强大的数据验证 格式化和绑定机制 8. 利用 Spring 提供的 Mock 对象能够非常简单地进行 Web 层单元测试 9. 本地化 主题的解析的支持, 使我们更容易进行国际化和主题的切换 10. 强大的 JSP 标签库, 使 JSP 编写更加容易 11. 支持 RESTful 风格, 简单的文件上传, 支持约定大于配置的契约式编程, 支持纯注解配置 SpringMVC 框架和 Struts2 框架的对比 共同点 : 都是表现层框架, 也都是基于 MVC 模型编写的 底层都离不开原始的 ServletAPI 处理请求的机制都是一个核心控制器 区别 : SpringMVC 的入口是 Servlet, 而 Struts2 的是 Filter SpringMVC 是基于方法设计的, 而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类, 所以 SpringMVC 比 Struts2 稍微快一些 SpringMVC 使用更加简洁, 还支持 JSR303, 处理 ajax 更加方便 Struts2 的 OGNL 表达式使页面的开发效率相比 SpringMVC 更高些, 但执行效率并没有比 JSTL 提升, 尤其是 struts2 的表单标签, 远没有 html 执行效率高 JSR303 是一套 JavaBean 参数校验的标准, 它定义了很多常用的校验注解, 我们可以直接将这些注解加在我们 JavaBean 的属性上面, 就可以在需要校验的时候进行校验了 SpringMVC 入门 创建工程 创建一个 Maven-webapp 工程, 导入必需的 jar 包坐标 <project xmlns=" xmlns:xsi=" xsi:schemalocation=" <modelversion>4.0.0</modelversion> <groupid>top.aerlee</groupid> <artifactid>springmvc_start</artifactid> <packaging>war</packaging> <version>0.0.1-snapshot</version> <name>springmvc_start Maven Webapp</name> <url> <!-- 绑定 spring 版本 --> <properties> <spring.version>5.2.9.release</spring.version> </properties> <dependencies>

3 <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version</version> <groupid>javax.servlet</groupid> <artifactid>servlet-api</artifactid> <version>2.5</version> <scope>provided</scope> <groupid>javax.servlet.jsp</groupid> <artifactid>jsp-api</artifactid> <version>2.0</version> <scope>provided</scope> </dependencies> <build> <finalname>springmvc_start</finalname> </build> </project> 配置核心控制器 在 WEB-INF 文件夹中的 web.xml 配置文件中配置核心控制器 DispatcherServlet <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " > <web-app> <display-name>archetype Created Web Application</display-name> <!-- SpringMVC 的核心控制器 --> <servlet> <servlet-name>dispatcherservlet</servlet-name> <servletclass>org.springframework.web.servlet.dispatcherservlet</servlet-class> <!-- 配置 Servlet 的初始化参数, 读取 springmvc.xml 配置文件, 创建 spring 容器 --> <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置 servlet 启动时加载对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>

4 <servlet-name>dispatcherservlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 编写 Springmvc.xml 配置文件 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:mvc=" xmlns:context=" xmlns:xsi=" xsi:schemalocation=" <context:component-scan base-package="top.aerlee"></context:component-scan> <!-- 配置视图解析器 --> <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置 spring 开启注解 mvc 的支持 --> <mvc:annotation-driven/> </beans> 这里, 在配置视图解析器的时候, 如果是使用 html 开发的页面, 将 ".jsp" 改为 ".html 即可 " 编写控制器类 package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import public class HelloSpringMVC = "/hello") public String sayhello() { System.out.println("Hello World!!!");

5 编写展示页面 page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 入门程序 </title> </head> <body> <h3> 入门程序 </h3> <a href="hello"> 入门程序 </a> </body> 编写成功跳转页面 在 WEB-INF 文件夹下新建一个文件夹 pages, 在里面新建一个 jsp 文件, 命名为 Success.jsp page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 跳转成功 </title> </head> <body> <h1> 跳转成功...</h1> </body> </html> 当你点击了超链接发生了什么 首先, 当启动服务器的时候, 在 web.xml 配置文件中配置了 DispatcherServlet 核心控制器, 并且配置了在服务器启动时加载 DispatcherServlet 对象, 还配置了初始化参数, 加载解析 springmvc.xml 配置文件 在 springmvc.xml 配置文件中, 我们开启了注解扫描, 那么 HelloSpringMVC.class 注解, 也可以被扫描到 当你点击超链接时, 向服务器发送了一个请求, 这个请求会先到达 DispatcherServlet 核心控制器, 注解找到执行的具体方法 执行完方法后, 返回了一个 String 类型的值, 我们配置了视图解析器, 它会根据方法返回的值去指定目录下查找指定名称的 jsp 文件, 最后,Tomcat 这个注解的作用是建立请求 URL 和处理方法之间的对应关系的 它可以作用在类上和方法上 当作用在类上时, 表明第一级访问目录当作用在方法上时, 表明第二级访问目录如果在路径中不写 "/", 表明从应用的根目录开始页面中的请求路径, 如果不写 ${pagecontext.request.contextpath, 则路径上也不能写 "/", 而是直接写相对路径即可 属性 :

6 path: 指定请求路径的 url value: 跟 path 属性一样 method: 指定该方法的请求方式 headers: 发送的请求必须包含的请求头 params: 指定限制请求参数的条件, 它支持简单的表达式, 要求请求参数的 key 值和 value 值必须跟指定的一模一样 例如 : params={"username", 表明参数中必须包含 UserName params={"id!10", 表明请求参数中的 money 不能是 10 配置 Filter 在提交表单的时候, 如果含有中文, 那么就会出现乱码的情况, 在以前, 我们是通过配置 Filter 拦截器来保证编码一致, 现在在 SpringMVC 中, 配置将更加便捷 只需要在 web.xml 中添加一下代码即可 <!-- 配置拦截器, 解决中文乱码的问题 --> <filter> <filter-name>characterencodingfilter</filter-name> <filter-class>org.springframework.web.filter.characterencodingfilter</filterclass> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterencodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 配置静态资源不拦截 在之前我们配置了核心控制器 Servlet(DispatcherServlet), 它会拦截所有的资源, 这就导致一个问题, 当我们的项目中有 js, css 等静态资源时也会被拦截, 导致这些资源无法访问, 所以我们要手动配置对这些静态资源不拦截, 在 springmvc.xml 配置文件中配置 <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <mvc:resources location="/imgs/" mapping="/img/**"></mvc:resources> 这里使用了 <mvc:resources> 标签, 它的两个属性 : location: 表示指定 webapp 目录下某个包下的所有文件 mapping: 表示以 "/static" 开头的所有请求路径, 如 /css/a/b 请求参数的绑定 在表单提交时, 数据都是 Key=Value 形式的, 在之前使用 Servlet 时, 我们是通过 Request 对象的 getparameter() 方法来获取请求参数的 而在 SpringMVC 中的参数绑定过程是把表单提交的请求参数, 作为控制器中方法的参数进行绑定的, 它要求提交表单中的 name 属性和参数的名称是相同的 这种绑定方式支持的数据类型有 : 基本数据类型和字符串类型, 实体类型, 集合数据类型

7 基本数据类型和字符串类型 提交表单的 name 属性值和参数的名称必须是相同的, public String saveinfo(string name, int age) { System.out.println("name: " + name +" age : " + age); <form action="saveinfo" method="post"> 姓名 :<input type="text" name="name"><br/> 年龄 :<input type="text" name="age"><br/> <input type="submit" value="commit"><br/> </form> 实体类型 (JavaBean) 首先需要一个用于封装表单数据的实体类, 而要求是提交表单中的 name 属性值和实体类中的属性名称需要保持一致 如果一个实体类中包含另一个实体类的引用类型, 那么在写表单 name 属性的时候, 就要写成 对象. 属性 的形式 package top.aerlee.domain; public class Account { private Integer id; private String umoney; public Integer getid() { return id; public void setid(integer id) { this.id = id; public String getumoney() { return umoney; public void setumoney(string umoney) { this.umoney = public String tostring() { return "Account [id=" + id + ", umoney=" + umoney + "]"; package top.aerlee.domain; public class User { private String name; private String age; private Account account; public String getname() {

8 return name; public void setname(string name) { this.name = name; public String getage() { return age; public void setage(string age) { this.age = age; public Account getaccount() { return account; public void setaccount(account account) { this.account = public String tostring() { return "User [name=" + name + ", age=" + age + ", account=" + account + "]"; <form action="saveinfo" method="post"> 姓名 :<input type="text" name="name"><br/> 年龄 :<input type="text" name="age"><br/> 账户 :<input type="text" name="account.id"><br/> 余额 :<input type="text" name="account.umoney"><br/> <input type="submit" value="commit"><br/> public String saveinfo(user user) { System.out.println(user); 集合类型 使用集合类型数据封装的时候, 如果实体类中有集合的引用,SpringMVC 能依然能自动地为我们封装, 我们只需要在表单中提交的时候, 使用 集合 [index]. 属性 的形式作为 name 属性值即可 package top.aerlee.domain; import java.util.list; public class User { private String uname; private String uage; private List<Account> list; public List<Account> getlist() { return list;

9 public void setlist(list<account> list) { this.list = list; public String getuname() { return uname; public void setuname(string uname) { this.uname = uname; public String getuage() { return uage; public void setuage(string uage) { this.uage = public String tostring() { return "User [uname=" + uname + ", uage=" + uage + ", list=" + list + "]"; <form action="saveinfo" method="post"> 姓名 :<input type="text" name="name"><br/> 年龄 :<input type="text" name="age"><br/> 账户 :<input type="text" name="list[0].id"><br/> 余额 :<input type="text" name="list[0].umoney"><br/> 账户 :<input type="text" name="list[1].id"><br/> 余额 :<input type="text" name="list[1].umoney"><br/> <input type="submit" value="commit"><br/> </form> 自定义类型转换器 当我们在表单提交数据的时候, 全部都是字符串类型, 但是在前面的例子中, 我们定义了 int 类型的 age 类型, 数据竟然也是可以封装成功的, 这是因为 SpringMVC 框架内部会默认进行数据类型转换, 但是框架内只定义了一些常见的数据类型的自动转换, 如果想要自定义去转换一些数据类型, 那么就需要定义一个转换器类并且让这个转换器类实现 Converter 接口 例如, 在传入生日的数据时, 如果我们在实体类中定义的是 Date 类型, 那么自定义类型转换就会容易出现一些问题, 如果你输入 "2020/02/09" 会转换成功, 是可以封装成功的, 但是我们一般喜欢输入 " ", 这样的话会封装失败的 这个时候就需要我们去写一个自定义类型转换器 package top.aerlee.converter; import java.text.dateformat; import java.text.parseexception; import java.text.simpledateformat; import java.util.date; import org.springframework.core.convert.converter.converter; /* 自定义转换器类, 实现了 Converter 接口, 两个参数, 一个 * 是源类型, 一个是要转换的类型 */

10 public class TypeConverter implements Converter<String, Date>{ // 实现接口中的方法 public Date convert(string source) { // 判断传入的参数是否为空, 如果没有传入参数, 则报错 if(source == null source.length() == 0) { throw new RuntimeException(" 未检测到参数, 请传入参数 "); // 创建 SimpleDateFormat 类 DateFormat dformat = new SimpleDateFormat("yyyy-MM-dd"); try { // 根据自定义的结果转换类型 return dformat.parse(source); catch (ParseException e) { throw new RuntimeException(e); 接下来, 在 springmvc.xml 配置文件中配置类型转换器 <!-- 配置自定义数据类型转换器 --> <bean id="conversionservicefactorybean" class="org.springframework.context.support.conversionservicefactorybean"> <property name="converters"> <set> <bean class="top.aerlee.converter.typeconverter"></bean> </set> </property> </bean> <!-- 配置 spring 开启注解 mvc 的支持 --> <mvc:annotation-driven conversion-service="conversionservicefactorybean"/> 获取原生 ServletAPI 对象 在控制器方法参数中定义 HttpServletRequest 和 HttpServletResponse 等 Servlet 对象即可 用在控制器的参数前, 用于将请求中的指定名称的参数传递给控制器中的形参赋值, 这个注解用于表单提交的 name 属性值跟控制器参数名称不一样的情况下 属性 value: 请求参数中的名称 ;required: 请求参数中是否必须提供此参数, 默认是 true, 必须提供参数 package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import public class Anno

11 public String required = false)boolean marray) { System.out.println("name: " + name + " age : " + age 用于获取请求体内容, 但是 get 请求不适用, 因为 get 请求没有请求体 属性 required: 是否必须要求请求体, 默认是 true package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestbody; import public class Anno public String testrequestbody(@requestbody String body) { 用于绑定 URL 中的占位符, 例如 url 中的 /search/{id, 这个 "{id" 就是 url 占位符, 注解就是用于获取到这个占位符上的值 属性 value: 用于指定 URL 中占位符的名称 ; required: 指定是否必须提供占位符 Spring 3.0 之后加入了对 url 占位符的支持, 是 SpringMVC 支持 RESTful 风格 URL 的一个重要标志 package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.pathvariable; import public class Anno = "/testpathvariable/{id") public String testpathvariable(@pathvariable(value = "id", required = false) String id) { System.out.println(" 有占位符 " + public String testpathvariable2(string id) { System.out.println(" 没有占位符 ");

12 <a href="testpathvariable/10000"> 有占位符 </a> <a href="testpathvariable/"> 不提供占位符 </a> <a href="testpathvariable"> 没有占位符 </a> RESTful 相关知识 : 我们在用浏览器 form 表单发送请求的时候, 只支持 POST 和 GET 请求,RESTful 风格中的 DELETE,PUT, 等请求是不支持的, 但是 Spring 3.0 添加了一个过滤器 HiddentHttpMethodFilter, 可以将浏览器的请求改为指定的请求方式, 然后再发送给我们的控制器方法, 使得它支持所需要的请求方式 参考资料 :SpringMVC- 基于 HiddentHttpMethodFilter 用于获取请求消息头, 在实际开发中一般不怎么使用 属性 value: 提供消息头名称 ;required: 指定是否必须要有此消息头 package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestheader; import public class Anno public String testrequestheader(@requestheader(value="accept") String header) { System.out.println("Headers:"); System.out.println(header); <a 用于将指定 cookie 名称的值传入控制器方法参数中 属性 value: 指定 cookie 的名称 ;required: 指定是否必须要由此 cookie package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.cookievalue; import public class Anno

13 public String String Cookie) { System.out.println("Cookies:"); System.out.println(Cookie); <a 这是一个在 SpringMVC 4.3 版本之后加入的一个新注解, 它可以用于修饰方法和参数, 当它出现在方法上时, 表示当前方法会在控制器的方法执行之前先执行, 可以修饰有返回值的方法, 也可以修饰没有返回值的方法 ; 当它出现在参数上的时候, 表示获取指定的数据给参数赋值 属性 value: 用于获取数据的 key,key 可以是 POJO 的属性名称, 也可以是 Map 结构的 key 一个典型的应用场景 : 当表单提交了一部分数据的时候, 保证不在表单中的数据依然使用原来的数据, 这在修改数据的时候比较常用 出现在有返回值的方法上 package top.aerlee.sayhello; import java.util.date; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import public class Anno { // 根据表单提交的信息, public String testmodelattribute(girl girl, String uname, int uage) { girl.setname(uname); girl.setage(uage); System.out.println(girl); // 放在方法上, 该方法会在控制器方法执行之前先执行 这里模拟了从数据 // public Girl dofirst() { Girl girl = new Girl(); girl.setname("zero"); girl.setage(26); girl.setbirthday(new Date()); return girl;

14 <form action="testmodelattribute" method="post"> 姓名 :<input type="text" name="uname"><br/> 年龄 :<input type="text" name="uage"><br/> <input type="submit" value="commit"><br/> </form> 出现在没有注解的方法上 package top.aerlee.sayhello; import java.util.date; import java.util.map; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import public class Anno public String testmodelattribute2(@modelattribute("girl1")girl girl, String uname, int uage) { girl.setname(uname); girl.setage(uage); public void dofirstwithoutreturn(map<string, Girl> map) { Girl girl = new Girl(); girl.setname("zero"); girl.setage(26); girl.setbirthday(new Date()); map.put("girl1", girl); <form action="testmodelattribute2" method="post"> 姓名 :<input type="text" name="uname"><br/> 年龄 :<input type="text" name="uage"><br/> <input type="submit" value="commit"><br/> 用于多次执行控制器方法间的参数共享 属性 value: 用于指定存入的属性名称 ;type: 用于指定存入数据类型 package top.aerlee.sayhello; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.ui.modelmap;

15 import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.sessionattributes; public class SessionController public String savesessionattributes(model model) { // 向 session 域中存入值 model.addattribute("username","zero"); public String getsessionattributes(modelmap modelmap) { // 向 session 域中存入值 String usernamestring = (String)modelmap.getAttribute("username"); public String clssessionattributes(sessionstatus status) { // 清空 session status.setcomplete(); System.out.println(" 清空了 session"); <a href="savesessionattributes">savesessionattributes</a> <br/> <a href="getsessionattributes">getsessionattributes</a> <br/> <a href="clssessionattributes">clssessionattributes</a> <br/> 响应数据和结果视图 String 类型的返回值 控制器中的方法返回字符串可以指定逻辑视图名称, 再通过视图解析器解析为物理视图地址 在前面的案例中我们 return "Success" 的写法就是这一种, 这就是跳转到 /WEB-INF/pages/Success.jsp 页面上的意思 package top.aerlee.controller; import org.springframework.stereotype.controller; public class ResponseController { /** * 测试返回字符串的方式

16 public String testrespondstring() { System.out.println(" 执行 testrespondstring 方法..."); Void 类型的返回值 使用原始 Servlet API 中的页面转发和重定向功能来实现页面的跳转, 可以实现 Void 返回值的控制器方法 使用页面转发实现功能 /** * 测试 Void 返回类型, 即没有返回值, 使用 request 对象的转发功能 request response public void testrespondvoid(httpservletrequest request, HttpServletResponse response) { try { System.out.println("testRespondVoid 方法执行了..."); request.getrequestdispatcher("/web- INF/pages/Success.jsp").forward(request, response); catch (ServletException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); 使用页面重定向实现功能 /** * 测试 Void 返回类型, 即没有返回值, 使用页面重定向实现功能 request response public void testrespondvoid2(httpservletrequest request, HttpServletResponse response) { try { response.sendredirect(request.getcontextpath() + "/index.jsp"); System.out.println("testRespondVoid2 方法执行了..."); catch (IOException e) { e.printstacktrace(); 注意, WEB-INF 目录中的页面不能被外部直接访问, 而重定向是发送两次请求, 所以如果我们将页 面重定向到 /WEB-INF 目录下, 是无法访问成功的

17 也可以通过 response 直接指定响应结果 /** * 测试 Void 返回类型, 即没有返回值 request response public void testrespondvoid3(httpservletrequest request, HttpServletResponse response) { System.out.println("testRespondVoid3 方法执行了..."); response.setcharacterencoding("utf-8"); response.setcontenttype("text/html;charset=utf-8"); try { response.getwriter().write(" 你好, 世界 "); catch (IOException e) { e.printstacktrace(); ModelAndView 类型的返回值 ModelAndView 是 SpringMVC 中提供的一个对象, 该对象可以用作控制器方法返回值, 这个对象中有两个方法 : addobject(string attributename, Object attributevalue) 和 setviewname(string viewname) 在控制器方法中我们可以将信息和视图页面的信息存入该对象中, 然后将这个对象返回, 也可以达到页面跳转的功能 /** * 返回 ModelAndView 对象 public ModelAndView testmodelandview() { System.out.println("testModelAndView 方法执行了..."); Girl girl = new Girl(); girl.setname("zero"); girl.setage(24); girl.setbirthday(new Date()); ModelAndView mview = new ModelAndView(); mview.addobject("girl", girl); mview.setviewname("success"); return mview; 基于关键字的转发和重定向 控制器中的方法如果提供了 String 类型的返回值后, 默认是请求转发 使用 forward 关键字实现转发

18 /** * 使用 forward 关键字实现转发 public String testforward() { System.out.println("testForward 方法执行了..."); return "forward:/web-inf/pages/success.jsp"; 使用请求转发, 可以转发到页面, 也可以转发到其它的控制器方法 使用 redirect 关键字实现重定向 /** * 使用 redirect 关键字实现重定向 public String testredirect() { System.out.println("testRedirect 方法执行了..."); return "redirect:/response/testmodelandview"; 注解响应 Json 数据 ( 重要 ) 一般我们使用 jquery 来实现 ajax 请求, 所以在这里要导入 jquery min.js 文件到 webapp 下的 js 文件夹中, 并且在页面文件中引用它 首先在页面中新建一个按钮来发送 ajax 请求, 并编写 script 代码 <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 入门程序 </title> <script src="js/jquery min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $("#btn-ajax").click(function(){ $.ajax({ url:"response/testjson", contenttype:"application/json;charset=utf-8", data:'{"name":"vincent","age":25,"birthday":" "', datatype:"json", type:"post", success:function(data){ alert(data.name); alert(data.age); alert(data.birthday); ); );

19 ); </script> </head> <body> <h3> 入门程序 </h3> <hr/> <button id="btn-ajax"> 点击发送 ajax 请求 </button> </body> </html> 后台测试一下能否拿到数据 /** * 接收 ajax 请求发送的 json 数据 girl public void testjson(@requestbody String body) { System.out.println("testJson 方法执行了..."); System.out.println(body); 在 SpringMVC 中, 可以将接收到的 json 数据自动封装为 Javabean 对象, 只需要导入几个 jar 包 <groupid>com.fasterxml.jackson.core</groupid> <artifactid>jackson-databind</artifactid> <version>2.9.8</version> <groupid>com.fasterxml.jackson.core</groupid> <artifactid>jackson-core</artifactid> <version>2.9.8</version> <groupid>com.fasterxml.jackson.core</groupid> <artifactid>jackson-annotations</artifactid> <version>2.9.8</version> 导入以上 jar 包后, 注解将 json 数据封装 /** * 将 json 封装为 Javabean 对象 girl public void testjson(@requestbody Girl girl) { System.out.println("testJson 方法执行了..."); System.out.println(girl); 注解将对象转换成 json 数据并返回

20 /** * girl Girl testjson(@requestbody Girl girl) { System.out.println("testJson 方法执行了..."); System.out.println(girl); girl.setname("zero"); return girl; 文件上传 原始上传的方式 如果不使用 SpringMVC 提供的文件上传功能, 我们只好自己写代码来完成这个功能, 首先需要导入两个重要的坐标 <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version>1.4</version> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>2.8.0</version> 编写一个文件上传的页面 <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>insert title here</title> </head> <body> <h1> 选择文件上传 </h1> <form action="upload/originupload" method="post" enctype="multipart/form-data"> 选择文件 : <input type="file" name="upload"/><br/> <input type="submit" value=" 点击上传 "/> </form> </body> </html> package top.aerlee.controller; import java.io.file;

21 import java.util.list; import java.util.uuid; import javax.servlet.http.httpservletrequest; import org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.fileuploadexception; import org.apache.commons.fileupload.disk.diskfileitemfactory; import org.apache.commons.fileupload.servlet.servletfileupload; import org.springframework.stereotype.controller; public class FileUploadController { /** * 使用原始的方法实现文件上传的代码 request public String originupload(httpservletrequest request) { // 获取上传文件的存储路径 String pathstring = request.getsession().getservletcontext().getrealpath("/uploads"); // 打印一下路径, 免得待会儿找不到 lol System.out.println(pathString); // 获取一个文件对象 File file = new File(pathString); // 判断如果文件夹不存在, 则新建一个文件夹 if(!file.exists()) { file.mkdirs(); // new 一个磁盘文件项工厂对象 DiskFileItemFactory factory = new DiskFileItemFactory(); // new 一个 ServletFileUpload 对象, 在该对象的构造函数中传入一个磁盘文件项工厂对象 ServletFileUpload fileupload = new ServletFileUpload(factory); List<FileItem> items = null; try { // 解析 request 对象 items = fileupload.parserequest(request); catch (FileUploadException e) { e.printstacktrace(); // 遍历解析结果, 一个 List 集合 for(fileitem fileitem : items) { // 判断是不是普通的 form 表单 if(fileitem.isformfield()) { System.out.println(" 普通的 form 表单项 "); else { // 如果不是普通表单项内容, 则是上传的文件, 获取文件名称 String filenamestring = fileitem.getname(); // 使用 UUID 生成随机文件名 String uuidstring = UUID.randomUUID().toString().replace("-", ""); filenamestring = uuidstring + filenamestring; try { // 将磁盘文件项写入磁盘 fileitem.write(new File(file,filenameString)); // 删除临时文件

22 fileitem.delete(); catch (Exception e) { e.printstacktrace(); // 跳转上传成功页面 使用 SpringMVC 提供的方式 SpringMVC 提供的方式相较于前面我们自己写的代码, 最大的不同是 SpringMVC 框架中提供了一个文件 解析器, 只需要配置这个解析器, 我们就不在需要手动去解析 request 对象了 <!-- 配置文件解析器对象, 要求 id 名称必须是 multipartresolver --> <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <property name="maxuploadsize" value=" "/> </bean> /** * 使用 SpringMVC 提供的方法实现文件上传的代码 request public String springmvcupload(httpservletrequest request, MultipartFile upload) { // 获取上传文件的存储路径 String pathstring = request.getsession().getservletcontext().getrealpath("/uploads"); // 打印一下路径, 免得待会儿找不到 lol System.out.println(pathString); // 获取一个文件对象 File file = new File(pathString); // 判断如果文件夹不存在, 则新建一个文件夹 if(!file.exists()) { file.mkdirs(); // 获取上传的原始文件的文件名 String filenamestring = upload.getoriginalfilename(); // 使用 UUID 生成随机文件名 String uuidstring = UUID.randomUUID().toString().replace("-", ""); filenamestring = uuidstring + filenamestring; try { // 开始上传操作 upload.transferto(new File(file, filenamestring)); catch (IllegalStateException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); // 跳转上传成功页面

23 跨服务器的文件上传 在实际的开发中, 我们会将不同的业务放在不同的服务器上面, 这样做是为了将业务分散管理, 使得各个服务器能够各司其职, 从而提高项目运行效率 在这里我们演示将图片存储放到一个专门的服务器上面, 通过在 eclipse 中部署两个 Tomcat 服务器的方式来演示 在部署一个图片服务器的时候, 需要对 Tomcat 服务器的 web.xml 配置文件做一点配置, 就是在 <servlet> 标签中添加允许写入的操作 <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.defaultservlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <!-- 新增这一项 --> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 在应用服务器上面, 导入 jersey 坐标 <groupid>com.sun.jersey</groupid> <artifactid>jersey-core</artifactid> <version>1.19.1</version> <groupid>com.sun.jersey</groupid> <artifactid>jersey-client</artifactid> <version>1.19.1</version> 编写控制器方法 /** * 使用 SpringMVC 提供的方法实现文件上传的代码 request public String remoteupload(multipartfile upload) { // 手写图片服务器存储路径, 要保证那个服务器有这个文件夹哦 String path = " // 获取上传的原始文件的文件名 String filenamestring = upload.getoriginalfilename(); // 使用 UUID 生成随机文件名 String uuidstring = UUID.randomUUID().toString().replace("-", "");

24 filenamestring = uuidstring + filenamestring; // 获取 Client 对象 Client client = Client.create(); // 获取 WebResource 对象 WebResource webresource = client.resource(path + filenamestring); try { // 上传内容 webresource.put(upload.getbytes()); catch (UniformInterfaceException e) { e.printstacktrace(); catch (ClientHandlerException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); // 跳转上传成功页面 个人理解, 这样做很危险啊, 自己写 demo 玩玩可以, 可千万别就这样整到服务器上去 在 SpringMVC 中处理异常 在之前, 加入我们的程序在运行时遇到了问题, 那么就会将错误信息直接打印在页面上, 显得非常的不友好 我们在项目中对异常的处理, 其实就是捕获这些异常, 然后跳转到指定的显示错误信息的页面, 这些页面上使用一般人能看得懂的语言或者图形告诉用户发生了什么错误, 而不是一下子打印一堆错误日志, 让用户感觉很友好 我们在 SpringMVC 中对异常的处理思路是, 如果控制器中遇到了异常, 直接向上抛出, 最终由 DispatcherServlet 调用异常处理器进行异常的处理 首先自定义一个异常类继承 Exception 即可 package top.aerlee.exception; public class ProceedingExcpetion extends Exception{ /** * 这是一个自定义的异常类, 它包含一个成员, 用于封装自定义异常提示信息 */ private static final long serialversionuid = L; String msg; public String getmsg() { return msg; public void setmsg(string msg) { this.msg = msg; public ProceedingExcpetion(String message) { this.msg = message; 自定义一个异常处理器, 它需要实现 HandlerExceptionResolver 接口 package top.aerlee.resolver;

25 import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.handlerexceptionresolver; import org.springframework.web.servlet.modelandview; import top.aerlee.exception.proceedingexcpetion; public class ExceptionResover implements HandlerExceptionResolver { public ModelAndView resolveexception(httpservletrequest request, HttpServletResponse response, Object handler, Exception ex) { ex.printstacktrace(); ProceedingExcpetion proceedingexcpetion = null; if(ex instanceof ProceedingExcpetion) { proceedingexcpetion = (ProceedingExcpetion)ex; else { proceedingexcpetion = new ProceedingExcpetion(" 遇到了未知错误, 请联系管理员 "); ModelAndView mview = new ModelAndView(); mview.addobject("msg", proceedingexcpetion.getmsg()); mview.setviewname("error"); return mview; 在 springmvc.xml 配置文件中配置异常处理器 <!-- 配置自定义异常处理器 --> <bean id="handlerexceptionresolver" class="top.aerlee.resolver.exceptionresover"> </bean> 写一个异常跳转页面 <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8" iselignored="false"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 遇到了错误 </title> </head> <body> <h3> 非常遗憾, 遇到了错误 </h3> ${msg </body> </html> 这样, 在控制器方法中我们就可以抓一下这个错误, 将它向上抛出即可 /** * 演示异常处理 ProceedingExcpetion */

26 @RequestMapping("/testRespondString") public String testrespondstring() throws ProceedingExcpetion { System.out.println(" 执行 testrespondstring 方法..."); try { System.out.println(" 执行 testrespondstring 方法..."); // 手动异常 int a = 1/0; catch (Exception e) { throw new ProceedingExcpetion(" 访问遇到了异常, 请稍后再来..."); 拦截器 SpringMVC 中的拦截器类似于 Servlet 的 Filter, 用于对处理器进行一些预处理和后处理, 用户使用拦截器可以自己定义一些拦截器来实现特定的功能 拦截器与过滤器两者相似但是还是有区别的 : 过滤器是 Servlet 规范中的一部分, 任何 Java Web 工程都可以使用, 而拦截器是 SpringMVC 框架的, 只有使用了 SpringMVC 框架的工程才能使用 ; 过滤器如果在 url-pattern 中配置了 /* 后, 可以对所有的资源拦截, 而拦截器只会拦截控制器方法, 其他资源不会拦截 如果我们要自定义拦截器, 那么我们的自定义拦截器必须要实现 HandlerInterceptor 接口 package top.aerlee.interceptor; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview; public class UserInterceptor implements HandlerInterceptor{ public boolean prehandle(httpservletrequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(" 拦截器方法 前..."); return true; public void posthandle(httpservletrequest request, HttpServletResponse response, Object handler, ModelAndView modelandview) throws Exception { System.out.println(" 拦截器方法 后..."); public void aftercompletion(httpservletrequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(" 拦截器方法 最后..."); 然后在 springmvc.xml 中配置拦截器

27 <!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 配置拦谁 --> <mvc:mapping path="/user/**"/> <bean class="top.aerlee.interceptor.userinterceptor"></bean> <!-- 配置不拦谁 <mvc:exclude-mapping path=""/> --> </mvc:interceptor> </mvc:interceptors> 做完以上步骤, 拦截器就可以发挥作用了 注意, 拦截器可以配置多个, 形成拦截器链, 作用顺序根据配置的顺序依次执行 SSM 整合 首先新建工程, 搭建基本的环境 整合的思路先搭建整合的环境先把 Spring 的配置搭建完成再使用 Spring 整合 SpringMVC 框架最后使用 Spring 整合 MyBatis 框架 导入所需要的坐标 <project xmlns=" xmlns:xsi=" xsi:schemalocation=" <modelversion>4.0.0</modelversion> <groupid>top.aerlee</groupid> <artifactid>ssmtemplate</artifactid> <packaging>pom</packaging> <version>0.0.1-snapshot</version> <name>ssmtemplate Maven Webapp</name> <url> <properties> <spring.version>5.2.9.release</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <shiro.version>1.2.3</shiro.version> <mysql.version>5.1.12</mysql.version> <mybatis.version>3.4.5</mybatis.version> </properties> <dependencies> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.13</version> <scope>test</scope> <!-- Spring 框架 -->

28 <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-aop</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version</version> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version</version> <groupid>org.aspectj</groupid> <artifactid>aspectjweaver</artifactid> <version>1.8.7</version> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>${spring.version</version> <!-- c3p0 数据库连接池 --> <groupid>c3p0</groupid> <artifactid>c3p0</artifactid> <version> </version> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>${mysql.version</version> <groupid>javax.servlet</groupid> <artifactid>servlet-api</artifactid> <version>2.5</version> <scope>provided</scope> <groupid>javax.servlet.jsp</groupid> <artifactid>jsp-api</artifactid> <version>2.0</version> <scope>provided</scope>

29 <groupid>jstl</groupid> <artifactid>jstl</artifactid> <version>1.2</version> <!-- log start --> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>${log4j.version</version> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version>${slf4j.version</version> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>${slf4j.version</version> <!-- log end --> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>${mybatis.version</version> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.3.0</version> </dependencies> <build> <finalname>ssmtemplate</finalname> <pluginmanagement> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.2</version> <configuration> <source>11</source> <target>11</target> <encoding>utf-8</encoding> <showwarnings>true</showwarnings> </configuration> </plugin> </plugins> </pluginmanagement> </build> </project>

30 配置 Spring 框架 我们的整合方案是用 Spring 框架去整合 SpringMVC 和 Mybatis 两个框架, 所以我们首先要配置的是 Spring 框架 在 /main/resources 包下新建 Spring 的配置文件 : applicationcontext.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xmlns:aop=" xmlns:tx=" xsi:schemalocation=" <!-- 开启注解扫描 --> <context:component-scan base-package="top.aerlee"> <!--Spring 扫描的时候, 设置不需要扫描 Controller 注解 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller"/> </context:component-scan> </beans> 在配置这一步的时候, 需要写一个实体类, 业务层接口及实现类, 测试 Spring 单独能不能工作 package top.aerlee.test; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.test.context.contextconfiguration; import org.springframework.test.context.junit4.springjunit4classrunner; import public class TestService private IGirlService public void testfindall() { service.findall();

31 配置 SpringMVC 框架 编辑 WEB-INF 目录下的 web.xml 配置文件 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " > <web-app> <display-name>archetype Created Web Application</display-name> <!-- SpringMVC 的核心控制器 --> <servlet> <servlet-name>dispatcherservlet</servlet-name> <servletclass>org.springframework.web.servlet.dispatcherservlet</servlet-class> <!-- 配置 Servlet 的初始化参数, 读取 springmvc.xml 配置文件, 创建 spring 容器 --> <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置 servlet 启动时加载对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherservlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置拦截器, 解决中文乱码的问题 --> <filter> <filter-name>characterencodingfilter</filter-name> <filterclass>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>characterencodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> 然后配置类路径下 springmvc.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:mvc=" xmlns:context=" xmlns:xsi=" xsi:schemalocation="

32 <!-- 开启自动扫描 --> <context:component-scan base-package="top.aerlee"> <context:include-filter type="annotation" expression="org.springframework.stereotype.controller"></context:include-filter> </context:component-scan> <!-- 配置视图解析器 --> <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置静态资源不过滤 --> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <mvc:resources location="/imgs/" mapping="/img/**"></mvc:resources> <!-- 配置 spring 开启注解 mvc 的支持 --> <mvc:annotation-driven/> </beans> 搭建完 SpringMVC 的环境, 写一个 Controller 类来测试其能否正常运行 package top.aerlee.controller; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import top.aerlee.domain.girl; public class GirlController private IGirlService public String findallstring() { System.out.println(" 控制器查找所有用户 "); girlservice.findall(); Spring 框架整合 SpringMVC 框架 当确定 Spring 框架和 SpringMVC 框架各自都能够顺利的运行, 这个时候就需要将 SpringMVC 框架整合进 Spring 框架中

33 这里说的整合, 目的是在 Controller 中能够成功调用 service 对象中的方法 我们的做法是在 web.xml 中 配置一个监听器 ContextLoaderListener 监听器, 这个监听器它只能加载 WEB-INF 目录下的 applicationcontext.xml 配置文件 <!-- 配置 Spring 的监听器 --> <listener> <listenerclass>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <!-- 配置加载类路径的配置文件 --> <context-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:applicationcontext.xml</param-value> </context-param> 这个监听器配置完成后, 如果要在 Controller 中使用 service 对象, 则直接在 Controller 中注入 service 对 象即可 package top.aerlee.controller; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import top.aerlee.domain.girl; public class GirlController private IGirlService public String findallstring() { System.out.println(" 控制器查找所有用户 "); Girl girl = new Girl(); girl.setid(1); girl.setname("zero"); girl.setphone(14523); girlservice.saveinfo(girl); 将项目部署到服务器中, 进行测试 配置 Mybatis 框架 首先创建对应的数据库和对应的实体类, 这里就不写实体类代码了

34 -- 创建数据库 create database girlsinfo; -- 创建表 create table girls( id int primary key auto_increment, name varchar(16), age int, address varchar(32) ); 编写 dao 接口 package top.aerlee.dao; import java.util.list; import org.apache.ibatis.annotations.select; import top.aerlee.domain.girl; public interface IGirlDao { // * from girls") List<Girl> findall(); // 根据用户 id * from girls where id = #{id") Girl findbyid(integer id); // into girls(name,age,address) values(#{name,#{age,# {address)") void saveinfo(girl girl); 编写 Mybatis 配置文件 IMapper.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//dtd Config 3.0//EN" " <configuration> <environments default="mysql"> <environment id="mysql"> <transactionmanager type="jdbc"></transactionmanager> <datasource type="pooled"> <property name="driver" value="com.mysql.jdbc.driver"/> <property name="url" value="jdbc:mysql://localhost:3306/girlsinfo"/> <property name="username" value="vincent"/> <property name="password" value="12345"/> </datasource> </environment> </environments> <!-- 配置注解的方式 --> <mappers> <mapper class="top.aerlee.dao.igirldao"/>

35 </mappers> </configuration> 编写测试方法 package top.aerlee.test; import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionfactorybuilder; import org.junit.test; import top.aerlee.dao.igirldao; import top.aerlee.domain.girl; public class TestMybatis public void testsave() throws Exception { // 获取输入流获取配置文件 InputStream inputstream = Resources.getResourceAsStream("IMapper.xml"); // 获得工厂对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); // 获取 SqlSession 对象 SqlSession session = factory.opensession(); // 获取代理对象 IGirlDao dao = session.getmapper(igirldao.class); // 假装一个要保存的对象 Girl girl = new Girl(); girl.setname("vincent"); girl.setage(25); girl.setaddress("ningxia"); // 调用保存方法 dao.saveinfo(girl); // 提交事务 session.commit(); // 关闭资源 session.close(); inputstream.close(); Spring 框架整合 Mybatis 框架 我们的做法是将前面 IMapper.xml 配置文件中的内容配置到 Spring 配置文件中去 配置 SqlSessionFactory 对象 <!-- 配置 SqlSessionFactory 对象 --> <bean id="factory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource"></property> </bean> 配置数据库连接池

36 <!-- 配置数据库连接池 --> <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource"> <property name="driverclass" value="com.mysql.jdbc.driver"></property> <property name="jdbcurl" value="jdbc:mysql://localhost:3306/girlsinfo"> </property> <property name="user" value="vincent"></property> <property name="password" value="12345"></property> </bean> 配置 Mapper 扫描器 <!-- 配置 Mapper 扫描器 --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <property name="basepackage" value="top.aerlee.dao"/> </bean> 配置 Spring 声明式事务管理 <!-- 配置事务 --> <bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"></property> </bean> <!-- 配置事务通知 --> <tx:advice id="txadvice" transaction-manager="txmanager"> <tx:attributes> <tx:method name="*" propagation="required" read-only="false"/> <tx:method name="find*" propagation="supports" read-only="true"/> </tx:attributes> </tx:advice> 配置 AOP <!-- 配置 aop --> <aop:config> <!-- 配置切入点表达式 --> <aop:pointcut expression="execution(* top.aerlee.service.impl.*.*(..))" id="pt1"/> <!-- 建立通知和切入点表达式的关系 --> <aop:advisor advice-ref="txadvice" pointcut-ref="pt1"/> </aop:config> 给 Dao 注解, 然后在 service 中注入 dao 对象 编写代码测试 package top.aerlee.dao; import java.util.list; import org.apache.ibatis.annotations.select; import org.springframework.stereotype.repository; import top.aerlee.domain.girl; // public interface IGirlDao {

37 // * from girls") List<Girl> findall(); // 根据用户 id * from girls where id = #{id") Girl findbyid(integer id); // into girls(name,age,address) values(#{name,#{age,# {address)") void saveinfo(girl girl); package top.aerlee.service.impl; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; import top.aerlee.dao.igirldao; import top.aerlee.domain.girl; import top.aerlee.service.igirlservice; // public class GirlServiceImpl implements IGirlService private IGirlDao dao; public void saveinfo(girl girl) { dao.saveinfo(girl); package top.aerlee.controller; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import top.aerlee.domain.girl; import top.aerlee.service.igirlservice; public class GirlController private IGirlService public String saveinfo(girl girl) { System.out.println(" 保存用戶信息 "); girlservice.saveinfo(girl);

38 page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 首页 </title> </head> <body> <!-- 展现页面 --> <form action="girl/savegirl" method="post"> <br/> 姓名 :<input type="text" name="name"><br/> 年齡 :<input type="text" name="age"><br/> 地址 :<input type="text" name="address"><br/> <input type="submit" value=" 保存数据 "><br/> </form> </body> </html> 查询数据库查看运行结果 MariaDB [girlsinfo]> select * from girls; id name age address Zero 23 Ningxia 2 Vincent 25 Ningxia 3 Sharon 34 The US 4 Jack Sorora 21 The Mars 5 Arsher 24 The Jupiter 6 Dondon 24 The Jupiter 7 Kaka Biu 25 The Jupiter rows in set (0.000 sec)

39

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject("exception", writer.tostring()); mv.setviewname("error"); return

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject(exception, writer.tostring()); mv.setviewname(error); return 本章学习目标 小风 Java 实战系列教程 SpringMVC 异常处理 SpringMVC 文件上传 SpringMVC 处理 JSON 格式数据 SpringMVC 拦截器 SpringMVC 对 restful 风格的支持 1. SpringMVC 异常处理 1.1. @ExceptionHandler 注解处理异常 @ExceptionHandler 该注解使用在异常处理方法上面 1.1.1.

More information

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) 09 (File Processes) 9-1 9-2 (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) Java Servlet 9-1 Servlet (File Processes) Client Servlet Servlet Java Java (Stream)

More information

将 MD5 的工具类拷贝到项目中 二 微服务模块的搭建 我们将权限的查询放到一个单独的模块中, 这个模块提供接口供给消费者远程调用 (RPC), 这次范例是微服开发的雏形, 在以后你使用 springcloud 的时候会使用到今天的概念 1 使用 maven 创建新的模块 (microboot-sh

将 MD5 的工具类拷贝到项目中 二 微服务模块的搭建 我们将权限的查询放到一个单独的模块中, 这个模块提供接口供给消费者远程调用 (RPC), 这次范例是微服开发的雏形, 在以后你使用 springcloud 的时候会使用到今天的概念 1 使用 maven 创建新的模块 (microboot-sh Shiro 的环境搭建 一 公共模块的搭建 在实际的开发中, 一个项目可能会分多个模块进行实际的开发, 但是这些模块需要使用一些公 共的操作, 那么这些公共的操作不应该在每个模块中重新定义, 而是将这些公共的操作专门定 义在一个公共的模块之后哦在模块中的 pom 文件里面引入这个公共的模块, 比如说 vo 类就是 一个公共的模块, 所以定义到公共类中 1. 定义公共模块 (microboot-shiro-api)maven

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

1.2. Sql 映射配置 小风 Java 实战系列教程 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" "

1.2. Sql 映射配置 小风 Java 实战系列教程 <?xml version=1.0 encoding=utf-8?> <!DOCTYPE mapper PUBLIC -//mybatis.org//dtd Mapper 3.0//EN 本章学习目标 小风 Java 实战系列教程 CRM 开发环境搭建 客户列表展示 客户分页显示 客户添加 客户信息修改回显 客户信息更新保存 客户信息删除 1. 客户列表展示 1.1. Mapper 接口 package cn.sm1234.dao; import java.util.list; import cn.sm1234.domain.customer; public interface CustomerMapper

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

本章学习目标 小风 Java 实战系列教程 Shiro 核心功能 Shiro 的 Web 集成 Spring 与 Shiro 整合 SpringBoot 整合 Shiro 1. Shiro 核心功能 1.1. RBAC 模型 在 RBAC 的模型, 涉及到三个关键的元素 : 1) 用户 : 系统的使

本章学习目标 小风 Java 实战系列教程 Shiro 核心功能 Shiro 的 Web 集成 Spring 与 Shiro 整合 SpringBoot 整合 Shiro 1. Shiro 核心功能 1.1. RBAC 模型 在 RBAC 的模型, 涉及到三个关键的元素 : 1) 用户 : 系统的使 本章学习目标 Shiro 核心功能 Shiro 的 Web 集成 Spring 与 Shiro 整合 SpringBoot 整合 Shiro 1. Shiro 核心功能 1.1. RBAC 模型 在 RBAC 的模型, 涉及到三个关键的元素 : 1) 用户 : 系统的使用用户 ( 登录用户 ) 2) 角色 : 拥有相同的权限的用户 3) 权限 : 系统可以被用户操作的元素 ( 例如 : 系统菜单,

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

Microsoft Word - 扉页.doc

Microsoft Word - 扉页.doc 第 5 章 chapter 5 数据验证 学习目的与要求本章重点讲解 Spring MVC 框架的输入验证体系 通过本章的学习, 理解输入验证的流程, 能够利用 Spring 的自带验证框架和 JSR 303(Java 验证规范 ) 对数据进行验证 本章主要内容 数据验证概述 Spring 验证 JSR 303 验证所有用户的输入一般都是随意的, 为了保证数据的合法性, 数据验证是所有 Web 应用必须处理的问题

More information

untitled

untitled PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问 内置对象的取得和多人开发 一 内置对象的取得 在使用的 servlet 的时候可以通过 HttpServletResquest 获取到一些内置对象, 但是在 struts2 中为了方便取得内置对象, 专门提供了一个 ServletActionContext 这个类取得取得内置对象, 观察如下方法 public static javax.servlet.jsp.pagecontext() 取得 pagecontext

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

设计模式 Design Patterns

设计模式 Design Patterns Spring 与 Struts Hibernate 的集成 丁勇 Email:18442056@QQ.com 学习目标 掌握 Spring 与 Struts 的集成 掌握 Spring 与 Hibernate 的集成 学会使用 Spring 实现声明式事务 Spring 与 Hibernate 集成 使用 Spring 简化 Hibernate 编程 使现有使现有 Java Java EE EE 技术更易用

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

Untitled

Untitled Spring 4.0.0 spring-framework-reference QQ 413615763 Weibo le Email not-three@foxmail.com 2013.12.16 2.2 2013.12.17 2.3 : 2013.12.18 2.3 : 2013.12.18 2.3 :- Commons Logging Spring Spring Spring IoC StrutsHibernate

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

<!-- import outer proper

<!-- import outer proper 概述 基于 Spring 支持的客户端编程, 包括发送方客户端 接收方客户端 发送方客户端代码 :jms-producer 接收方客户端代码 :jms-consumer 发送方客户端 这里基于 demo 进行说明 这个 demo 将往 example.queue 和 example.topic 各发一条信息 文件目录结构 1. src/main/resources/ 2. ---- jndi.properties

More information

untitled

untitled 653 JAVA 2008 11 Institution of Software Engineer... 2... 4... 4... 5... 5... 8... 8... 8... 8... 8... 9... 9... 9... 11... 13... 13... 13... 13... 15... 15... 15... 15... 16... 16... 17... 17... 17...

More information

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ 第 四 章 Filter( 过 滤 器 ) 样 题 A 卷 一 选 择 题 ( 每 小 题 2 分, 共 20 分 ) 1 下 面 选 项 中, 用 于 实 现 初 始 化 过 滤 器 的 方 法 是 ( ) A init(filterconfig filterconfig) B dofilter(servletrequest req,servletresponse resp,filterchain

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

第03章 控制反转(Spring IoC)

第03章  控制反转(Spring IoC) 3 Spring IoC GoF Design Patterns: Elements of Reusable Object-Oriented Software Programming to an Interface not an Implementation Java Java Java GoF Service Locator IoC IoC Spring IoC 3.1 IoC IoC IoC Dependency

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

resp.getwriter().print(j + "*" + i + "=" + j * i+" "); resp.getwriter().print("<br/>"); protected void dopost(httpservletrequest req, HttpServletRespo

resp.getwriter().print(j + * + i + = + j * i+ ); resp.getwriter().print(<br/>); protected void dopost(httpservletrequest req, HttpServletRespo 第三章补充案例 案例 3-1 HttpServlet 一 案例描述 1 考核知识点名称 :HttpServlet 编号 : 2 练习目标 掌握 HttpServlet 的 doget() 方法和 dopost() 方法 3 需求分析由于大多数 Web 应用都是通过 HTTP 协议和客户端进行交互, 因此, 在 Servlet 接口中, 提供了 一个抽象类 javax.servlet.http.httpservlet,

More information

Servlet

Servlet Servlet Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 Huihoo - Enterprise Open Source http://www.huihoo.com 2 GET POST Huihoo

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

计算机软件技术专业教学计划

计算机软件技术专业教学计划 计 算 机 软 件 技 术 专 业 人 才 培 养 方 案 ( 服 务 外 包 方 向 ) 专 业 大 类 名 称 ( 代 码 ):++(++) 专 业 类 名 称 ( 代 码 ):++++++(++++) 专 业 名 称 ( 代 码 ):+++++++(++++++) 修 业 年 限 : 三 年, 全 日 制 招 生 对 象 : 三 年 制 普 通 高 中 及 对 口 中 职 专 业 毕 业 生

More information

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX BPMX3 技 术 白 皮 书 业 务 流 程 开 发 平 台 介 绍 目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX3... 5 2.2.1 BPMX3

More information

Stateless Session Beans(无状态bean)的学习

Stateless Session Beans(无状态bean)的学习 一 Stateless Session Beans( 无状态 bean) 的学习 第一步 : 要定义一个会话 Bean, 首先需要定义一个包含他所有业务方法的接口 这个接口不需要任何注释, 就像普通的 java 接口那样定义 调用 EJB 的客户端通过使用这个接口引用从 EJB 容器得到的会话 Bean 对象 stub 接口的定义如下: HelloWorld.java package com.foshanshop.ejb3;

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 掌握 Model I 体系结构 掌握 Model II 体系结构 掌握 MVC 应用程序 Model I 体系结构 6 1 Model I 体系结构结合使用 JSP 页面和 Bean 来开发 Web 应用程序 应用服务器 请求 JSP 页面 响应 Bean 数据库服务器 Model I 体系结构 6 2 Model I 体系结构用于开发简单的应用程序

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

Microsoft Word - json入门.doc

Microsoft Word - json入门.doc Json 入门 送给亲爱的女朋友, 祝她天天快乐 作者 :hlz QQ:81452743 MSN/Email:hulizhong2008@163.com json 入门 (1) json 是 JavaScript Object Notation 的简称 ; 在 web 系统开发中与 AJAX 相结合用的比较多 在 ajax 中数据传输有 2 中方式 : 文本类型, 常用 responsetext 属性类获取

More information

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt 2004 Marty Hall 服务器响应的生成 : HTTP 状态代码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

TopTest_Adminstrator.doc

TopTest_Adminstrator.doc 壹 前 言... 3 貳 系 統 簡 介... 4 一 TKB multimedia Top-Test 系 統 架 構...4 1. 使 用 者 介 面 層 (Presentation tier)...5 2. 商 業 邏 輯 層 (business logic tier)...5 3. 資 料 服 務 層 (data services tier)...5 二 TKB Multimedia Top-Test

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型 文 章 编 号 :1007-757X(2012)1-0036-04 领 域 驱 动 模 型 的 WEB 软 件 系 统 设 计 研 究 摘 要 : J2EE 3 JDK1.7 Tomcat WEB 关 键 词 : 中 图 分 类 号 :TP311 文 献 标 志 码 :A 0 引 言 Web 软 件 系 统 的 分 层 结 构 典 型 的 J2EE 软 件 系 统 开 发 方 法 分 为 三 层 结

More information

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID 58 2016. 14 * LireSolr LireSolr CEDD Ajax CSpace LireSolr CEDD Abstract In order to offer better image support services it is necessary to extend the image retrieval function of our institutional repository.

More information

jsp

jsp JSP Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 JSP JSP JSP JSP MVC Huihoo - Enterprise Open Source http://www.huihoo.com 2

More information

IoC容器和Dependency Injection模式.doc

IoC容器和Dependency Injection模式.doc IoC Dependency Injection /Martin Fowler / Java Inversion of Control IoC Dependency Injection Service Locator Java J2EE open source J2EE J2EE web PicoContainer Spring Java Java OO.NET service component

More information

Flume-ng与Mysql整合开发

Flume-ng与Mysql整合开发 Flume-ng 与 Mysql 整合开发 我们知道,Flume 可以和许多的系统进行整合, 包括了 Hadoop Spark Kafka Hbase 等等 ; 当然, 强悍的 Flume 也是可以和 Mysql 进行整合, 将分析好的日志存储到 Mysql( 当然, 你也可以存放到 pg oracle 等等关系型数据库 ) 不过我这里想多说一些 :Flume 是分布式收集日志的系统 ; 既然都分布式了,

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt 2004 Marty Hall servlet 基础 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK 2 l 跨裝置網頁設計 Android ios Windows 8 BlackBerry OS Android HTML 5 HTML 5 HTML 4.01 HTML 5 CSS 3 CSS 3 CSS 2.01 CSS 3 2D/3D PC JavaScript

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

RUN_PC連載_8_.doc

RUN_PC連載_8_.doc PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow

More information

Struts2自定义类型转换.doc

Struts2自定义类型转换.doc Struts2 自定义类型转换 原理 struts2 的自定义类型转换机制为复杂类型的输入输出处理提供了便捷.struts2 已经为我们提供了几乎所有的 primitive 类型以及常用类型 ( 如 Date) 的类型转换器, 我们也可以为我们自定义类添加自定义类型转化器. struts2 为我们提供了一个类型转化器的入口 : ognl.defaulttypeconverter, 或继承 org.apache.struts2.util.strutstypeconverter,

More information

使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK

使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK 使用 XFire 与 Spring 开发 Web Service 1 使用 XFire 与 Spring 开发 Web Service 王啸宇信易诚 wangxiao1@mail.yuchengtech.com 目录 实现功能与特点... 2 运行环境... 2 开发平台... 2 实施步骤... 2 概述... 2 新建 Java Project... 3 新建 WTP 动态 WEB 工程...

More information

RUN_PC連載_10_.doc

RUN_PC連載_10_.doc PowerBuilder 8 (10) Jaguar CTS ASP Jaguar CTS PowerDynamo Jaguar CTS Microsoft ASP (Active Server Pages) ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar Server ASP

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 理解 Struts 框架的工作原理 掌握使用 Struts 框架开发 Web 应用的基本步骤 熟悉 MyEclipse 对 Struts 开发的支持 Web 框架事实标准 : Web 框架的事实标准 http://struts.apache.org Java EE 主流技术趋势图 主流 Web 框架趋势图 使用 Struts 实现加法器 使用开发的

More information

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有 本章学习目标 小风 Java 实战系列教程 Spring 框架简介 SpringIOC 的概念和作用 工厂模式设计一个简单的 IOC 容器 SpringIOC 的 XML 方式 HelloWorld SpringIOC 的 XML 方式创建对象配置细节 SpringIOC 的 XML 方式依赖注入 SpringIOC 的注解方式 Spring 整合 Junit 简化测试类编写 1. Spring 框架简介

More information

Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 Spring 的核心容器 Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 依赖注入的概念 了解 Spring 的概念和优点 理解 Spring 中的 IoC 和 DI 思想 掌握 ApplicationContext 容器的

Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 Spring 的核心容器 Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 依赖注入的概念 了解 Spring 的概念和优点 理解 Spring 中的 IoC 和 DI 思想 掌握 ApplicationContext 容器的 Java EE 企业级应用开发教程 (Spring+Spring MVC+MyBatis) 课程教学大纲 ( 课程英文名称 ) 课程编号 : XXXX 学分 : 5 学分学时 : 90 学时 ( 其中 : 讲课学时 :55 上机学时 :35) 先修课程 :Java 基础案例教程 Java Web 程序设计任务教程 MySQL 数据库入门适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一

More information

1. 2. Flex Adobe 3.

1. 2. Flex Adobe 3. 1. 2. Flex Adobe 3. Flex Adobe Flex Flex Web Flex Flex Flex Adobe Flash Player 9 /rich Internet applications/ria Flex 1. 2. 3. 4. 5. 6. SWF Flash Player Flex 1. Flex framework Adobe Flex 2 framework RIA

More information

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址   access_token=access_token (http 停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 https://webapi.zego.im/cgi/stop-mix? access_token=access_token (https://webapi.zego.im/cgi/stop-mix? access_token=access_token)

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 70-536Chinese(C++) Title : TS:MS.NET Framework 2.0-Application Develop Foundation Version : DEMO 1 / 10 1. Exception A. Data B. Message C.

More information

OSWorkflow Documentation

OSWorkflow Documentation OSWorkflow Documentation Update Time: 05/09/15 OSWorkflow Java workflow engine API 理 flow 行 XML 來 流 Database UI 不 流 GUI Designer end user 行 JSP+Servlet 行 OSWorkflow 2.8 說 2.7 2.7 了 OSWorkflow library library

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

untitled

untitled 1 .NET sln csproj dll cs aspx 說 料 料 利 來 料 ( 來 ) 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Click 滑 料 Response 列 料 Response HttpResponse 類 Write 料 Redirect URL Response.Write("!!

More information

服务框架 HSF 使用与配置 一江更新时间 : 目录 HSF 常用 OPS 和开发工具介绍... 1 HSF 的使用和配置... 2 下载和安装 HSF... 2 服务开发与部署... 5 服务查询 服务调用 HSFUNIT 测试包的使用 HSF

服务框架 HSF 使用与配置 一江更新时间 : 目录 HSF 常用 OPS 和开发工具介绍... 1 HSF 的使用和配置... 2 下载和安装 HSF... 2 服务开发与部署... 5 服务查询 服务调用 HSFUNIT 测试包的使用 HSF 服务框架 HSF 使用与配置 一江更新时间 :2011-7-20 目录 HSF 常用 OPS 和开发工具介绍... 1 HSF 的使用和配置... 2 下载和安装 HSF... 2 服务开发与部署... 5 服务查询... 10 服务调用... 11 HSFUNIT 测试包的使用... 13 HSF Jetty 插件的使用... 15 路由规则和限流规则的介绍... 21 HSF 常用 OPS 和开发工具介绍

More information

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 友乾营 报表的 SQL 植入风险 规避风险 : 让你的报表变的安全起来 SQL 植入的概念 恶意的 SQL 归根结底 : 执行了不该允许执行的 SQL 命令, 达到非法的目的 常见案例 骗过登录验证非法获取账号信息篡改 删除数据 为什么存在 SQL 植入 植入原理 如何攻击 特殊的输入参数 未处理特殊字符 -- # 数据库配置不合理 植入原理 : 案例 1, 特殊输入参数 union or 猜表名

More information

Spring3.x开发入门

Spring3.x开发入门 Spring Bean 管理 Spring 的工厂类 课程安排 Spring 的 Bean 管理 (XML 方式 ) Spring 的属性注入 (XML 方式 ) Spring 的 Bean 管理 ( 注解方式 ) Spring 的属性注入 ( 注解方式 ) Spring 的工厂类 Spring 的 Bean 管理 (XML 方式 ) 三种实例化 Bean 的方式 使用类构造器实例化 ( 默认无参数

More information

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5 網頁程式設計 HTML JavaScript CSS HTML JavaScript CSS HTML 5 JavaScript JavaScript HTML 5 API CSS CSS Part 1 HTML HTML 5 API HTML 5 Apple QuickTime Adobe Flash RealPlayer Ajax XMLHttpRequest HTML 4.01 HTML 5

More information

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas Contents 目錄 chapter 1 1-1... 1-2 1-2... 1-3 HTML5... 1-3... 1-5 1-3... 1-9 Web Storage... 1-9... 1-10 1-4 HTML5... 1-14... 1-14... 1-15 HTML5... 1-15... 1-15... 1-16 1-5... 1-18 Apps... 1-18 HTML5 Cache

More information

untitled

untitled ArcGIS Server Web services Web services Application Web services Web Catalog ArcGIS Server Web services 6-2 Web services? Internet (SOAP) :, : Credit card authentication, shopping carts GIS:, locator services,

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

05 01 accordion UI containers 03 Accordion accordion UI accordion 54 jquery UI plugin Accordion 05 01 accordion UI containers 03 Accordion accordion UI accordion 54 05 jquery UI plugin 3-1

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

1 请求跳转及转发 1.1 举例 : 页面流转 可以在首页选择自己喜欢的颜色, 进入对应的页面 选择绿色, 会进入绿色界面 : 选择红色, 会进入红色界面 :

1 请求跳转及转发 1.1 举例 : 页面流转 可以在首页选择自己喜欢的颜色, 进入对应的页面 选择绿色, 会进入绿色界面 : 选择红色, 会进入红色界面 : 1 请求跳转及转发 1.1 举例 : 页面流转 可以在首页选择自己喜欢的颜色, 进入对应的页面 选择绿色, 会进入绿色界面 : 选择红色, 会进入红色界面 : 这里我们会看到四个页面 : 1. index.jsp 中选择颜色, 点击按钮后提交到 test.jsp 2. test.jsp 取得用户选择的颜色, 根据颜色值显示对应的页面 3. 如果选择了红色, 就显示 red.jsp 4. 如果选择了绿色,

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

第一章 章标题-F2 上空24,下空24

第一章 章标题-F2 上空24,下空24 Web 9 XML.NET Web Web Service Web Service Web Service Web Service Web Service ASP.NET Session Application SOAP Web Service 9.1 Web Web.NET Web Service Web SOAP Simple Object Access Protocol 9.1.1 Web Web

More information

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466> packages 3-31 PART 3-31 03-03 ASP.NET ASP.N MVC ASP.NET ASP.N MVC 4 ASP.NET ASP.NE MVC Entity Entity Framework Code First 2 TIPS Visual Studio 20NuGetEntity NuGetEntity Framework5.0 CHAPTER 03 59 3-3-1

More information