springmvc 孔浩
2015-06-06 19:25
531 查看
modelAttribute属性指定该form绑定的是哪个Model,当指定了对应的Model后就可以在form标签内部其
它表单标签上通过为path指定Model属性的名称来绑定Model中的数据了
重新整理
设定编码方式:放在web.xml中,设定为utf-8
<filter>
<filter-name>CharacterFilter</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>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实现功能一:能正确返回welcome.html的页面,用<bean>
1、在eclipse中创建dynamicwebproject,注意第三个next中选择generateweb.xml
2、导入dist下地包,导入commons-logging-1.1.3
3、web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4、spring-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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd">
<beanname="/welcome.html"class="zttc.itat.controller.WelcomeController"></bean>
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/jsp/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
</beans>
注意:beanname不要写成/welcome/html;propertyprefix不要写成/WEB-INF/jsp
5、WelcomeController.java
publicclassWelcomeControllerextendsAbstractController{
@Override
protectedModelAndViewhandleRequestInternal(HttpServletRequestreq,
HttpServletResponseresp)throwsException{
//TODOAuto-generatedmethodstub
returnnewModelAndView("welcome");
}
}
注意:继承AbstractController;放在zttc.itat.controllerpackage下面
6、welcome.jsp
//简单地jsp页面
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>Inserttitlehere</title>
</head>
<body>
welcome!
</body>
</html>
实现功能二:开启注解,给controller传值,给view传值,rest风格
1、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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd">
//增加了这句
<context:component-scanbase-package="zttc.itat.controller"/>
<mvc:annotation-driven/>
//删除了bean[name="/welcome.html"]
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/jsp/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
</beans>
2、HelloController.java
packagezttc.itat.controller;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.servlet.ModelAndView;
@Controller
publicclassHelloController{
@RequestMapping({"/hello","/"})
publicModelAndViewhello(@RequestParam("username")Stringusername){
ModelAndViewmv=newModelAndView();
mv.addObject("username",username);
mv.setViewName("hello");
returnmv;
}
}
3、hello.jsp
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>Inserttitlehere</title>
</head>
<body>
//显示传来的值
${username}
</body>
</html>
实现功能三:用户管理系统,CRUD
展示用户信息
1、user.java
packagezttc.itat.model;
publicclassUser{
privateStringusername;
privateStringnickname;
privateStringpassword;
privateStringemail;
//构造函数没有返回类型
publicUser(){
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetNickname(){
returnnickname;
}
publicvoidsetNickname(Stringnickname){
this.nickname=nickname;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicUser(Stringusername,Stringnickname,Stringpassword,Stringemail){
super();
this.username=username;
this.nickname=nickname;
this.password=password;
this.email=email;
}
}
2、UserController.java
packagezttc.itat.controller;
importjava.util.HashMap;
importjava.util.Map;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.servlet.ModelAndView;
importzttc.itat.model.User;
@Controller
//路径会加上/user
@RequestMapping("/user")
publicclassUserController{
privateMap<String,User>users=newHashMap<String,User>();
publicUserController(){
users.put("a",newUser("a","aa","1","s"));
users.put("b",newUser("b","bb","2","f"));
}
@RequestMapping(value="/users",method=RequestMethod.GET)
publicModelAndViewlist(){
ModelAndViewmv=newModelAndView();
mv.addObject("users",users);
mv.setViewName("user/list");
returnmv;
}
}
3、springmvc-servlet.xml,导入jsf-api,jsf-impl,jstl-1.2
使用jstl标签
<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>
4、list.jsp
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
//使用jstl需要添加的标示
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>Inserttitlehere</title>
</head>
<body>
<c:forEachitems="${users}"var="um">
${um.value.username}
--${um.value.nickname}
--${um.value.password}
--${um.value.email}<br/>
</c:forEach>
</body>
</html>
添加用户
1、UserController.java
//首先,需要访问add.jsp页面,get方法。该页面使用了springmvc的form标签,所以需要加@ModelAttribute("user")Useruser,这样可以通过form中的path对应到user得username属性
@RequestMapping(value="/add",method=RequestMethod.GET)
publicStringadd(@ModelAttribute("user")Useruser){
return"user/add";
}
//其次,表单提交到当前页面,post方法。验证提交的数据,加入bean-validator,加入@ValidUseruser,BindingResultbr,br一定要紧跟user;jsp页面也需要加入一定的error标签
@RequestMapping(value="/add",method=RequestMethod.POST)
publicStringadd(@ValidUseruser,BindingResultbr){
//如果出错
if(br.hasErrors()){
return"user/add";
}
users.put(user.getUsername(),user);
return"redirect:/user/users";
}
2、User.java
//验证的注解
@NotEmpty(message="用户名不能为空")
publicStringgetUsername(){
returnusername;
}
@Size(min=1,max=10,message="长度1-10")
publicStringgetPassword(){
returnpassword;
}
@Email(message="格式不正确")
publicStringgetEmail(){
returnemail;
}
3、add.jsp
<%@pagelanguage="java"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
//使用springmvcform标签
<%@taglibprefix="sf"uri="http://www.springframework.org/tags/form"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>Inserttitlehere</title>
</head>
<body>
<sf:formmethod="post"modelAttribute="user">
//添加的出错提示
username:<sf:inputpath="username"/><sf:errorspath="username"/><br/>
nickname:<sf:inputpath="nickname"/><sf:errorspath="nickname"/><br/>
password:<sf:inputpath="password"/><sf:errorspath="password"/><br/>
email:<sf:inputpath="email"/><sf:errorspath="email"/><br/>
<inputtype="submit"value="adduser"/><br/>
</sf:form>
</body>
</html>
展示单个用户
1、UserController.java
//展示单个用户,show.jsp有form,需要传一个model,add是用过@ModelAttribute来指定;show使用ModelAndView来指定。@PathVariable来接收路径中得变量
@RequestMapping(value="/{username}",method=RequestMethod.GET)
publicModelAndViewshow(@PathVariableStringusername){
ModelAndViewmv=newModelAndView();
mv.addObject(users.get(username));
mv.setViewName("user/show");
returnmv;
}
//返回json对象,添加jackson-all-1.9.4,只需returnuser就行,需要添加@ResponseBody
@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")
@ResponseBody
publicUsershow(@PathVariableStringusername,Stringabc){
returnusers.get(username);
}
2、show.jsp
//跟add.jsp类似
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglibprefix="sf"uri="http://www.springframework.org/tags/form"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>Inserttitlehere</title>
</head>
<body>
<sf:formmethod="post"modelAttribute="user">
username:${user.username}<br/>
password:${user.password}<br/>
nickname:${user.nickname}<br/>
email:${user.email}<br/>
</sf:form>
</body>
</html>
更新用户信息
1、UserController.java
@RequestMapping(value="/{username}/update",method=RequestMethod.GET)
publicModelAndViewupdate(@PathVariableStringusername,@ModelAttribute("user")Useruser){
ModelAndViewmv=newModelAndView();
mv.addObject(users.get(username));
mv.setViewName("user/update");
returnmv;
}
@RequestMapping(value="/{username}/update",method=RequestMethod.POST)
publicStringupdate(@PathVariableStringusername,@ValidUseruser,BindingResultbr){
if(br.hasErrors()){
return"user/update";
}
users.put(username,user);
return"redirect:/user/users";
}
2、update.jsp
<%@pagelanguage="java"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<%@taglibprefix="sf"uri="http://www.springframework.org/tags/form"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>Inserttitlehere</title>
</head>
<body>
//给表单元素赋初值
<sf:formmethod="post"modelAttribute="user">
username:<sf:inputpath="username"value="${user.username}"/><sf:errorspath="username"/><br/>
nickname:<sf:inputpath="nickname"value="${user.nickname}"/><sf:errorspath="nickname"/><br/>
password:<sf:inputpath="password"value="${user.password}"/><sf:errorspath="password"/><br/>
email:<sf:inputpath="email"value="${user.email}"/><sf:errorspath="email"/><br/>
<inputtype="submit"value="updateuser"/><br/>
</sf:form>
</body>
</html>
3、
--<ahref="${um.value.username}/delete">delete</a>
删除用户
1、UserController.java
//ModelAndViewsetViewName时可以增加redirect记得user前加/
@RequestMapping(value="/{username}/delete",method=RequestMethod.GET)
publicModelAndViewdelete(@PathVariableStringusername){
ModelAndViewmv=newModelAndView();
users.remove(username);
mv.setViewName("redirect:/user/users");
returnmv;
}
2、list.jsp
--<ahref="${um.value.username}/delete">delete</a>
登陆
1、UserException.java
//serial选第一个;右键sourcegenerateconstructorformsuperclass
packagezttc.itat.model;
publicclassUserExceptionextendsRuntimeException{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicUserException(){
super();
//TODOAuto-generatedconstructorstub
}
publicUserException(Stringmessage,Throwablecause,
booleanenableSuppression,booleanwritableStackTrace){
super(message,cause,enableSuppression,writableStackTrace);
//TODOAuto-generatedconstructorstub
}
publicUserException(Stringmessage,Throwablecause){
super(message,cause);
//TODOAuto-generatedconstructorstub
}
publicUserException(Stringmessage){
super(message);
//TODOAuto-generatedconstructorstub
}
publicUserException(Throwablecause){
super(cause);
//TODOAuto-generatedconstructorstub
}
}
2、UserController.java
@RequestMapping(value="/login",method=RequestMethod.POST)
publicStringlogin(Stringusername,Stringpassword,HttpSessionsession){
if(!users.containsKey(username)){
thrownewUserException("用户名不存在");
}
Useru=users.get(username);
if(!u.getPassword().equals(password)){
thrownewUserException("用户密码不正确");
}
//把登陆成功地用户存入session
session.setAttribute("loginUser",u);
return"redirect:/user/users";
}
//局部异常处理函数,只处理当前controller的异常
//@ExceptionHandler(value={UserException.class})
//publicStringhandlerException(UserExceptione,HttpServletRequestreq){
// req.setAttribute("e",e);
// return"error";
//}
3、springmvc-servlet.xml:全局异常处理
<beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--配置这个属性-->
<propertyname="exceptionMappings">
<props>
<!--如果发现的是UserException,就到error页面-->
<propkey="zttc.itat.model.UserException">error</prop>
</props>
</property>
</bean>
4、error.jsp放在jsp下面
<%@pagelanguage="java"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>Inserttitlehere</title>
</head>
<body>
//当前是全局异常处理,如果为局部异常处理的话是e
${exception.message}
</body>
</html>
5、login.jsp放在webContent下面
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>Inserttitlehere</title>
</head>
<body>
<formaction="user/login"method="POST">
Username:<inputtype="text"name="username"><br/>
Password:<inputtype="text"name="password"><br/>
<inputtype="submit"value="login"/>
</body>
</html>
上传文件
1、add.jsp
<%@pagelanguage="java"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<%@taglibprefix="sf"uri="http://www.springframework.org/tags/form"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>Inserttitlehere</title>
</head>
<body>
//form一定要加enctype
<sf:formmethod="post"modelAttribute="user"enctype="multipart/form-data">
username:<sf:inputpath="username"/><sf:errorspath="username"/><br/>
nickname:<sf:inputpath="nickname"/><sf:errorspath="nickname"/><br/>
password:<sf:inputpath="password"/><sf:errorspath="password"/><br/>
email:<sf:inputpath="email"/><sf:errorspath="email"/><br/>
//增加了这个
file:<inputtype="file"name="attach"/><br/>
<inputtype="submit"value="adduser"/><br/>
</sf:form>
</body>
</html>
2、springmvc-servlet.xml
<beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<propertyname="maxUploadSize"value="5000000"></property>
</bean>
3、UserController.java在webContent下面建resources文件夹,导入commons-fileupload-1.2.2,commons-io-2.1
//修改了add方法
@RequestMapping(value="/add",method=RequestMethod.POST)
publicStringadd(@ValidUseruser,BindingResultbr,@RequestParamMultipartFileattach,HttpServletRequestreq)throwsIOException{
if(br.hasErrors()){
return"user/add";
}
//不知道每个方法是做什么用的
Stringrealpath=req.getSession().getServletContext().getRealPath("/resources/upload");
System.out.println(realpath);
Filef=newFile(realpath+"/"+attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(),f);
users.put(user.getUsername(),user);
return"redirect:/user/users";
}
//上传多个文件
@RequestMapping(value="/add",method=RequestMethod.POST)
publicStringadd(@ValidUseruser,BindingResultbr,@RequestParamMultipartFile[]attachs,HttpServletRequestreq)throwsIOException{//一定要紧跟validate之后写验证结果类
if(br.hasErrors()){
return"user/add";
}
Stringrealpath=req.getSession().getServletContext().getRealPath("/resources/upload");
System.out.println(realpath);
for(MultipartFileattach:attachs){
if(attach.isEmpty())continue;
Filef=newFile(realpath+"/"+attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(),f);
}
users.put(user.getUsername(),user);
return"redirect:/user/users";
}
静态文件可以直接访问
1、list.jsp在resources中新建css文件夹
<linkhref="<%=request.getContextPath()%>/resources/css/style.css"rel="stylesheet"type="text/css"/>
2、springmvc-serlvet.xml
<mvc:resourceslocation="/resources/"mapping="/resources/**/"/>
它表单标签上通过为path指定Model属性的名称来绑定Model中的数据了
重新整理
设定编码方式:放在web.xml中,设定为utf-8
实现功能一:能正确返回welcome.html的页面,用<bean>
1、在eclipse中创建dynamicwebproject,注意第三个next中选择generateweb.xml
2、导入dist下地包,导入commons-logging-1.1.3
3、web.xml
4、spring-servlet.xml
注意:beanname不要写成/welcome/html;propertyprefix不要写成/WEB-INF/jsp
5、WelcomeController.java
注意:继承AbstractController;放在zttc.itat.controllerpackage下面
6、welcome.jsp
实现功能二:开启注解,给controller传值,给view传值,rest风格
1、springmvc-servlet.xml
2、HelloController.java
3、hello.jsp
实现功能三:用户管理系统,CRUD
展示用户信息
1、user.java
2、UserController.java
3、springmvc-servlet.xml,导入jsf-api,jsf-impl,jstl-1.2
4、list.jsp
添加用户
1、UserController.java
2、User.java
3、add.jsp
展示单个用户
1、UserController.java
2、show.jsp
更新用户信息
1、UserController.java
2、update.jsp
3、
删除用户
1、UserController.java
2、list.jsp
登陆
1、UserException.java
2、UserController.java
3、springmvc-servlet.xml:全局异常处理
4、error.jsp放在jsp下面
5、login.jsp放在webContent下面
上传文件
1、add.jsp
2、springmvc-servlet.xml
3、UserController.java在webContent下面建resources文件夹,导入commons-fileupload-1.2.2,commons-io-2.1
静态文件可以直接访问
1、list.jsp在resources中新建css文件夹
2、springmvc-serlvet.xml
相关文章推荐
- SpringMVC学习系列(9) 之 实现注解式权限验证
- SpringMVC学习系列(7) 之 格式化显示
- SpringMVC学习系列(8) 之 国际化
- Java类的多态机制
- hadoop2.6.0+eclipse配置
- hadoop2.6.0+eclipse配置
- 第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换
- SpringMVC 学习笔记(九) 自定义拦截器
- 【转】java多态详解
- SpringMVC 学习笔记(八)文件上传
- Struts2学习笔记1
- Java面向对象小记(1)
- java final 与引用类型变量和基本类型区别
- 如何导入hadoop源码到eclipse
- 如何导入hadoop源码到eclipse
- Struts2+Spring+MyBatis环境整合开发案例(MVC架构)
- Java中wait()与sleep()的区别
- 关于java中空指针异常的原因及解决方法
- 请用Java实现列出某个目录下的所有文件
- java 学习书籍-想精通java的必看