SpringMvc构建与Web应用程序(下)

3.4 使用注解配置SpringMvc

3.5 jsp处理表单

3.5.1配置标签库

<%@taglib uri="http://www.springframework.org/tags/form" prefix="mvc" %>

3.5.2 理解绑定的强大功能

  Spring在视图和模型之间提供了强大的绑定功能。用户视图发送数据,数据被自动绑定到模型上面。用户的每一次交互都是web上面的一个HTTP请求,所以SpringMvc将请求参数与command相绑定,其中command对象是一个POJO,其值由用户填充。

<mvc:input path="name"/>

3.5.3 使用表单

<mvc:form modelAttribute="user" action="result.mvc">
 <table>
   <tr>
     <td><mvc:label path="name">Name</mvc:label></td>
     <td><mvc:input path="name"/></td>
   </tr> 
   <tr>
     <td><mvc:label path="lastname">Last Name</mvc:label></td> 
     <td><mvc:input path="lastname"/></td>
   </tr>
   <tr>
     <td><mvc:label path="password">Password</mvc:label></td>
     <td><mvc:password path="password"/></td>
   </tr>
   <tr>
     <td><mvc:label path="detail">Detail</mvc:label></td>
     <td><mvc:textarea path="detail"/></td>
   </tr>
   <tr>
     <td><mvc:label path="birthDate">Birth Date</mvc:label></td>
     <td><mvc:input path="birthDate"></mvc:input></td>
   </tr>
   <tr>
     <td><mvc:label path="gender">Gender</mvc:label></td>
     <td><mvc:radiobuttons path="gender" items="${genders }"/></td>
   </tr>
   <tr>
     <td><mvc:label path="country">Country</mvc:label></td>
     <td><mvc:select path="country" items="${countries}"></mvc:select></td>
   </tr>
   <tr>
    <td><mvc:label path="nonSmoking">Non Smoking</mvc:label></td>
    <td><mvc:checkbox path="nonSmoking"/></td>
   </tr>
   <tr>
    <td colspan="2">
      <input type="submit" value="Sbumit"/>
    </td>
   </tr>
   
 </table>
</mvc:form>

为了实现绑定通过其modelAttribute特性向内部标签公开一个绑定路径,该特性表明根据次类的命名将对应的模型类向视图公开。modelAttribute指向模型类,path指向相同模型类的属性。

3.6使用注解的强大功能

1、 @Controller:表示被注解类作为一个MVC框架的一个Controller的主要注解。Dispatcher Servlet扫描被 @Controller注解的类,从而将Web请求映射到被@RequsetMapping注解的方法之上。与@Service相类似,继承自@Component注解

2、@RequsetMapping:将注解被用来将用户的请求映射到处理器类或方法,可以在类或者方法上使用。可以接受HTTP Servlet 请求相应的对象(Request Reposit)。Http Session对象 InputStream/OutputStream对象等其他对象。

3、@ModeAttribute:该注解使用一个向视图公开的键将一个返回值与一个参数绑定起来。可在方法级别或方法参数上面应用该注解。

在“处理用户注册表单“练习中,通过一个键将一个对象设置为该注解,从而将性别加载到模型中。

@MOdelAttribute("genders")
public Gender[] genders(){
    return Gender.values();
}

在方法参数级别,处理器方法获取对象的引用,而该对象包含用户通过表单输入的数据。

@RequestMapping(value="/proccess")
public ModelAndView doSomeStuff(@ModelAttrbut("value") MyObject object){
...
}

4、@PathVariable

该注解将一个方法的参数绑定到一个URL模板。如果可以通过请求URL从用户获取数据,将有利于处理器方法的执行。所以使用带有@PathVariable的给定userid,可以获取用户数据,并且在处理方法中向情求用户显示这些数据,

@RequestMapping(value="/view/{userid}")
public ModelAndView fetchUser(@PathVariable String userid){
...
}

此时方法参数名称与模板相匹配,所以该列没有定义值,但也可以将其定义为@PathVariable{"userid"}。@PathVariable参数可以是任何类型。

5、@ControllerAdvice

该注解能够让我们将代码集中到一个地方、以便跨控制器共享代码。

6、@InitBinder

确定初始化WebDataBinder的方法。关闭请求参数到模型对象的自动数据的绑定。注册自定义编辑器,

7、@ExceptionHandler

  异常注解

3.7验证用户登录。

前端设置

 

3.8 上传文件

 

Dispatcher Servlet检测到文件上传请求时,会将工作委托给前面声明的其中的一个多部分解析器来完成。解析器将其解析成多部分文件和参数并创建MultipartHTTPServletRequest实例。当使用Commons FileUpload方法时,可以通过定义解析器的属性来配置上传流程。

   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                                
      <property name="uploadTempDir" value="/tmp"/>
      <property name="maxUploadSize" value="1048576"/>
      <property name="maxInMemorySize" value="524228"/>
     </bean>

uploadTempDir:设置临时目录

maxUploadSize:上传被拒绝之前允许的最大字节数

maxInMemorySize:上传文件保存到临时文件夹之前允许的最大字节数。

pom.xml配置

<dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
        </dependency>
		
		<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>coomons-fileupload</artifactId>
		<version>1.3.1</version>
</dependency>

spring上传文件的代码编写

@Controller
public class UploadControl {
	
	
	@RequestMapping(value="/form")
	public ModelAndView user(){
		 ModelAndView modelAndView =new ModelAndView("upLoad", "user",new User());
		 return modelAndView;
	}
	
@RequestMapping(value="/upload")
  public ModelAndView processUser(User user,HttpServletRequest request) throws Exception{
	  ModelAndView modelAndView = new ModelAndView();
	  load(request);
	  modelAndView.addObject("username",user.getName());
	  modelAndView.addObject("fileLength", user.getFile().getBytes().length);
	  modelAndView.addObject("message", "hello reader");
	  modelAndView.setViewName("helloReader");
    return modelAndView;
  }
  
  private void load(HttpServletRequest request) throws IllegalStateException, IOException{

      long  startTime=System.currentTimeMillis();
      //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
     CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
             request.getSession().getServletContext());
     //检查form中是否有enctype="multipart/form-data"
     if(multipartResolver.isMultipart(request))
     {
         //将request变成多部分request
         MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
        //获取multiRequest 中所有的文件名
         Iterator iter=multiRequest.getFileNames();
          
         while(iter.hasNext())
         {
             //一次遍历所有文件
             MultipartFile file=multiRequest.getFile(iter.next().toString());
             if(file!=null)
             {
                 String path=request.getServletContext().getRealPath("/tmp/")+file.getOriginalFilename();
                 System.out.println(path);
                 //上传
                 file.transferTo(new File(path));
             }
              
         }
        
     }
     long  endTime=System.currentTimeMillis();
     System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");

  }
  
}

User.java

package com.tzg.ch303;

import org.springframework.web.multipart.MultipartFile;

public class User {
   private String name;
   private MultipartFile file;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public MultipartFile getFile() {
	return file;
}
public void setFile(MultipartFile file) {
	this.file = file;
}
   
}

文件配置

前端代码

  <table>
    <tr>
    <td>Name</td>
    <td><mvc:input path="name"/></td>
    </tr>
    <tr>
      <td>Choose File</td>
      <td><mvc:input type="file" path="file"/>
    </tr>
    <tr>
      <td colspan="2"><input type="submit" value="submit"></td>
    </tr>
  </table>

 

 

 

 

3.9异常处理

3.10实现国际化

3.11使用主题

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值