jsp之servlet初识

最近几天,天气阴晴不定,雨时断时续,心情也是不太好,老是犯困,效率也不太高,看来是放松了自己,肚子上的肉还是没有减下来,学习的动力也没有以前足了。看到妹子在备战即将到来的教

师资格证的考试,心里也是对自己的放松感到愧疚,那就学习吧。前段时间学习了web请求的类型,以及请求和响应的相关知识。现在大部分针对的都是B/

S结构的,通过浏览器去与用户交互。现在更深入的去了解下整个请求响应的过程。

现在我们已经通过MyEclipse新建了一个web-project,src目录里面存放servlet相关java文件,在容器配置好后,将会编译后存放在webapps-webINF-classes里面。WebRoot目录下放置资源文件,也会存放在容器webapps中。
接下来我们来分析下一个请求怎样输出在浏览器,以简单的登录注册为例。首先,在浏览器访问一个地址localhost:8080/blog/login;然后请求会在web.xml文件中解析,里面servlet映射里面的url-partting有没有对应的/login地址,有的话找出对应的servlet-name,然后根据servlet-name(servlet注册)找到对应的包下面的servlet程序地址,然后执行doGet或者doPost方法。

具体实现代码:
LoginResServlet.java

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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.xieth.javaweb;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginResServlet extends HttpServlet {
sqlDemo sqlD = null;
@Override
public void init(ServletConfig config) throws ServletException {
try {
sqlD = new sqlDemo();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
String action = req.getParameter("action");
PrintWriter out = resp.getWriter();
// 注册
if (action.equals("Register")) {
String name = req.getParameter("name");
String password = req.getParameter("password");
String passwordProblm = req.getParameter("passwordProblem");
String problemResult = req.getParameter("problemResult");
boolean isEmpty = (name != null && !name.equals("")
&& password != null && !password.equals("")
&& passwordProblm != null && !passwordProblm.equals("")
&& problemResult != null && !problemResult.equals(""));
System.out.println(isEmpty);
if (isEmpty) {
try {
boolean flag = sqlD.InsertData(name, password,
passwordProblm, problemResult);
if (flag) {
out.println("<h1>恭喜你" + name
+ ":注册成功点击<a href='login.html'>登录</a></h1>");
} else {
out.println("<h1>Soory"
+ name
+ ":注册失败,该用户已经存在,点击<a href='Register.html'>重新注册</a></h1>");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
out.println("<h1>所以选项均不可以为空!!!点击<a href='Register.html'>重新注册</h1>");
}
} else { // 登录
String name = req.getParameter("name");
String password = req.getParameter("password");
try {
boolean flag = sqlD.LoginCorrect(name, password);
if (flag) {
out.println("<h1>欢迎你:" + name + "</h1>");
} else {
out.println("<h1>SOrry密码错误!点击重新<a href='login.html'>登录</a></h1>");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
class sqlDemo {
private Connection conn = null;
private Statement statement = null;
public sqlDemo() throws Exception {
conn = getConnection();
statement = conn.createStatement();
}
// 查看登录用户名和密码是否正确
public boolean LoginCorrect(String name, String password) throws Exception {
String sql = "select * from logindemo where name = '" + name + "'";
ResultSet rs = statement.executeQuery(sql);
// 查看是否合法
while (rs.next()) {
if (name.equals(rs.getString("name"))
&& password.equals(rs.getString("password")))
return true;
}
rs.close();
return false;
}
// 插入数据
public boolean InsertData(String name, String password,
String passwordProblm, String problemResult) throws Exception {
String sql = "insert into logindemo values ('" + name + "','"
+ password + "','" + passwordProblm + "','" + problemResult
+ "')";
String isAgainSql = "select name from logindemo where name = '" + name
+ "'";
ResultSet rs = statement.executeQuery(isAgainSql);
// 查看是否用户名重复
while (rs.next()) {
if (rs.getString("name").equals(name)) {
return false;
}
}
statement.executeUpdate(sql);
rs.close();
return true;
}
private Connection getConnection() throws Exception {
String driverClass = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql:///hello?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "123456";
// 注册加载驱动
Class.forName(driverClass);
// 获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
return conn;
}
}

Register.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginResServlet" method="post">
用户名:<input type="text" name="name"> 密码:<input type="password"
name="password"> 密码找回问题:<input type="text"
name="passwordProblem"> 答案:<input type="text"
name="problemResult"> <input type="submit" value="注册">
<input type="hidden" name="action" value="Register">
</form>
</body>
</html>

login.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginResServlet" method="post">
用户名:<input type="text" name="name"> 密码:<input type="password"
name="password"> <input type="submit" value="登录"> <input
type="hidden" name="action" value="login">
</form>
</body>
</html>

web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<servlet>
<!--servlet注册-->
<servlet-name>LoginResServlet</servlet-name>
<servlet-class>com.xieth.javaweb.LoginResServlet</servlet-class>
</servlet>
<!-- servlet映射 -->
<servlet-mapping>
<servlet-name>LoginResServlet</servlet-name>
<url-pattern>/LoginResServlet</url-pattern>
</servlet-mapping>
</web-app>

Share Comments