基于javaweb的JSP+Servlet仿天猫网上商城项目(java+jsp+servlet+mysql+ajax)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

080023212402

090023212402

100023212402

110023212402

120023212402

基于javaweb的JSP+Servlet仿天猫网上商城项目(java+jsp+servlet+mysql+ajax)

一、项目简述

功能:

前台:

  • 用户模块

  • 分类模块

  • 商品模块

  • 购物车模块

  • 订单模块

后台:

  • 管理员模块

  • 分类管理模块

  • 商品管理模块

  • 订单模块

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。

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
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try{
/* 获取分页信息 */
int start = 0;
int count = 5;
try{
start = Integer.parseInt(req.getParameter("page.start"));
count = Integer.parseInt(req.getParameter("page.count"));
} catch(Exception e) {

}

Page page = new Page(start, count);

/* 借助反射,调用对应的方法 */
String method = (String)req.getAttribute("method");
Method m = this.getClass().getMethod(method, HttpServletRequest.class, HttpServletResponse.class, Page.class);
String redirect = m.invoke(this, req, resp, page).toString();

/* 根据方法的返回值,进行相应的客户端、服务端跳转,或仅输出字符串 */
if(redirect.startsWith("@")){
resp.sendRedirect(redirect.substring(1));
} else if(redirect.startsWith("%")){
resp.getWriter().print(redirect.substring(1));
} else {
req.getRequestDispatcher(redirect).forward(req, resp);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}

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 * 1024);

List items = upload.parseRequest(request);
Iterator iter = items.iterator();

while(iter.hasNext()){
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

public class CategoryServlet extends BaseBackServlet {

@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了category add方法");

Map<String,String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);

System.out.println(params);
String name = params.get("name");
Category c = new Category();
c.setName(name);
categoryDAO.add(c);

File imageFolder = new File(request.getSession().getServletContext().getRealPath("img/category"));
File file = new File(imageFolder, c.getId() + ".jpg");

try{
if(null != is && 0 != is.available()){
try(
FileOutputStream fos = new FileOutputStream(file);
){
byte[] b = new byte[1024 * 1024];
int length = 0;
while(-1 != (length = is.read(b))){
fos.write(b, 0, length);
}
fos.flush();
//通过以下代码,将文件保存为jsp格式
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "@admin_category_list";
}

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
 */
public String checkLogin(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
if (user != null) {
return "%success";
}
return "%fail";
}

/**
* 模态登录框通过 Ajax 方法登录
*
* @param request
* @param response
* @param page
* @return
*/
public String loginAjax(HttpServletRequest request, HttpServletResponse response, Page page) {
String name = request.getParameter("name");
String password = request.getParameter("password");

User user = userDAO.get(name, password);
if (user == null)
return "%fail";

request.getSession().setAttribute("user", user);
return "%success";
}

/**
* 显示产品页
*
* @param request
* @param response
* @param page
* @return
*/
public String product(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 ForeServlet product方法");

int pid = Integer.parseInt(request.getParameter("pid"));
Product p = productDAO.get(pid);

// 获取产品的single图片和detail图片
List<ProductImage> productSingleImages = productImageDAO.list(p, ProductImageDAO.type_single);
List<ProductImage> productDetailImages = productImageDAO.list(p, ProductImageDAO.type_detail);
p.setProductSingleImages(productSingleImages);
p.setProductDetailImages(productDetailImages);
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

public class ForeAuthFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;

String contextPath = request.getSession().getServletContext().getContextPath();

String[] noNeedAuthPage = new String[]{
"home",
"homepage",
"checkLogin",
"register",
"loginAjax",
"login",
"product",
"category",
"search"};

String uri = request.getRequestURI();
uri = StringUtils.remove(uri, contextPath);
if (uri.startsWith("/fore") && !uri.startsWith("/foreServlet")) {
String method = StringUtils.substringAfterLast(uri, "/fore");
if (!Arrays.asList(noNeedAuthPage).contains(method)) {
User user = (User) request.getSession().getAttribute("user");
if (null == user) {
response.sendRedirect("login.jsp");
return;
}
}
}

filterChain.doFilter(request, response);
}

@Override
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
        } catch (InvocationTargetException e) {
e.printStackTrace();
}
}

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 * 1024);

List items = upload.parseRequest(request);
Iterator iter = items.iterator();

while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if(!item.isFormField()){
//获取上传文件的输入流
is = item.getInputStream();
} else {
String paramName = item.getFieldName();
String paramValue = item.getString();
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
params.put(paramName, paramValue);
}
}

} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}
package servlet;



项目链接:
https://javayms.github.io?id=391422302105200gq
https://javayms.pages.dev?id=391422302105200gq