技术标签: spring java web # Spring 全家桶学习 SpringMVC
解决 maven 构建项目慢的问题
name: archetypeCatalog ,value: internal
name:archetypeCatalog
value:: internal
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
<!-- 指定 Spring 版本号 -->
<spring.version>5.2.3.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- spring start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 使用注解开发时,要告知 spring在创建容器时要扫描的包-->
<context:component-scan base-package="cn.gorit"></context:component-scan>
<!-- 视图解析器-->
<bean id="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 开启 SpringMVC 注解的支持 -->
<mvc:annotation-driven/>
</beans>
用户请求到达前端控制器,它就相当于 mvc 中的 c,dispatcherServlet 是整个流程控制中心,由它调用其他组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了 不同的映射器实现不同的映射方式,例如配置文件方式,实现接口方式,注解方式等
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet把用户请求转发送到 Handler。由 Handler 对具体用户请求进行处理
通过对 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器执行。
类比插座 和 接口
View Resolver 负责将处理结果生成 View 视图, View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展现给用户
SpringMVC 框架提供很多 View 视图类型的支持,包括 jstlView,freemarkerView,pdfView等,我们最常用的视图就是 jsp。
一般情况下需要通过页面标签或页面模板技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发页面
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置前端控制器,使用 SpringMVC-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<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>
<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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
作用:建立请求 URL 和处理请求方法之间对应的关系。
请求参数绑定说明
基本数据类型和字符串类型
实体类型(JavaBean)
提交表单的 name 和 javaBean 中的属性名称要一致
如果一个 JavaBean类中包含其他的引用类型,那么表单的 name 属性需要编写成:对象 属性:
eg:address name
给集合属性数据封装
请求参数中乱码解决(解决 post 请求乱码)
// 获取原生的 Servlet API
@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response) {
System.out.println("执行了");
System.out.println(request.getRemoteUser());
return "success";
}
作用:
把请求中指定名称的参数给控制器中的形参赋值
属性:
value:请求参数的名称
required:请求参数中是否必须提交此参数
// jsp 代码
<a href="anno/testRequestParam?name=haha">常用注解</a>
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping(value = "/testRequestParam")
public String testAnno(@RequestParam(name="name") String username) {
// 这样强制要求必须传 name,否则就把报错
System.out.println("执行了");
System.out.println("username:"+username);
return "success";
}
}
https://www.bilibili.com/video/BV1Sb411s7qa?p=18
作用:
用于获取请求体内容,直接使用得到的是 key=value&key1=value1 … 结构的数据
不适合 get 请求方法
赋值
value:请求参数的名称
required:是否必须有请求体,默认为:true,当取值为 get 时,请求方法会报错,如果
// jsp 代码
<form action="anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username"><br>
用户年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* 获取到请求体的内容
* */
@RequestMapping(value = "/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("执行了。。。");
System.out.println(body);
return "success";
}
}
- 作用:拥有绑定 url 中的占位符的,例如:url中有/delete/{id},id 是占位符
- 属性:
- value:指定 url 中的占位符名称
- Restful 风格的 URL
- 请求路径一样,可以根据不同的请求方式执行后台的不同方法
- restful 风格的 URL 优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
// jsp 代码
<a href="anno/testPathVariable/10">PathVariable</a>
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* PathVariable 注解
* */
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id) {
System.out.println("执行了。。。");
System.out.println(id);
return "success";
}
}
作用:
用于获取请求头消息
属性:
value:提供消息头名称
value:请求参数的名称
required:是否必须有此请求头
// jsp 代码
<a href="anno/testRequestHeader">RequestHeader</a>
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* 获取请求头的值
* */
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println("执行了。。。");
System.out.println(header);
return "success";
}
}
作用:
用于把指定 cookie 名称的值传入控制器方法参数
属性:
value:指定 cookie 的名称
required:是否必须有此 cookie
// jsp 代码
<a href="anno/testCookieValue">CookieValue</a>
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* 获取 Cookie 的值
* */
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println("执行了。。。");
System.out.println(cookieValue);
return "success";
}
}
// jsp 代码
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="username"><br>
用户年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* testModelAttribute 注解
* */
@RequestMapping("/testModelAttribute")
public String testModelAttribute() {
System.out.println("testModelAttribute 执行了。。。");
return "success";
}
// 该方法会先执行
@ModelAttribute
public void showUser(String username, int age) {
System.out.println("showUser 执行了");
System.out.println(username);
System.out.println(age);
// 这里就可以进行数据库的一些操作了
}
}
作用:
用于多次执行控制器方法间的参数共享。
属性:
value:用于指定存入的属性的名称
type:用于指定存入的数据类型
// jsp 代码
<a href="anno/testSessionAttributes">SessionAttributes</a>
// java 代码 存到 request 域当中
@Controller
@RequestMapping("/anno")
public class AnnoController {
/**
* testSessionAttributes 注解
* */
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes 执行了。。。");
// 底层会存储到 request 域对象中
model.addAttribute("msg","World");
return "success";
}
}
// 存到 session 对象中
@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {
"msg"}) // 把 msg=World 存入到 session域中 (新增)
public class AnnoController {
/**
* testSessionAttributes 注解
* */
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes 执行了。。。");
// 底层会存储到 request 域对象中
model.addAttribute("msg","World");
return "success";
}
}
// pages/success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>跳转成功了</h3>
${
requestScope}
${
sessionScope}
</body>
</html>
显示 request 域
显示 session 域
文章浏览阅读6.8k次。ARM LINUX 外部RTC实时时钟驱动移植(RX8025) Author: chad Mail: [email protected]开发板:AT91SAM9260 内核版本:linux-2.6.30解决办法如下: 第一步:修改board-sam9260ek.c文件修改/arch/arm/match-at91/board-sam9260ek.c,添加如下代码: 在ek_board__rx8025驱动
文章浏览阅读355次。进入场景后看到一串PHP源代码根据这源代码的提示,很容易想到使用GET方法来传递what参数以此来满足条件语句。所以在地址栏里面构造如下:回车之后,what参数的值就传过去了,flag也就出来了本题总结:难度不大,提示的已经很明确了。本题就是专门训练GET方法的。只要明白GET方法在url里面的呈现形式就可以很容易的做出这道题来。..._bugku get题
文章浏览阅读788次。CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,传送门:https://checkio.org/,本博客主要记录自己在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。题目描述【Three Words】:给定一个字符串,判断其是否为连续的三个单词(单词非单个字母),单词与数字之..._python判three words
文章浏览阅读3.3k次,点赞2次,收藏4次。场景Fabricjs一个简单强大的Canvas绘图库快速入门:Fabricjs一个简单强大的Canvas绘图库快速入门_BADAO_LIUMANG_QIZHI的博客-程序员宅基地在上面的基础上,可以实现在画布上添加对象,如果需要组合对象,并设置组合对象的功能属性可以使用new fabric.Group():接受两个参数。注:博客:BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_程序员宅基地-C#,SpringBoot,架构之路领域博主关注公众号霸道的程序猿获_fabric.group
文章浏览阅读3.9k次。JDBC 核心技术解析文章目录JDBC 核心技术解析Apache-DBUtils实现CRUD操作1. Apache-DBUtils简介2. 主要API的使用2.1 DbUtils2.2 QueryRunner类2.3 ResultSetHandler接口及实现类Apache-DBUtils实现CRUD操作1. Apache-DBUtils简介commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大_如何使用apache dbutils连接数据库
文章浏览阅读192次。1. future1. future1.1. future相关结构1.2. async相关结构1.3. packaged_task 相关结构1.4. promise相关结构1.5. 参考资料1.1. future相关结构Member functionsfundescpub/priv(constructor)constructs the future object(public member function)(destructor)destruc_std::future
文章浏览阅读1.1k次。配置数据库连接池插件,此处以Druid为例,还需要配置数据库访问插件,即ActiveRecord插件,用于建立数据库中Table和Java Bean的mapping映射:public void configPlugin(Plugins me) { // 配置 druid 数据库连接池插件 DruidPlugin druidPlugin = new DruidPlu..._jfinal 数据库连接池插件
文章浏览阅读648次。Postfixpostfix是WietseVenema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是WietseVenema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真是一个让人吃惊的数字。Post..._postfix 身份验证
文章浏览阅读3.2k次。政府工程项目完工、交工和竣工的区别完工:承建方按合同完成项目建设将设计文件转化为工程的工作。交工:工程通过业主组织的交工验收,承建方与业主进行工程交接、开始运营进入试运行阶段。竣工:一般是指正常运营一段时间(3年)后,工程通过业务验收合格,业务支付保留我。交工验收主要工作为:检查合同执行情况,评价工程质量,对参建单位进行初步评价。竣工验收主要工作为:对工程质量、参建单位进行综合评价,并对工程项目建设对行整体综合评价,如果项目建设目标是否达到预期效果。..._项目竣工概念
文章浏览阅读1.3w次,点赞6次,收藏61次。当你的才华还撑不起你的野心时那你就应该静下心来学习目录清理windows入侵痕迹0x01 前言了解为什么需要清除入侵痕迹?一、设置跳板二、必不可少的跳板三、代理服务器简介1)http代理服务器2)Sock5代理服务器3)VPN代理服务器四、使用Tor隐身了解需要删除哪些日志?1...._当入侵主机后,攻击者清楚自己在系统中留下一些记录,现在需要对这些记录进行痕迹清
文章浏览阅读290次。光学时钟“升天”助力卫星精准导航光学时钟“升天”助力卫星精准导航科学家们对于精准时间的追求从未停止,目前世界上最准的时钟当属光学时钟。虽然早有研究人员提出将光学时钟应用到卫星上,以提升卫星定位的准确程度,但如何保持光学时钟在太空中与地球上一样稳定发挥,一直是争论的焦点。1小时由60分钟组成,1分钟由60秒组成,那么1秒钟有多长?它是时钟上秒针的一格,也是电子时钟上数字的跳跃,但是1秒钟到底是多久,恐怕并没有多少人知道,也没有多少人关心。但科学家们对于精准时间的追求从未停止,目前世界上最准的时钟当属光_飞秒光学频率梳
文章浏览阅读830次。转载自:http://hbiao68.iteye.com/blog/2213168文章参考http://www.bubuko.com/infodetail-666582.htmlhttp://v3.bootcss.com/javascript/#modals Html代码 div class="modal fade" id="sqh_m_modal-dialog 浏览器居中 backdrop : 'static