spring-mvc (二)

1. 在springmvc中使用servlet对象

控制器方法上加入request, response, session类型的参数
springmvc框架会把这些对象准备好作为方法参数传入

@RequestMapping("/s1")
public String s1(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
}

还可以用@CookieValue注解获取cookie的值

@RequestMapping("/s2")
// @CookieValue("user") 含义是到请求中找一个名为user 的cookie
public String s2(@CookieValue("user") String abc ) {
	System.out.println("user cookie的值是: " + abc);
	return "hello";
}

 

 

2. spring-mvc中的重定向

在视图名前面添加 `redirect:`,这时候springmvc就会把字符串当做重定向进行跳转,而不是再通过视图解析器进行解析

1) 使用session传值

        优点:信息安全、对象类型可以复杂
        缺点:会占用服务器内存

@RequestMapping("/c1")
public String c1(HttpSession session) {
	System.out.println("c1....");
	// name=zhangsan 希望name传递给c2使用
	session.setAttribute("name", "zhangsan");
	return "redirect:/c2";
}

@RequestMapping("/c2")
public String c2(HttpSession session) {
	System.out.println("c2....");
	System.out.println("接收name:" +session.getAttribute("name"));
	session.removeAttribute("name"); // 用完后及时清除
	return "hello";
}

 

 

2) 利用重定向地址后跟请求参数的方式

        优点:不会占服务器内存,可以向站外地址传递参数
        缺点:数据有大小限制、有安全问题、不能是复杂类型

@RequestMapping("/c1")
public String c1() {
	System.out.println("c1....");
	// name=zhangsan 希望name传递给c2使用
	return "redirect:/c2?name="+"zhangsan";
}

@RequestMapping("/c2")
public String c2(String name) {
	System.out.println("c2....");
	System.out.println("接收name:" + name);
	return "hello";
}

 

 

3) springmvc提供的方法

@RequestMapping("/c1")
// RedirectAttributes 由springmvc提供,专门在重定向时传参
public String c1(RedirectAttributes ra) {
	System.out.println("c1....");
//        ra.addAttribute("name", "张三"); // 使用了方法2
	ra.addFlashAttribute("name","张三"); // 使用了方法1
	return "redirect:/c2";
}

@RequestMapping("/c2")
public String c2(@ModelAttribute("name") String aaa) {
	System.out.println("c2....");
	System.out.println("接收name:" + aaa);
	return "hello";
}

 

 

3. 管理异常

1) 传统方式管理异常
// 自己用try -catch 管理异常

@RequestMapping("/exception1")
public String e1() {
	try {
		int i = 1 / 0;
		return "hello";
	} catch (Exception e) {
		return "error";
	}
}

 

2) 使用@ExceptionHander
    把它加在要捕获异常的方法之上

@ExceptionHandler(ArithmeticException.class)
public String catch1(ArithmeticException e) {
	System.out.println("catch1: "+e.getMessage());
	return "error";
}

 

注意:
         1) 该方法只能捕获本控制器类出现的异常
         2) 匹配异常类型时,会匹配一个最接近的异常类型
         3) 一般来说,要做全局的异常处理 : 
                                  @ControllerAdvice  全局控制器的通知类
                                  加在通知类上,这样当某个控制器出现异常时,先找本类的异常处理器,
                                  如果找不到,那么再到通知类中找全局的异常处理器

 

 

4. 文件上传

1) 先创建jsp

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="text" name="username">
    <input type="file" name="abc">
    <input type="submit" value="提交">
</form>

 

2) 创建类

@RequestMapping("/upload")
public String upload(String username, MultipartFile abc) throws IOException {
	System.out.println("原始名:"+abc.getOriginalFilename());
	System.out.println("大小:"+abc.getSize());
	System.out.println("类型:"+abc.getContentType());
	// 把上传的文件保存到哪里
	abc.transferTo(new File("d:\\"+abc.getOriginalFilename()));
	return "hello";
}

 

3) 在spring.xml配置上传文件的解析器

<bean id="multipartResolver"
	  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize" value="1000000"/>
</bean>

 

 

5. 与缓存的结合

1) 配置spring.xml

<!-- 缓存的管理器 -->
<bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager">
	<!-- 管理缓存区域 -->
	<property name="cacheNames">
		<list>
			<value>user</value>
			<value>order</value>
			<value>product</value>
		</list>
	</property>
</bean>

<!-- 启用缓存相关的注解及支持 
	@Cacheable
	@CacheEvict
	@CachePut
-->
<cache:annotation-driven/>

 

 

2) 使用注解
@Cacheable(cacheNames = "缓存名字")  加在方法上
检查缓存内容
如果缓存中没有,就把方法结果存入缓存,
如果缓存中有,就直接返回内容,不会执行方法

@CacheEvict(cacheNames = "缓存名字", allEntries = true) 加在方法上
让某个缓存的内容失效

@CachePut(cacheNames = "user") 加在方法上
总会执行方法,用方法的返回结果更新缓存

 


6. ajax

几个技术的统称, 实现了页面的局部刷新
a    asynchronous (异步的请求 xhr)
j      javascript 
a    and
x    xml (返回响应的格式xml, json)


1) 创建XMLHttpRequest
    var xhr = new XMLHttpRequest();
 


2) 发送请求
    xhr.open("get|post|put|delete", 请求url地址,  true|false);
    xhr.send(); // 真正发送请求

同步请求和异步请求
                        open("请求方式", "url", 异步or同步)
                        true ==> 异步请求, send() 不会等待响应返回,请求发送后立刻结束
                        false ==> 同步请求 , send()会一直等待到响应返回后,send才会结束

 

 

3) 接收响应
    xhr.responseText

异步请求下接收响应: 
       // 响应返回时会触发onload时间
         xhr.onload = function(){
             xhr.responseText
         }
       // 旧的响应事件
        xhr.onreadystatechange() {
             if(xhr.readyState==4) { // 当readyState属性值为4时才是响应触发的
            xhr.responseText
               }
          }


   

4) 转换json
    如果服务器返回的是json结果,需要用JSON.parse 将其转为js对象

    var obj = JSON.parse(xhr.responseText)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值