本类扩展了Controller的返回值类型(包括html,javascript,json,页面重定向和文件下载等),还提供了url取值,对象取值等方法,还可以方法内直接用getRequest()方法取request对象,不需要通过手动注入参数列表。使用方法也是非常简单,直接继承本类就可以,不用引任何jar包和写任何配置文件。
BaseController.java
public class BaseController {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private static ObjectMapper objectMapper = new ObjectMapper();
private static final String PATH_WITHIN_HANDLER_MAPPING_ATTR = "org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping";
@ModelAttribute
protected void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
this.request = request;
this.response = response;;
this.session = request.getSession();;
}
protected HttpServletRequest getRequest() {
return request;
}
protected HttpServletResponse getResponse() {
return response;
}
protected HttpSession getSession() {
return session;
}
protected PrintWriter getWriter(String contentType, String contentEncoding) throws Exception {
getResponse().setContentType(contentType + ";charset=" + contentEncoding);
return getResponse().getWriter();
}
protected ServletOutputStream getOutputStream(String contentType, String fileName, String contentEncoding) throws Exception {
getResponse().setContentType(contentType);
getResponse().setHeader("content-disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, contentEncoding));
return getResponse().getOutputStream();
}
protected void Page(String path, String prefix, String suffix) {
try {
path = prefix + path + suffix;
getRequest().getRequestDispatcher(path).forward(getRequest(), getResponse());
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Page(String path, String prefix) {
Page(path, prefix, ".jsp");
}
protected void Page(String path) {
Page(path, "/WEB-INF/view/", ".jsp");
}
protected void Content(String content, String contentType, String contentEncoding) {
try {
getWriter(contentType, contentEncoding).write(content);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Content(String content, String contentEncoding) {
Content(content, "text/html", contentEncoding);
}
protected void Content(String content) {
Content(content, "UTF-8");
}
protected void JavaScript(String javaScript, String contentType, String contentEncoding) {
try {
getWriter(contentType, contentEncoding).write(javaScript);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void JavaScript(String javaScript, String contentEncoding) {
JavaScript(javaScript, "text/javascript", contentEncoding);
}
protected void JavaScript(String javaScript) {
JavaScript(javaScript, "UTF-8");
}
protected void Json(String json, String contentType, String contentEncoding) {
try {
getWriter(contentType, contentEncoding).write(json);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Json(String json, String contentEncoding) {
Json(json, "application/json", contentEncoding);
}
protected void Json(String json) {
Json(json, "UTF-8");
}
protected void Json(Object data, String contentType, String contentEncoding) {
try {
Json(new ObjectMapper().writeValueAsString(data), contentType, contentEncoding);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Json(Object data, String contentEncoding) {
try {
Json(new ObjectMapper().writeValueAsString(data), contentEncoding);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Json(Object data) {
try {
Json(new ObjectMapper().writeValueAsString(data));
} catch (Exception e) {
e.printStackTrace();
}
}
protected void Redirect(String url) {
try {
getResponse().sendRedirect(url);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void FileContent(byte[] fileContents, String fileDownloadName, String contentType, String contentEncoding) {
ServletOutputStream out2 = null;
try {
out2 = getOutputStream(contentType, fileDownloadName, contentEncoding);
out2.write(fileContents);
out2.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out2 != null)
try {
out2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void FileContent(byte[] fileContents, String fileDownloadName, String contentEncoding) {
FileContent(fileContents, fileDownloadName, "application/zip", contentEncoding);
}
protected void FileContent(byte[] fileContents, String fileDownloadName) {
FileContent(fileContents, fileDownloadName, "UTF-8");
}
protected void FileStream(InputStream fileStream, String fileDownloadName, String contentType, String contentEncoding) {
int status = 0;
byte[] b = new byte[1024];
InputStream in = null;
ServletOutputStream out2 = null;
try {
in = fileStream;
out2 = getOutputStream(contentType, fileDownloadName, contentEncoding);
while (status != -1) {
status = in.read(b);
out2.write(b);
}
out2.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (out2 != null)
try {
out2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void FileStream(InputStream fileStream, String fileDownloadName, String contentEncoding) {
FileStream(fileStream, fileDownloadName, "application/zip", contentEncoding);
}
protected void FileStream(InputStream fileStream, String fileDownloadName) {
FileStream(fileStream, fileDownloadName, "UTF-8");
}
protected void FilePath(String filePath, String fileDownloadName, String contentType, String contentEncoding) {
int status = 0;
byte[] b = new byte[1024];
FileInputStream in = null;
ServletOutputStream out2 = null;
String fileName;
if (org.springframework.util.StringUtils.isEmpty(fileDownloadName)) {
File tempFile = new File(filePath);
fileName = tempFile.getName();
} else {
fileName = fileDownloadName;
}
try {
in = new FileInputStream(filePath);
out2 = getOutputStream(contentType, fileName, contentEncoding);
while (status != -1) {
status = in.read(b);
out2.write(b);
}
out2.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (out2 != null)
try {
out2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void FilePath(String filePath, String fileDownloadName, String contentEncoding) {
FilePath(filePath, fileDownloadName, "application/zip", contentEncoding);
}
protected void FilePath(String filePath, String fileDownloadName) {
FilePath(filePath, fileDownloadName, "UTF-8");
}
protected void FilePath(String filePath) {
FilePath(filePath, null);
}
protected <T> T getModel(Class<T> modelClass, String modelName) {
ObjectNode objectNode = objectMapper.createObjectNode();
String modelNameAndDot = !org.springframework.util.StringUtils.isEmpty(modelName) ? modelName + "." : null;
Map<String, String[]> requestMap = getRequest().getParameterMap();
for (Map.Entry<String, String[]> entry : requestMap.entrySet()) {
String paraName = entry.getKey();
String attrName;
if (modelNameAndDot != null) {
if (paraName.startsWith(modelNameAndDot)) {
attrName = paraName.substring(modelNameAndDot.length());
} else {
continue;
}
} else {
if (!paraName.contains(".")) {
attrName = paraName;
} else {
continue;
}
}
String[] paraValueArray = entry.getValue();
String paraValue = (paraValueArray != null && paraValueArray.length > 0) ? paraValueArray[0] : null;
objectNode.put(attrName, paraValue);
}
try {
return objectMapper.treeToValue(objectNode, modelClass);
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
protected <T> T getModel(Class<T> modelClass) {
return getModel(modelClass, null);
}
protected String getPara(int index) {
String pathWithinHandlerMapping = getRequest().getAttribute(PATH_WITHIN_HANDLER_MAPPING_ATTR).toString();
String[] paraArr = split(pathWithinHandlerMapping, '/');
if (paraArr.length > index) {
return paraArr[index];
}
return "";
}
protected String getPara(String paraName) {
return getRequest().getParameter(paraName);
}
protected void setObject(String objectName, Object object) {
getRequest().setAttribute(objectName, object);
}
protected Object getObject(String objectName) {
return getRequest().getAttribute(objectName);
}
private static String[] split(final String str, final char separatorChar) {
return splitWorker(str, separatorChar, false);
}
private static String[] splitWorker(final String str, final char separatorChar, final boolean preserveAllTokens) {
// Performance tuned for 2.0 (JDK1.4)
if (str == null) {
return null;
}
final int len = str.length();
if (len == 0) {
return new String[0];
}
final List<String> list = new ArrayList<String>();
int i = 0, start = 0;
boolean match = false;
boolean lastMatch = false;
while (i < len) {
if (str.charAt(i) == separatorChar) {
if (match || preserveAllTokens) {
list.add(str.substring(start, i));
match = false;
lastMatch = true;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}
if (match || preserveAllTokens && lastMatch) {
list.add(str.substring(start, i));
}
return list.toArray(new String[list.size()]);
}
}
TestController.java
@Controller
public class TestController extends BaseController {
/*测试html*/
@RequestMapping("/testContent")
public void testContent() {
Content("<font color='red'>testContent</font>");
}
/*测试javascript*/
@RequestMapping("/testJavascript")
public void testJavascript() {
JavaScript("alert('testJavascript');");
}
/*测试json*/
@RequestMapping("/testJson")
public void testJson() {
User user = new User();
user.setUserName("testJson");
Json(user);
}
/*测试重定向*/
@RequestMapping("/testRedirect")
public void testRedirect() {
Redirect("http://www.baidu-x.com/?q=%E5%9B%A0%E9%85%B7%E6%95%99%E8%82%B2");
}
/*测试url传值*/
/*http://127.0.0.1/testGetPara/hello/world?test=2333*/
@RequestMapping("/testGetPara/{111}/{222}")
public void testGetPara2() {
// String para1 = getPara(0); // para1对应的是testGetPara2
String para2 = getPara(1);
String para3 = getPara(2);
// System.out.println("==>>> " + para1);
System.out.println("==>>> " + para2);
System.out.println("==>>> " + para3);
String para = getPara("test");
System.out.println("==>>> " + para);
}
/*测试对象传值*/
/*http://127.0.0.1/testGetModel?userName=hello&user2.userName=world*/
@RequestMapping("/testGetModel")
public void testGetModel() {
User user1 = getModel(User.class);
User user2 = getModel(User.class, "user2");
System.out.println("==>>> " + user1.getUserName());
System.out.println("==>>> " + user2.getUserName());
}
/*测试文件下载(文件名)*/
@RequestMapping("/testFilePath")
public void testFilePath() {
String filePath = "F:\\idea\\inxedu\\demo_inxedu_open\\src\\main\\webapp\\350ClientV5.3.exe";
FilePath(filePath);
}
/*测试文件下载(流)*/
@RequestMapping("/testFileStream")
public void testFileStream() throws Exception {
String filePath = "F:\\idea\\inxedu\\demo_inxedu_open\\src\\main\\webapp\\350ClientV5.3.exe";
FileInputStream fileInputStream = new FileInputStream(filePath);
FileStream(fileInputStream, "350ClientV5.3.exe");
}
/*测试文件下载(字节)*/
@RequestMapping("/testFileContent")
public void testFileContent() throws Exception {
String filePath = "F:\\idea\\inxedu\\demo_inxedu_open\\src\\main\\webapp\\350ClientV5.3.exe";
File file = new File(filePath);
long len = file.length();
byte[] bytes = new byte[(int) len];
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
int r = bufferedInputStream.read(bytes);
bufferedInputStream.close();
FileContent(bytes, "350ClientV5.3.exe");
}
}