您的位置:首页 > 编程语言 > Java开发

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/**/"/>


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: