要求:首先编写一个登录页面,以此来用于管理员和用户登录。
设置管理员登录,Login ID:Admin Password:admin123;
设置用户1登录, Login ID:User1 Password:user123。
如果是管理员登录的话,登录进去显示“Welcome Admin”(欢迎管理员),并列出用户 名单。
如果是用户1登录的话,登录进去显示“Welcome User1”(欢迎用户1)。
1. 编写index.html页面
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>Login Page</h1>
<form action="login">
<table border="0">
<tr>
<td>Login ID</td>
<td><input type="text" name="txtLoginId" value="" placeholder="Please enter your id" required/></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="txtPass" value="" placeholder="Please enter your password" required/></td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="Login" /></td>
</tr>
</table>
</form>
</body>
</html>
运行结果如下:
2. 编写LoginServlet
(在这里,LoginServlet起到过渡作用)
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package loginpkg;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author 小罗
*/
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uid = request.getParameter("txtLoginId");
String pass = request.getParameter("txtPass");
if(uid.equals("admin") && pass.equals("Admin123") || uid.equals("User1") && pass.equals("user123")){
//Go to ext page/servlet
//可以用if-else,也可以用switch-case
ServletContext ctx = getServletContext();
ctx.setAttribute("username", uid);
if(uid.equals("Admin")){
//Go to AdminServlet
response.sendRedirect("adminpage");
}
else{
//Go toUserServlet
response.sendRedirect("userpage");
}
}
else{
//Go back to login page
response.sendRedirect("index.html?error=ture");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
这里response.sendRedirect()方法是是重定向网页,向浏览器发送一个特殊的Header,然后由浏览器来做重定向,转到指定的页面。
其次在这一步我们之前先创建好了UserServlet.java和AdminServlet.java,在web.xml里面修改了其URL分别为userpage和adminpage。
3. 编写UserServlet
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package loginpkg;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author 小罗
*/
public class UserServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet UserServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Welcome " + getServletContext().getAttribute("username") + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
这时,在Login页面输入 Login ID:User1,Password:user123,就会通过LoginServlet过渡跳转到UserServlet,并显示出“Welcome User1”。
4. 编写AdminServlet
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package loginpkg;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author 小罗
*/
public class AdminServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet AdminServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Welcome " + getServletContext().getAttribute("username") + "</h1>");
//或者用下面两条代码
// ServletContext ctx = getServletContext();
// out.println("<h1>Welcome " + ctx.getAttribute("username") + "</h1>");
out.println("</body>");
out.println("</html>");
out.println("List of users:<br>");
String[] userList = new String[]{"Admin: Admin", "User: User1"};
for(int i = 0; i < userList.length; i++){
out.println(" " + userList[i] + "<br>");
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
这时,在Login页面输入 Login ID:Admin,Password:admin123,就会通过LoginServlet过渡跳转到AdminServlet,并显示出“Welcome Admin”以及用户名单。