本人是菜鸟,刚接触Java也没多长时间,就是希望能把自己学到的和大家分享而已,如有错误,还望大鸟给予指正。
距离上次写文章已经有几个月时间了,期间找工作,做项目的,虽然累点,但挺充实的。
就把在做项目时学到的一些东西和大家进行分享吧。
Spring MVC 注解实现。
ajax json 返回格式。
Spring tiles 拼装页面。
json:
就不给大家上网copy了.就是一种格式.例如:
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
为什么用json:起始俺也就一知半解,单很显著的好处就是传输的数据量少了.
tiles:
其实就是拼装jsp.有什么好处呢?好处就是你可以独立的开发菜单部分,内容部分等等,使用时只需要拼装在一起就可以了
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
text/plain;charset=UTF-8
/WEB-INF/tiles-configueation.xml
/WEB-INF/jsp/information/information-tiles.xml
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
主页
Hello, Welcome to come here.
Now, click the button.
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Insert title here
404! 你懂的
<%@ 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
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
登录页面
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;
}
}
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";
}
}
}
<%@ 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进行对比
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;
}
}
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) {
}
}
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.而且代码也更简介了.
点击打开链接