1 所需jar包

项目结构如下:

2 web.xml配置文件的内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>

<servlet-name>springmvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<!-- struts用/*,springmvc不能用/*方式,配置的url-pattern如:*.xxx
-->

<url-pattern>*.do</url-pattern>

</servlet-mapping>

</web-app>

3 springmvc-servlet.xml的内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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"

xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"

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-3.0.xsd

      http://www.springframework.org/schema/context

      http://www.springframework.org/schema/context/spring-context-3.0.xsd

      http://www.springframework.org/schema/aop

      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

      http://www.springframework.org/schema/tx

      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">

<context:component-scanbase-package="com.rl.controller"/>

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="prefix"value="/WEB-INF/jsp/"/>

<propertyname="suffix"value=".jsp"/>

</bean>

<!--文件上传的视图解析器
id一定是multipartResolver,不能随便定义
-->

<beanid="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!--文件上传的最大值,以字节为单位
-->

<propertyname="maxUploadSize"value="1024000"></property>

</bean>

<mvc:interceptors>

<mvc:interceptor>

<!-- path:指定要拦截的范围。语法:/(根目录)test/**,所有拦截/**
-->

<mvc:mappingpath="/**"/>

<beanclass="com.rl.interceptor.MyInterceptor"/>

</mvc:interceptor>

</mvc:interceptors>

</beans>

4 Test1Controller.java的内容如下:

package com.rl.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/test1") //当前Controller的namespace,防止不同的Controller中方名重复的问题

public class Test1Controller {

/**

*
浏览器中的访问地址是:http://localhost:8080/springmvc2/test1/toAjax.do

* @return

*/

@RequestMapping("/toAjax.do")

public String toAjax() {

return "ajax";

}

}

5 TestController的内容如下:

package com.rl.controller;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Date;

import java.text.SimpleDateFormat;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.CustomDateEditor;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.ServletRequestDataBinder;

import org.springframework.web.bind.annotation.InitBinder;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import com.rl.model.Person;

import com.rl.model.User;

@Controller

@RequestMapping("test")

//当前Controller的namespace,防止不同Controller中方法名重复的问题

public class TestController {

public TestController() {

System.out.println("Controller被创建....");

}

/**

* desc:返回值类型是String,含义是ModelAndView中的viewname

*

* @RequestMapping:请求方法的映射,内容最好和方法名称一致

* @author
涂作权

* @return

*/

@RequestMapping("/hello.do")

public String hello() {

return "index";

}

/**

* desc:HttpServletRequest可以直接定义在方法的参数列表中来使用

*

* @param request

* @author
涂作权

* @return

*/

@RequestMapping("/getParam.do")

public String getParam(HttpServletRequest request) {

String name = request.getParameter("name");

System.out.println(name);

return "index";

}

/**

* desc:在参数的列表中来直接定义要接收的参数,参数名(形象)一定要

*
            和请求中传递的参数名(实参)一致,数据类型会自动的转换,如果数据

*
            类型转换出错会报400错误???

*

* @param name

* @param id

* @param age

* @param address

* @param birthday

* @author
涂作权

* @return

*/

@RequestMapping("/getParam1.do")

public String getParam1(String name, Integer id, Integer age,

String address, Date birthday) {

System.out.println("姓名:"
+ name + " id:" + id.getClass() + " 年龄:"

+ age + "
地址: " + address + "生日:" + birthday);

return "index";

}

/**

* desc:多选的接收在参数列表中定义数组来接收,参数名(形参)一定要和请求中传递的参数名(实参)一致,数据类型会自动的转换,

*
如果以字符串来接收的话会接收到一个以逗号分隔的一个字符串

*

* @author
涂作权

* @param favor

* @return

*/

@RequestMapping("/getParam2.do")

public String getParam2(String[] favor) {

System.out.println(favor);

for (String fa : favor) {

System.out.println(fa);

}

return "index";

}

/**

* desc:接收实体对象,直接在参数列表中定义要接收的实体类就可以了,每次访问的时候springmvc会自动创建相关参数的实体对象,对象中

*
的属性值是通过请求传递过来并且注入到对象中

*

* @author
涂作权

* @param person

* @param user

* @param name

* @return

*/

@RequestMapping("/getParamByObj.do")

public String getParamByObj(Person person, User user, String name) {

System.out.println(person);

System.out.println(user);

return "index";

}

/**

*
不建议使用 desc:返回值类型定义成ModelAndView,把数据和视图注入到ModelAndView中返回即可

*

* @return

* @author
涂作权

* @throws Exception

*/

@RequestMapping("/returnData.do")

public ModelAndView returnData() throws Exception {

Person p = new Person();

p.setId(1);

p.setName("zhangsan");

p.setAge(22);

p.setAddress("beijing");

p.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-05"));

Map<String, Object> map = new HashMap<String, Object>();

//
相当于request.setAttribute("person", p);

map.put("person", p);

return new ModelAndView("index", map);

}

/**

*
不建议使用 desc:返回值是String类型:viewName,参数是map,是ModelAndView中
map,不是接收参数的。

*

* @author
涂作权

* @param map

* @return

* @throws Exception

*/

@RequestMapping("/returnData1.do")

public String returnData1(Map<String, Object> map) throws Exception {

Person p = new Person();

p.setId(1);

p.setName("zhangsan");

p.setAge(22);

p.setAddress("beijing");

p.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-05"));

//
相当于request.setAttribute("person", p);

map.put("person", p);

return "index";

}

/**

*
在参数列表中定义Model来给页面返回数据 desc:建议使用

*

* @author
涂作权

* @param model

* @return

* @throws Exception

*/

@RequestMapping("/returnData2.do")

public String returnData2(Model model) throws Exception {

Person p = new Person();

p.setId(1);

p.setName("zhangsan");

p.setAge(22);

p.setAddress("beijing");

p.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-05"));

//
相当于request.setAttribute("person", p);

model.addAttribute("person", p);

return "index";

}

/**

* desc:method=RequestMethod.POST该方法只能使用method指定的请求方式来指定

*/

@RequestMapping(value = "/getParamByObjWithMethod.do", method = RequestMethod.POST)

public String getParamByObjWithMethod(Person person) {

System.out.println(person);

return "success";

}

/**

* desc:在参数列表中直接来定义HttpServletResponse,并且方法的返回值要定义void为ajax提供调用

*

* @author
涂作权

* @param name

* @param response

*/

@RequestMapping("/ajax.do")

public void ajax(String name, HttpServletResponse response) {

String result = "hello" + name;

try {

response.getWriter().write(result);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* desc:直接在参数列表中来定义PrintWriter建议使用

*

* @param name

* @param out

*/

@RequestMapping("/ajax1.do")

public void ajax1(String name, PrintWriter out){

String result = "hello " + name;

out.write(result);

}

@RequestMapping("/toAjax.do")

public String toAjax(){

return "ajax";

}

/**

*
在同一个Controller中重定向语法 return后面
redirect:当前


         Controller中方法的@RequestMapping的值

*

* @return

*/

@RequestMapping("/redirectToAjax.do")

public String redirectToAjax(){

return "redirect:toAjax.do";

}

/**

* controller之间的重定向redirect:后面要有"/",代表从项目的根目录开始

*

* @return

* @author
涂作权

*/

@RequestMapping("/redirectToAjax1.do")

public String redirectToAjax1(){

return "redirect:/test1/toAjax.do";

}

/**

*
单纯的转发

*

* @author
涂作权

* @return

*/

@RequestMapping("/toForm.do")

public String toForm(){

return "form";

}

/**

*
用于转换数据类型

* @param binder

*/

@InitBinder

public void initBinder(ServletRequestDataBinder binder){

binder.registerCustomEditor(Date.class,

new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));

}

}

6 UploadController的内容如下:

package com.rl.controller;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.propertyeditors.CustomDateEditor;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.ServletRequestDataBinder;

import org.springframework.web.bind.annotation.InitBinder;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.rl.model.Person;

@Controller

@RequestMapping("/upload")

//当前Controller的namespace,防止不同Controller中方法名重复的问题

public class UploadController {

@RequestMapping("/uploadPic.do")

public String uploadPic(Person person, HttpServletRequest request)

throws Exception {

//
把request转换成MultipartHttpServletRequest

MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;

//
获得文件,这里的pic是表单中的file字段对应的属性名称

MultipartFile mf = mr.getFile("pic");

//
获得文件的字节数组

byte[] fbyte = mf.getBytes();

//
获得当前时间的最小精度

String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS")

.format(new Date());

//
追加三位随机数

Random random = new Random();

for (int i = 0; i < 3; i++) {

fileName = fileName + random.nextInt(10);

}

//
获得原始文件名

String oriFileName = mf.getOriginalFilename();

//
获得后缀名

String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));

//
拿到服务器的根目录

String realPath = request.getSession().getServletContext()

.getRealPath("/");

//
创建文件输出流

OutputStream out = new FileOutputStream(new File(realPath + "/upload/"

+ fileName + suffix));

out.write(fbyte);

out.flush();

out.close();

return "success";

}

@InitBinder

public void initBinder(ServletRequestDataBinder binder) {

binder.registerCustomEditor(Date.class, new CustomDateEditor(

new SimpleDateFormat("yyyy-MM-dd"), true));

}

}

7 MyInterceptor的内容如下:

package com.rl.interceptor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor{

/**

*
执行时机:在视图解析器解析完毕之后,页面一旦报错异常会抛到该方法中,

* try{}catch后面的finally,用于系统监控

*/

public void afterCompletion(HttpServletRequest arg0,

HttpServletResponse arg1, Object arg2, Exception ex)

throws Exception {

System.out.println("afterCompletion...................");

System.out.println("----------------------------------");

ex.printStackTrace();

System.out.println("----------------------------------");

}

/**

*
执行时机:Controller执行完毕,视图解析器解析之前来执行

*
注意:此案例中如果是测试异步,这里的mv是null,此处会报错。

*
解决办法是注释掉springmvc-servlet.xml中的拦截器的配置内容

*/

public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,

Object arg2, ModelAndView mv) throws Exception {

Map<String, Object> map = mv.getModel();

map.put("test", "append something...");

System.out.println("postHandle...");

}

/**

*
返回值数据类型是布尔类型:true放行, false是阻止访问

*
执行时机:Controller执行之前

*

*
最常用的应用场景就是权限的拦截

*/

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,

Object obj) throws Exception {

System.out.println("preHandle...");

System.out.println(obj.getClass().getName());

return true;

}

}

8 Person的内容如下:

package com.rl.model;

import java.util.Date;

publicclass
Person {

Integer
id;

String
name;

Integer
age;

String
address;

Date
birthday;

/**

*
@return the id

*/

public
Integer getId() {

returnid;

}

/**

*
@param id the id to set

*/

publicvoid
setId(Integer id) {

this.id
= id;

}

/**

*
@return the name

*/

public
String getName() {

returnname;

}

/**

*
@param name the name to set

*/

publicvoid
setName(String name) {

this.name
= name;

}

/**

*
@return the age

*/

public
Integer getAge() {

returnage;

}

/**

*
@param age the age to set

*/

publicvoid
setAge(Integer age) {

this.age
= age;

}

/**

*
@return the address

*/

public
String getAddress() {

returnaddress;

}

/**

*
@param address the address to set

*/

publicvoid
setAddress(String address) {

this.address
= address;

}

/**

*
@return the birthday

*/

public
Date getBirthday() {

returnbirthday;

}

/**

*
@param birthday the birthday to set

*/

publicvoid
setBirthday(Date birthday) {

this.birthday
= birthday;

}

}

9 User的内容如下

package com.rl.model;

publicclass
User {

Integer
id;

String
name;

/**

*
@return the id

*/

public
Integer getId() {

returnid;

}

/**

*
@param id the id to set

*/

publicvoid
setId(Integer id) {

this.id
= id;

}

/**

*
@return the name

*/

public
String getName() {

returnname;

}

/**

*
@param name the name to set

*/

publicvoid
setName(String name) {

this.name
= name;

}

@Override

public
String toString() {

return"User
[id=" +id
+", name=" +name
+"]";

}

}

10 ajax.jsp的内容如下:

<%@page
language="java"import="java.util.*"pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPEHTML
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

<title>My
JSP 'index.jsp' starting page</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="This
is my page"
>

<scripttype="text/javascript"src="js/jquery.js"></script>

<scripttype="text/javascript">

$(function(){

$("#mybutton").click(function(){

console.log("test");

varmytext
= $("#mytext").val();

$.ajax({

url:"test/ajax1.do",

type:"post",

dataType:"text",

data:{

name:mytext

},

success:function(responseText){

alert(responseText);

},

error:function(){

alert("system
error");

}

});

});

});

</script>

</head>

<body>

<inputtype="text"id="mytext"/>

<inputid="mybutton"type="button"value="click"/>

</body>

</html>

11 form.jsp的内容如下:

<%@page
language="java"import="java.util.*"pageEncoding="utf-8"%>

<!DOCTYPEHTML
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My
JSP 'form.jsp' starting page</title>

</head>

<body>

<formaction="upload/uploadPic.do"method="post"enctype="multipart/form-data">

id:<inputname="id"type="text"/><br>

name:<inputname="name"type="text"/><br>

age:<inputname="age"type="text"/><br>

address:<inputname="address"type="text"/><br>

birthday:<inputname="birthday"type="text"/><br>

pic:<inputtype="file"name="pic"/><br>

<inputvalue="submit"type="submit"/>

</form>

</body>

</html>

12 index.jsp的内容如下:

<%@page
language="java"import="java.util.*"pageEncoding="utf-8"%>

<%@taglib
uri="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>

<!DOCTYPEHTML
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My
JSP 'index.jsp' starting page</title>

</head>

<body>

<h1>${person.id}</h1>

<h1>${person.name}</h1>

<h1>${person.age}</h1>

<h1>${person.address}</h1>

<h1><fmt:formatDatevalue="${person.birthday
}"pattern="yyyy-MM-dd"/></h1>

<h1>${test
}</h1>

</body>

</html>

13 success.jsp的内容如下:

<%@page
language="java"import="java.util.*"pageEncoding="utf-8"%>

<!DOCTYPEHTML
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My
JSP 'success.jsp' starting page</title>

</head>

<body>

success<br>

</body>

</html>

02基于注解开发SpringMVC项目(jar包,异步,request,参数传递,多选的接收,Model传参,map传参,model传参,ajax,重定向,时间日期转换)的更多相关文章

  1. 基于注解的springmvc开发

    原理简析 1. 背景知识:org.springframework.web.ServletContainerInitializer接口 在基于注解的servlet开发中,ServletContainer ...

  2. 使用纯注解与配置类开发springMVC项目,去掉xml配置

    最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...

  3. SpringMvc+Mybatis开发需要的jar包

    SpringMvc+Mybatis开发需要的jar包

  4. SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  5. 工具idea 基于maven 创建springMVC项目

    SpringMVC Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不 ...

  6. Spring基于注解开发异常

    基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...

  7. 由提交storm项目jar包引发对jar的原理的探索

    序:在开发storm项目时,提交项目jar包当把依赖的第三方jar包都打进去提交storm集群启动时报了发现多个同名的文件错误由此开始了一段对jar包的深刻理解之路. java.lang.Runtim ...

  8. Hystrix 基于注解开发

    不对地方,请指出!相互学习! 背景:Hystrix 没有无参构造函数,所以Spring管理bean时候没办法进行管理, 每个类都进行编码 个人感觉不方便,基于注解开发!方便速度快,不侵入代码!引入的j ...

  9. maven-将依赖的 jar包一起打包到项目 jar 包中

    前言: 有时候在项目开发中,需要很多依赖的 jar 包,其中依赖的 jar 包也会依赖其他的 jar 包,导致jar 包的管理很容易不全,以下有两种方法可以规避这个问题. 一.在pom.xml 文件中 ...

随机推荐

  1. UOJ #11. 【UTR #1】ydc的大树

    题目描述: ydc有一棵n个结点的黑白相间的大树,从1到n编号. 这棵黑白树中有m个黑点,其它都是白点. 对于一个黑点我们定义他的好朋友为离他最远的黑点.如果有多个黑点离它最远那么都是它的好朋友.两点 ...

  2. PHP Laravel框架入门心得 | How to study PHP Laravel Framework

    PHP有不少开发框架,其中比较出名的有Symfony和Laravel. 我说说我最近入门Laravel的感受和学习方法吧. 1.第一个感受是Laravel的社区讨论和学习资源真的是太棒了,中文化也做得 ...

  3. zookeeper快速入门

    一.zookeeper简介 zookeeper 是apache旗下的hadoop子项目,它一个开源的,分布式的服务协调器.同样通过zookeeper可以实现服务间的同步与配置维护.通常情况下,在分布式 ...

  4. Linux文件系统的介绍

    1.Linux的文件系统是一个典型的树形结构,只有一个根节点 如下图: 2.在Linux中一切皆文件 Linux 对数据文件(.mp3..bmp),程序文件(.c..h.*.o),设备文件(LCD.触 ...

  5. php中AJAX请求中使用post和get请求的区别

    之前使用这两个请求的时候,主要从几个方面考虑: 1.语义,get就是从服务器获取,一般就是获取/查询资源信息.post就是提交给服务器,一般就是更新资源信息. 2.请求文件大小,get一般只有2k这样 ...

  6. pm2进阶使用

    启用集群模式 只需要在启动应用时带上i参数 pm2 start app.js -i max max:意味着PM2将自动检测可用的CPU数量和运行多个进程可以在负载均衡模式(但是不推荐使用) 或者使用j ...

  7. 关于Intellij Idea导出可执行打jar

    今天被人问到如何导jar包出来,mark一下Intellij Idea的简单方式. 1.菜单:File->project stucture 2.在弹窗最左侧选中Artifacts->&qu ...

  8. python字典无限遍历

    #无限遍历dict,通过key获取value,嵌套字典存在多个相同的key,可获取多个key class getValues(object): def __init__(self): pass #无限 ...

  9. Rails关闭html_safe字符串过滤

    在某些情况下我希望html的文本中包含一些换行,因为html5产生换行的方法是插入 <br />所以我可以这么写: text = "hello world!<br /> ...

  10. 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

    总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到 ...