0%

Java Web项目实战-五

上次完成了login页面,把表单内容提交到后台servlet,所以现在就来写后台的判断

首先写好好一个User的Java bean,这个我前面已经完成了
然后,因为最近在练习Mybatis的使用,那这里我也用Mybatis

1.mybatis-config.xml完成与数据库的连接

在src文件夹创建mybatis-config.xml文件,内容如下:

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
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="controller"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3333/article?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="mysqladmin" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="controller/User.xml"/>
</mappers>
</configuration>

这里有一个很坑很坑的地方,困扰了我好几天。就是

1
2
3
<typeAliases>
<package name="controller"/>
</typeAliases>

这一句,package name应该是调用mybatis-config的那个文件所在的包名,当时我把controller打成了别的包名,后面各种调试一直出各种莫名其妙的bug比如什么ClassNotFound,知道了真相之后,我只能说,MMP

好了,题外话

2.Mybatis完成MySQL的CURD操作

然后需要写一个操作数据库的User.xml,如下:

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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="controller">
<select id="listUser" resultType="User">
select * from user
</select>

<select id="selectUser" resultType="User">
select * from user where username=#{username} and password=#{password}
</select>


<insert id="addUser" parameterType="User" >
insert into user ( username ) values (#{username})
</insert>


<delete id="deleteUser" parameterType="User" >
delete from user where id= #{id}
</delete>

<select id="getUser" parameterType="String" resultType="User">
select * from user where username = #{username}
</select>

<select id="getPassword" parameterType="String" resultType="User">
select password from user where username = #{username}
</select>
<update id="updateUser" parameterType="User" >
update User set name=#{name} where id=#{id}
</update>
</mapper>

在后面,我将使用getPassword这一句,来查询验证密码是否正确

3.LoginServlet

创建servlet,重写doGet方法:

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
package controller;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class LoginServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public LoginServlet() {
super();
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();


String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
Map<String,Object> params = new HashMap<>();
params.put("username", username);
params.put("password", password);
List<User> us = session.selectList("getPassword",username);
User user = us.get(0);
if(user.getPassword().equals(password)){
request.getRequestDispatcher("/index.jsp").forward(request,response);
}


}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}

到此后台基本功能就写好了

index.jsp

最后是首页,我把之前C#作业给搬过来了,也是用的bootstrap

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
<%@ page language="java" import="java.util.*"  pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<script language="javascript">
function start(){
you = 100;
devil = 100;
var result = document.getElementById("result");
result.innerHTML="start";
}
function heal(){
rd = Math.floor(Math.random()*30);
var tmp = 0;tmp = you+15;
you = you+15-rd;
var result = document.getElementById("result");
if(you>0&&devil>0){
result.innerHTML="你使用了一个血瓶,血量变为"+tmp+"<br/>"+"然而大魔王趁你不备发动攻击<br/>现在你的血量变为"+you+" 大魔王血量为"+devil;}
else if(you<0&&devil>0){
result.innerHTML="你输了,哈哈,辣鸡";}
else if(you>0&&devil<0){
result.innerHTML="你赢了,然而并没有什么奖励";}
else{
result.innerHTML="你和大魔王同归于尽了,大家当做无事发生过";
}

}
function attack(){//传入表单参数
rd1 = Math.floor(Math.random()*30);
rd2 = Math.floor(Math.random()*30);
you = you-rd1;
devil = devil- rd2;
var result = document.getElementById("result");
if(you>0&&devil>0){
result.innerHTML="你上去就是一拳,大魔王剩下血量为"+devil+"<br/>"+"愤怒的大魔王反击,你剩下的血量为"+you;}
else if(you<0&&devil>0){
result.innerHTML="你输了,哈哈,辣鸡";}
else if(you>0&&devil<0){
result.innerHTML="你赢了,然而并没有什么奖励";}
else{
result.innerHTML="你和大魔王同归于尽了,大家当做无事发生过";
}
}
</script>

<title>决斗吧大魔王</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body style="background-image:url(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1491491962000&di=a101e2033883077242ea21ad64dc3444&imgtype=0&src=http%3A%2F%2Fh7.86.cc%2Fwalls%2F20160729%2F1920x1200_88f5b02af13e733.jpg)" >
<div class="container">
<%@include file="./header.jsp" %>
<div class="col-md-6 colum">
<div class="jumbotron">
<h1>拯救地球<br />消灭大魔王</h1>
<p>
某一天,你在上课的路上遇到一只扬言要毁灭世界的大魔王
</p>
<button class="btn btn-primary btn-large" onClick="start()" >开始</button>
<br/>
<button class="btn btn-primary btn-large" onClick="attack()" >攻击</button>
<button class="btn btn-primary btn-large" onClick="heal()" >回血</button>
<br/>
<span id="result">

</span>
</div>
</div>
</div>
<br>
</body>
</html>

其中header.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div class="col-md-12 column" >
<ul class="nav nav-tabs">
<li style="font-size:20px;">
<a href="index.jsp">首页</a>
</li>
<li style="font-size:20px;">
<a href="login.jsp">登陆</a>
</li>
<li style="font-size:20px;">
<a href="#">商店</a>
</li>

</ul>
</div>