基于javaweb的SSM+Maven旅游资讯门票网站系统(java+ssm+jsp+mysql+bootstrap)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

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

适用

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

功能说明

172123140509

182123140509

192123140509

202123140509

212123140509

222123140509

242123140509

252123140509

262123140509

基于javaweb的SSM+Maven旅游资讯门票网站系统(java+ssm+jsp+mysql+bootstrap)

前台用户:
user1 123456
景点查看,购票、美食查看等

后台管理员:
admin 123456
功能:景点管理、门票管理、美食管理、订单管理、用户管理

注意:本项目图片是上传在编译后目录(target)下的,如果希望项目迁移过程中图片不丢失,上传后要即时从target目录中拷贝放到源码目录里

毕业设计——旅游网站的设计与实现

1、本系统是一个地方性旅游网站,后台基于SSM框架,前台使用BootStrap、js、jsp实现,数据库试用mysql;

2、功能点分析

1)注册成功会发送邮件,封装了邮件的工具类;

2)注册时候会对密码进行MD5加密;同样每次对密码操作都要先加密;

3)分页使用的是jsp自定义标签;

4)上传图片到项目也是封装好了工具类;

5)自定义拦截器对为登陆用户进行拦截;

6)复杂的业务在于一个景点对应多个门票,想要门票显示在对应的景点下方,要先查询出来景点,再对它遍历,根据id去 寻找门票,当时没有对应所有的景点都设置门票,报了空指针异常

7)通过代码上传图片到项目需要手动刷新,否则访问就是404错误

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

/**
* 显示格式 上一页 1 2 3 4 5 下一页
*/
public class NavigationTag extends TagSupport {


static final long serialVersionUID = 2372405317744358833L;

/**
* request 中用于保存Page<E> 对象的变量名,默认为“page”
*/
private String bean = "page";

/**
* 分页跳转的url地址,此属性必须
*/
private String url = null;

/**
* 显示页码数量
*/
private int number = 5;

@Override
public int doStartTag() throws JspException {
JspWriter writer = pageContext.getOut();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
Page page = (Page)request.getAttribute(bean);
if (page == null)
return SKIP_BODY;
url = resolveUrl(url, pageContext);
try {
//计算总页数
int pageCount = page.getTotal() / page.getSize();
if (page.getTotal() % page.getSize() > 0) {
pageCount++;
}
writer.print("<nav><ul class=\"pagination\">");
//显示“上一页”按钮
if (page.getPage() > 1) {
String preUrl = append(url, "page", page.getPage() - 1);
preUrl = append(preUrl, "rows", page.getSize());
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
        return "redirect:/managerLoginPage";
}

/**
* 管理员注销
* @param request
* @return
*/
@RequestMapping(value = "/managerLogout")
public String logout(HttpServletRequest request){
HttpSession session = request.getSession();
//从session中将user删除
session.removeAttribute("user");
return "manage/login";
}
}



@Controller
public class TicketController {
@Autowired
TicketService ticketService;
@Autowired
ScenicService scenicService;

/**
* 管理员获得景点门票列表
* @param model
* @param vo
* @return
*/
@RequestMapping(value = "/manageTicket")
public String getTicketPage(Model model,QueryVo vo){
Page<Ticket> page = ticketService.selectTicketPageByQueryVo(vo);
model.addAttribute("page", page);
model.addAttribute("name",vo.getName());
return "manage/ticket";
}

@RequestMapping(value = "/deleteTicket")
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
 * @param activeCode
* @return
*/
@RequestMapping(value = "/active", method = RequestMethod.GET)
public String active(Model model,String activeCode){
int i = userService.active(activeCode);
if(i==1) {
return "user/login";//激活成功到界面
}
return "user/register";//激活失败跳转到注册界面
}

/**
* 用户激活
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/logout")
public String logout(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession();
//从session中将user删除
session.removeAttribute("user");

//将存储在客户端的cookie删除掉
Cookie cookie_username = new Cookie("cookie_username","");
cookie_username.setMaxAge(0);
//创建存储密码的cookie
Cookie cookie_password = new Cookie("cookie_password","");
cookie_password.setMaxAge(0);

response.addCookie(cookie_username);
response.addCookie(cookie_password);

return "user/login";
}


/**
* 管理员查看所有用户
*/
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
@RequestMapping(value = "/manageTicket")
public String getTicketPage(Model model,QueryVo vo){
Page<Ticket> page = ticketService.selectTicketPageByQueryVo(vo);
model.addAttribute("page", page);
model.addAttribute("name",vo.getName());
return "manage/ticket";
}

@RequestMapping(value = "/deleteTicket")
public @ResponseBody
String deleteScenic(Integer id){
//删除
ticketService.deleteById(id);
return "OK";
}

@RequestMapping(value = "/addTicket")
public String insert(Ticket ticket){
ticketService.addTicket(ticket);
return "redirect:/manageTicket";
}

/**
* 管理员修改门票信息
* @param
* @return
*/
@RequestMapping(value = "/updateTicket")
public @ResponseBody String update(Ticket ticket){
//插入
ticketService.updateTicket(ticket);
return "OK";
}

/**
* 根据id获得门票信息
* @param
* @return
*/
@RequestMapping(value = "/getTicketById")
public @ResponseBody
Ticket getTicketById(Integer id){
return ticketService.getTicketById(id);
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
        }
//显示“下一页”按钮
if (page.getPage() < pageCount) {
String nextUrl = append(url, "page", page.getPage() + 1);
nextUrl = append(nextUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + nextUrl + "\">下一页</a></li>");
} else {
writer.print("<li class=\"disabled\"><a href=\"#\">下一页</a></li>");
}
writer.print("</nav>");
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}

private String append(String url, String key, int value) {

return append(url, key, String.valueOf(value));
}

/**
* 为url 参加参数对儿
*
* @param url
* @param key
* @param value
* @return
*/
private String append(String url, String key, String value) {
if (url == null || url.trim().length() == 0) {
return "";
}

if (url.indexOf("?") == -1) {
url = url + "?" + key + "=" + value;
} else {
if(url.endsWith("?")) {
url = url + key + "=" + value;
} else {
url = url + "&amp;" + key + "=" + value;
}
}

return url;
}

/**
* 为url 添加翻页请求参数
*
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
 *
* @param response
* @param session
*/
@RequestMapping("/getImage")
public void generate(HttpServletResponse response, HttpSession session) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
String verifyCodeValue = drawImg(output);

session.setAttribute("verifyCodeValue", verifyCodeValue);

try {
ServletOutputStream out = response.getOutputStream();
output.writeTo(out);
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 绘画验证码
*
* @param output
* @return
*/
private String drawImg(ByteArrayOutputStream output) {
String code = "";
// 随机产生4个字符
for (int i = 0; i < 4; i++) {
code += randomChar();
}
int width = 70;
int height = 25;
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_3BYTE_BGR);
Font font = new Font("Times New Roman", Font.PLAIN, 20);
// 调用Graphics2D绘画验证码
Graphics2D g = bi.createGraphics();
g.setFont(font);
Color color = new Color(66, 2, 82);
g.setColor(color);
g.setBackground(new Color(226, 226, 240));
g.clearRect(0, 0, width, height);
FontRenderContext context = g.getFontRenderContext();


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