Spring MVC 进阶1

简介:

本人是菜鸟,刚接触Java也没多长时间,就是希望能把自己学到的和大家分享而已,如有错误,还望大鸟给予指正。

距离上次写文章已经有几个月时间了,期间找工作,做项目的,虽然累点,但挺充实的。

就把在做项目时学到的一些东西和大家进行分享吧。


涉及到的内容:

      Spring MVC 注解实现。

ajax json 返回格式。

Spring tiles 拼装页面。


需要的lib有:


名词解释:

json:

就不给大家上网copy了.就是一种格式.例如:

{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}

为什么用json:起始俺也就一知半解,单很显著的好处就是传输的数据量少了.

tiles:

其实就是拼装jsp.有什么好处呢?好处就是你可以独立的开发菜单部分,内容部分等等,使用时只需要拼装在一起就可以了


源代码:


1. 在web.xml中添加如下代码:

  
	    spring-dispatcher  
	    org.springframework.web.servlet.DispatcherServlet  
	      
	        contextConfigLocation  
	        /WEB-INF/spring-configuration.xml  
	      
	  

	
		spring-dispatcher
		/
	
	
	   
      
        CharacterEncodingFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
          
            encoding  
            UTF-8  
          
          
            forceEncoding  
            true  
          
      
      
        CharacterEncodingFilter  
        /*  
    
  
  	
 	
		60
	
  
  	
  	
		404
		/WEB-INF/jsp/error/404.jsp
	
	
		500
		/WEB-INF/jsp/error/500.jsp
	


2. 在spring-configuration中

  

    
    
    
    
    
    

	
	
	   
			
			
				
					
						text/plain;charset=UTF-8
					
				
			
			
			
				
					
					
				
			
		
	
	
	
	
	
	
	
	

	
	
	
	
	
		
		
		
		
	

	
	
		
		
	
	
		
			
				/WEB-INF/tiles-configueation.xml
				/WEB-INF/jsp/information/information-tiles.xml
			
		
	


3. tiles-configueation.xml





	
	
		
		
	


4. information-tiles.xml





	
	
		
		
		
		
	    
	


5. sample_template.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>



	
	<tiles:getAsString name="jspTitle"/>
	
	
	
	


	
	

本人css太差了,要是有哪位朋友能帮我改进改进就好了,这样让别人看起来更直观一些.

6. index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




主页


	Hello, Welcome to come here.
	Now, click the button.
	

7. 404.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




Insert title here


	404! 你懂的


8. part1.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
this is part1


9. login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>




登录页面


	
用户名:
密 码 :

请输入用户名密码


10. UserEntity.java

package com.spring.entity;

public class UserEntity {
    private String loginName;
    private String pwd;
    private String name;

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


11. LoginController.java

package com.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.spring.entity.UserEntity;

//@Controller 表明该Bean是个Controller层
//表示请求地址是login时,被该Controller捕获
@Controller
@RequestMapping(value = "/login")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String jumpPage() {
        // JSP方式的显示,显示的jsp路径是 "/WEB-INF/jsp/login/login.jsp"(在spring-configuration中定义了)
        return "login/login";
    }

    // 注意:这里的@RequestMapping的value值不能与@RequestMapping(value = "/login")中的value值一样
    // 当url是/login/checkLogin时,执行该方法,并且是POST请求才可以
    @RequestMapping(value = "/checkLogin", method = RequestMethod.POST)
    public String login(@ModelAttribute("UserEntity") UserEntity user, Model model) {

        // 在这里我们用了@ModelAttribute和Model.
        // 用@ModelAttribute是将值放入session中,对应login.jsp中的value="${UserEntity.loginName}".
        // 为什么这么写呢?首先看看如果不加"@ModelAttribute("UserEntity")"这段话会有什么结果.
        // 结果就是如果输入错误,页面重新跳转到login.jsp.结果刚才用户填写的数据都没了(例如现在的密码是不是清空了),
        // 如果这是个注册页面,用户辛辛苦苦填完信息,提交后一个错误导致所有数据清空,需要全部重新填写,用户会不会发疯呢

        // 在这里用了Bean UserEntity来存放请求数据,只要变量名相同,Spring会自动帮我们将变量存到该Bean中

        if (user.getLoginName().equals("mizhiwu") && user.getPwd().equals("mizhiwu")) {
            // tiles的显示,会先去"/WEB-INF/tiles-configueation.xml"中查询(在spring-configuration中定义了)
            return "infomation/show";
        } else {
            model.addAttribute("error", "用户名或密码不正确");
            return "login/login";
        }
    }
}


12. show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
这是主菜单
tiles集成后的结果相当于一个完整的jsp页面,请和template.jsp进行对比
输入一个数


13. ResultEntity.java

package com.spring.entity;

public class ResultEntity {
    private boolean success;
    private String message;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public ResultEntity(boolean flag) {
        success = flag;
    }

}


14. CheckController.java

package com.spring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.spring.entity.ResultEntity;
import com.spring.service.CheckService;

@Controller
@RequestMapping(value = "/check")
public class CheckController {

    // 这里就用到了之前定义的default-autowire="byName"
    // spring自动装载了名字为CheckService的类给这个属性,就不需要我们来new CheckService对象了
    @Autowired
    CheckService checkService;

    // 在spring-configuration.xml中因为已经集成了jackson,所以@ResponseBody返回的是一个json对象.
    // 在这里用到了jackson将Bean转换成json的方法
    @ResponseBody
    @RequestMapping(value = "/isPositiveNumber/{number}")
    public ResultEntity checkIsPositiveNumber(@PathVariable int number) {

        // @PathVariable表示url中的值,在这里只是告诉大家也可以这么取值而已

        return checkService.checkIsPositiveNumber(number) ? new ResultEntity(true) : new ResultEntity(false);
    }

    // @RequestParam表示请求时的参数,如果单个列举,而不用Bean获得(LoginController中login方法的UserEntity user Bean)
    // 表示此参数不可缺少,如果想变成非必传参数,则加上required = false即可
    public void test(@RequestParam String param1, @RequestParam(required = false) String param2,
            @RequestParam(value = "id[]", required = false) String[] ids) {
    }
}


15. CheckService.java

package com.spring.service;

import org.springframework.stereotype.Service;

@Service
public class CheckService {

    public boolean checkIsPositiveNumber(int number) {
        if (number >= 0) {
            return true;
        } else {
            return false;
        }
    }
}

通过以上方法,我们避免了在spring.xml中定义臃肿的controller.而且代码也更简介了.


源代码下载:

点击打开链接


你可能感兴趣的:(Spring)