zoukankan      html  css  js  c++  java
  • springmvc 孔浩

    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中创建dynamic web project,注意第三个next中选择generate web.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

    <?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: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/mvc
        	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    	<bean name="/welcome.html" class="zttc.itat.controller.WelcomeController"></bean>        
    	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="prefix" value="/WEB-INF/jsp/"></property>
    		<property name="suffix" value=".jsp"></property>
    	</bean>
    </beans>
    

    注意:bean name 不要写成/welcome/html; property prefix 不要写成/WEB-INF/jsp

    5、WelcomeController.java

    public class WelcomeController extends AbstractController {
    
    	@Override
    	protected ModelAndView handleRequestInternal(HttpServletRequest req,
    			HttpServletResponse resp) throws Exception {
    		// TODO Auto-generated method stub
    		return new ModelAndView("welcome");
    	}
    	
    }
    

    注意:继承AbstractController;放在zttc.itat.controller package下面

    6、welcome.jsp

    //简单地jsp页面
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> welcome! </body> </html>

    实现功能二:开启注解,给controller传值,给view传值,rest风格

    1、springmvc-servlet.xml

    <?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: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/mvc
        	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
         //增加了这句 <context:component-scan base-package="zttc.itat.controller" /> <mvc:annotation-driven /> //删除了bean[name="/welcome.html"] <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>

    2、HelloController.java

    package zttc.itat.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class HelloController {
    	
    	@RequestMapping({"/hello","/"})
    	public ModelAndView hello(@RequestParam("username") String username){
    		ModelAndView mv = new ModelAndView();
    		mv.addObject("username", username);
    		mv.setViewName("hello");
    		return mv;
    	}
    
    }
    

    3、hello.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    //显示传来的值 ${username} </body> </html>

    实现功能三:用户管理系统,CRUD

    展示用户信息

    1、user.java

    package zttc.itat.model;
    
    public class User {
    	private String username;
    	private String nickname;
    	private String password;
    	private String email;
    	
    	//构造函数没有返回类型
    	public User(){
    		
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getNickname() {
    		return nickname;
    	}
    
    	public void setNickname(String nickname) {
    		this.nickname = nickname;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	
    	public User(String username, String nickname, String password, String email){
    		super();
    		this.username = username;
    		this.nickname = nickname;
    		this.password = password;
    		this.email = email;
    	}
    }
    

    2、UserController.java

    package zttc.itat.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    import zttc.itat.model.User;
    
    @Controller
    //路径会加上/user @RequestMapping("/user") public class UserController { private Map<String, User> users = new HashMap<String, User>(); public UserController(){ users.put("a", new User("a","aa","1","s")); users.put("b", new User("b","bb","2","f")); } @RequestMapping(value="/users", method=RequestMethod.GET) public ModelAndView list(){ ModelAndView mv = new ModelAndView(); mv.addObject("users", users); mv.setViewName("user/list"); return mv; } }

    3、springmvc-servlet.xml,导入jsf-api,jsf-impl,jstl-1.2 

    使用jstl标签
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

    4、list.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    //使用jstl需要添加的标示 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <c:forEach items="${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") User user,这样 可以通过form中的path对应到user得username属性
    @RequestMapping(value="/add", method=RequestMethod.GET)
    public String add(@ModelAttribute("user") User user){
    	return "user/add";
    }
    //其次,表单提交到当前页面,post方法。验证提交的数据,加入bean-validator,加入@Valid User user, BindingResult br,br一定要紧跟user;jsp页面也需要加入一定的error标签
    @RequestMapping(value="/add", method=RequestMethod.POST)
    public String add(@Valid User user, BindingResult br){
    	//如果出错
    	if(br.hasErrors()){			
    		return "user/add";
    	}
    	users.put(user.getUsername(), user);
    	return "redirect:/user/users";
    }
    

    2、User.java

    //验证的注解
    @NotEmpty(message="用户名不能为空") public String getUsername() { return username; } @Size(min=1, max=10, message="长度1-10") public String getPassword() { return password; } @Email(message="格式不正确") public String getEmail() { return email; }

    3、add.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    //使用springmvc form标签 <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <sf:form method="post" modelAttribute="user">
         //添加的出错提示 username:<sf:input path="username" /><sf:errors path="username" /><br /> nickname:<sf:input path="nickname" /><sf:errors path="nickname" /><br /> password:<sf:input path="password" /><sf:errors path="password" /><br /> email:<sf:input path="email" /><sf:errors path="email" /><br /> <input type="submit" value="add user" /><br /> </sf:form> </body> </html>

    展示单个用户

    1、UserController.java

    //展示单个用户,show.jsp有form,需要传一个model,add是用过@ModelAttribute来指定;show使用ModelAndView来指定。@PathVariable来接收路径中得变量
    @RequestMapping(value="/{username}", method=RequestMethod.GET)
    public ModelAndView show(@PathVariable String username){
    	ModelAndView mv = new ModelAndView();
    	mv.addObject(users.get(username));
    	mv.setViewName("user/show");
    	return mv;
    }
    //返回json对象,添加jackson-all-1.9.4,只需return user就行,需要添加@ResponseBody
    @RequestMapping(value="/{username}", method=RequestMethod.GET, params="json")
    @ResponseBody
    public User show(@PathVariable String username, String abc){
    	return users.get(username);
    }
    

    2、show.jsp

    //跟add.jsp类似
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sf:form method="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)
    public ModelAndView update(@PathVariable String username, @ModelAttribute("user") User user){
    	ModelAndView mv = new ModelAndView();
    	mv.addObject(users.get(username));
    	mv.setViewName("user/update");
    	return mv;
    }
    
    @RequestMapping(value="/{username}/update", method=RequestMethod.POST)
    public String update(@PathVariable String username, @Valid User user, BindingResult br){
    	if(br.hasErrors()){			
    		return "user/update";
    	}
    	users.put(username, user);
    	return "redirect:/user/users";
    }
    

    2、update.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    //给表单元素赋初值 <sf:form method="post" modelAttribute="user"> username:<sf:input path="username" value="${user.username}"/><sf:errors path="username" /><br /> nickname:<sf:input path="nickname" value="${user.nickname}"/><sf:errors path="nickname" /><br /> password:<sf:input path="password" value="${user.password}"/><sf:errors path="password" /><br /> email:<sf:input path="email" value="${user.email}"/><sf:errors path="email" /><br /> <input type="submit" value="update user" /><br /> </sf:form> </body> </html>

    3、

    --<a href="${um.value.username}/delete">delete</a>
    

    删除用户

    1、UserController.java

    //ModelAndView setViewName 时可以增加 redirect 记得user前加/
    @RequestMapping(value="/{username}/delete", method=RequestMethod.GET)
    public ModelAndView delete(@PathVariable String username){
    	ModelAndView mv = new ModelAndView();
    	users.remove(username);
    	mv.setViewName("redirect:/user/users");
    	return mv;
    }
    

    2、list.jsp

    --<a href="${um.value.username}/delete">delete</a>
    

    登陆

    1、UserException.java

    //serial选第一个;右键 source generate constructor form superclass
    package zttc.itat.model; public class UserException extends RuntimeException { /** * */ private static final long serialVersionUID = 1L; public UserException() { super(); // TODO Auto-generated constructor stub } public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); // TODO Auto-generated constructor stub } public UserException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } public UserException(String message) { super(message); // TODO Auto-generated constructor stub } public UserException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } }

    2、UserController.java

    @RequestMapping(value="/login", method=RequestMethod.POST)
    public String login(String username, String password, HttpSession session){
    	if(!users.containsKey(username)){
    		throw new UserException("用户名不存在");
    	}
    	User u = users.get(username);
    	if(!u.getPassword().equals(password)){
    		throw new UserException("用户密码不正确");
    	}
    	//把登陆成功地用户存入session
    	session.setAttribute("loginUser", u);		
    	return "redirect:/user/users";
    }
    
    //局部异常处理函数,只处理当前controller的异常	
    // @ExceptionHandler(value={UserException.class})
    // public String handlerException(UserException e, HttpServletRequest req){
    // 	req.setAttribute("e", e);
    // 	return "error";
    // }
    

    3、springmvc-servlet.xml:全局异常处理

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    	<!-- 配置这个属性 -->
    	<property name="exceptionMappings">
    		<props>
    			<!-- 如果发现的是UserException,就到error页面 -->
    			<prop key="zttc.itat.model.UserException">error</prop>
    		</props>
    	</property>	
    </bean>
    

    4、error.jsp 放在jsp下面

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    //当前是全局异常处理,如果为局部异常处理的话是e ${exception.message } </body> </html>

    5、login.jsp 放在webContent下面

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="user/login" method="POST">
    Username:<input type="text" name="username"><br />
    Password:<input type="text" name="password"><br />
    <input type="submit" value="login" />
    </body>
    </html>
    

    上传文件

    1、add.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    //form一定要加enctype <sf:form method="post" modelAttribute="user" enctype="multipart/form-data"> username:<sf:input path="username" /><sf:errors path="username" /><br /> nickname:<sf:input path="nickname" /><sf:errors path="nickname" /><br /> password:<sf:input path="password" /><sf:errors path="password" /><br /> email:<sf:input path="email" /><sf:errors path="email" /><br />
         //增加了这个 file:<input type="file" name="attach" /><br /> <input type="submit" value="add user" /><br /> </sf:form> </body> </html>

    2、springmvc-servlet.xml

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    	<property name="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) public String add(@Valid User user, BindingResult br, @RequestParam MultipartFile attach, HttpServletRequest req) throws IOException{ if(br.hasErrors()){ return "user/add"; }
         //不知道每个方法是做什么用的 String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); System.out.println(realpath); File f = new File(realpath+"/"+attach.getOriginalFilename()); FileUtils.copyInputStreamToFile(attach.getInputStream(), f); users.put(user.getUsername(), user); return "redirect:/user/users"; }
    //上传多个文件
    @RequestMapping(value="/add",method=RequestMethod.POST) public String add(@Valid User user, BindingResult br, @RequestParam MultipartFile[] attachs, HttpServletRequest req) throws IOException{ //一定要紧跟validate之后写验证结果类 if(br.hasErrors()){ return "user/add"; } String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); System.out.println(realpath); for(MultipartFile attach:attachs){ if(attach.isEmpty()) continue; File f = new File(realpath+"/"+attach.getOriginalFilename()); FileUtils.copyInputStreamToFile(attach.getInputStream(), f); } users.put(user.getUsername(), user); return "redirect:/user/users"; }

    静态文件 可以直接访问

    1、list.jsp  在resources中新建css文件夹

    <link href="<%=request.getContextPath()%>/resources/css/style.css" rel="stylesheet" type="text/css"/>
    

    2、springmvc-serlvet.xml

    <mvc:resources location="/resources/" mapping="/resources/**/" />
    
     
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/wang-jing/p/4557150.html
Copyright © 2011-2022 走看看