-
Notifications
You must be signed in to change notification settings - Fork 124
Expand file tree
/
Copy pathBaseBackServlet.java
More file actions
119 lines (98 loc) · 5.17 KB
/
BaseBackServlet.java
File metadata and controls
119 lines (98 loc) · 5.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package tmall.servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import tmall.dao.*;
import tmall.util.Page;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public abstract class BaseBackServlet extends HttpServlet {
public abstract String add(HttpServletRequest request, HttpServletResponse response, Page page);
public abstract String delete(HttpServletRequest request, HttpServletResponse response, Page page);
public abstract String edit(HttpServletRequest request, HttpServletResponse response, Page page);
public abstract String update(HttpServletRequest request, HttpServletResponse response, Page page);
public abstract String list(HttpServletRequest request, HttpServletResponse response, Page page);
protected CategoryDAO categoryDAO = new CategoryDAO();
protected OrderDAO orderDAO = new OrderDAO();
protected OrderItemDAO orderItemDAO = new OrderItemDAO();
protected ProductDAO productDAO = new ProductDAO();
protected ProductImageDAO productImageDAO = new ProductImageDAO();
protected PropertyDAO propertyDAO = new PropertyDAO();
protected PropertyValueDAO propertyValueDAO = new PropertyValueDAO();
protected ReviewDAO reviewDAO = new ReviewDAO();
protected UserDAO userDAO = new UserDAO();
@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
try {
/*获取分页信息*/
int start = 0;
int count = 5;
try {
start = Integer.parseInt(request.getParameter("page.start"));
} catch (Exception e) {
}
try {
count = Integer.parseInt(request.getParameter("page.count"));
} catch (Exception e) {
}
Page page = new Page(start, count);
String method = (String) request.getAttribute("method"); //假设method = list,Servlet = CategoryServlet
/**
* 借助反射,调用对应的方法利用反射,调用对应业务类的方法,注意此处的 this 并不是指本类的对象,
* 而是具体的业务类,如 CategoryServlet 对象,为什么呢?
* 因为上面的 Filter 跳转目的地是 CategoryServlet
* 只是CategoryServlet 调用了父类 BaseBackServlet 的 service 方法而已
*/
Method m = this.getClass().getMethod(method, javax.servlet.http.HttpServletRequest.class,
javax.servlet.http.HttpServletResponse.class, Page.class); // CategoryServlet.list(..)
String redirect = m.invoke(this, request, response, page).toString(); // redirect = "admin/listCategory.jsp";
/*根据方法的返回值,进行相应的客户端跳转,服务端跳转,或者仅仅是输出字符串*/
if (redirect.startsWith("@"))
response.sendRedirect(redirect.substring(1)); // 客户端跳转,即重定向,原 request 会失效
else if (redirect.startsWith("%"))
response.getWriter().print(redirect.substring(1)); // 输出字符串
else
request.getRequestDispatcher(redirect).forward(request, response); //服务端跳转
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
public InputStream parseUpload(HttpServletRequest request, Map<String, String> params) {
InputStream is = null;
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的大小限制为10M
factory.setSizeThreshold(1024 * 10240);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
System.out.println("上传文件:进入获取输入流。!item.isFormField为true");
// item.getInputStream() 获取上传文件的输入流
is = item.getInputStream();
} else {
System.out.println("上传文件:未进入获取输入流。!item.isFormField为false");
String paramName = item.getFieldName();
String paramValue = item.getString();
System.out.println(paramName + ":" + paramValue);
paramValue = new String(paramValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
params.put(paramName, paramValue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return is;
}
}