持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第三天,[点击查看活动详情] (juejin.cn/post/709970… "juejin.cn/post/709970…")
---20220508
今天上机内容为继续做包,然后我这边对于第11个包进行一个讲解
首先打开所有文件,然后查看源码内容与实验要求
\然后通过这边我们可以看出,其实就只是两个主要页面需要我们理解清楚
第一个页面操作
我们点开login.html文件,可以看到这边就是我们等等会运行的前端页面,老师给的初始文件较为简单,页面也比较粗糙
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录-用户名和密码传参</title>
</head>
<body>
<form action="./LoginServlet" method="post">
用户名: <input type="text" name="username" /><br />
密 码:
<input type="password" name="password" /><br />
<input type="submit" value="登录" />
</form>
</body>
</html>
那么这个就是在我们未作变化之前的登录页面。
我在这边稍微给他修改了一下,将页面进行美化,代码也较为简单,大家可以稍微参考一下
登录页面美化
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录-用户名和密码传参</title>
<style>
html,body{
height: 100%;
}
body{
background: #006666;
}
h1{
color: #FFF;
text-align: center;
}
.container{
margin: 100px auto;
width: 30%;
}
form{
background: #FFF;
height: 300px;
width: 100%;
border-radius: 10px;
position: relative;
}
label{
color: #000;
font-weight: bold;
font-size: 20px;
margin-left: 40px;
}
input{
text-align: left;
margin: 10px;
}
.input{
width: 80%;
height: 35px;
margin-left: 40px;
}
.checkbox{
margin-left: 30px;
}
a{
text-decoration: none;
font-weight: bold;
}
.left{
margin: 20px;
}
.right{
position: absolute;
right: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1>用户登录</h1>
<form action="./LoginServlet" method="post">
<br>
<label for="username">用户名</label>
<input type="text" name="username" id="username" class="input" value="" placeholder="用户名admin"/><br />
<label for="pwd">密码</label><br>
<input type="password" name="password" id="password" class="input" value="" placeholder="密码admin"/><br />
<input type="submit" value="登录" />
<div class="checkbox" float="right">
<input type="checkbox" name="">
<span>记住密码</span>
</div>
</form>
</div>
</body>
</html>
修改后页面如下
关于前端的内容其实并不是很重要
现在让我们来看一下LoginServlet部分
Loginservlet部分 这边我们可以看出使用的是重定向的方式处理登录以后的页面跳转 完成最简单的模拟用户登录检测 其中重点部分,代码中间有注释 那么写死的用户名和密码分别是"zhang2gongzi",“123456”.目前只是简单的模拟登录,大家可以自己尝试换一下
package com.javaee.response;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* @author zzl
*
*/
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);
// 写死一对用户名和密码,模拟用户登录检查,要注意业务控制
if (("zhang2gongzi").equals(username) && ("123456").equals(password)) {
// 重定向是客户端再发请求,所以/代表的是网站,而不是网站下的应用程序项目,这里要用相对路径
response.sendRedirect("./welcome.html");
} else {
response.sendRedirect("./login.html");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
第二个页面操作
上面第一个登录页面不是特别重要,目前我们这边来进行一下第二个页面,这个较为复杂一点
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>多参数传递</title>
</head>
<body>
<form id="form1" action="RequestParamsServlet" method="GET">
用户名:<input type="text" name="username"><br />
密 码:
<input type="password" name="password">
<br />
爱好:
<input type="checkbox" name="hobby" value="sing">唱歌
<input type="checkbox" name="hobby" value="dance">跳舞
<input type="checkbox" name="hobby" value="net">上网
<input type="checkbox" name="hobby" value="joke">打牌
<input type="checkbox" name="hobby" value="draw">画画
<input type="checkbox" name="hobby" value="piano">弹琴
<input type="checkbox" name="hobby" value="egame">玩游戏<br />
<input type="submit" value="提交">
</form>
<hr>
<form id="form2" action="ParamsServlet" method="GET">
用户名:<input type="text" name="username"><br />
密 码:
<input type="password" name="password">
<br />
爱好:
<input type="checkbox" name="hobby" value="sing">唱歌
<input type="checkbox" name="hobby" value="dance">跳舞
<input type="checkbox" name="hobby" value="net">上网
<input type="checkbox" name="hobby" value="joke">打牌
<input type="checkbox" name="hobby" value="draw">画画
<input type="checkbox" name="hobby" value="piano">弹琴
<input type="checkbox" name="hobby" value="egame">玩游戏<br />
<input type="submit" value="提交">
</form>
<hr>
<form id="form3" action="paramsservletplus" method="GET">
用户名:<input type="text" name="username"><br />
密 码:
<input type="password" name="password">
<br />
爱好:
<input type="checkbox" name="hobby" value="sing">唱歌
<input type="checkbox" name="hobby" value="dance">跳舞
<input type="checkbox" name="hobby" value="net">上网
<input type="checkbox" name="hobby" value="joke">打牌
<input type="checkbox" name="hobby" value="draw">画画
<input type="checkbox" name="hobby" value="piano">弹琴
<input type="checkbox" name="hobby" value="egame">玩游戏<br />
<input type="submit" value="提交">
</form>
</body>
</html>
form.html运行页面如下
传递method这一块因为我之前在这篇文章里介绍过[(doGet()与doPost)](j2ee用户登录模拟(详解)与doGet()doPost()差别(第十三天学习j2ee) - 掘金 (juejin.cn))的差别,所以这次这边就不会再讲解了,大家自己看以前的文章吧
form1具体讲解 我们首先在第一个表格中填入信息,然后,选择爱好,提交所填和所选的信息,其中form1的action=“RequestParamsServlet”,传递方式method=“GET”
因为使用Get(),所以这边可以看到
console当中的输出
具体给大家介绍一下这边的action
RequestParamsServlet
package com.javaee.request;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* @author zzl
*/
public class RequestParamsServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("this is RequestParamsServlet...");
request.setCharacterEncoding("utf-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
// name=new String(name.getBytes("iso8859-1"),"utf-8");
System.out.println("用户名:" + name);
System.out.println("密 码:" + password);
// 获取参数名为“hobby”的值
String[] hobbys = request.getParameterValues("hobby");
System.out.print("爱好:");
for (int i = 0; i < hobbys.length; i++) {
System.out.print(hobbys[i] + ", ");
}
// 到别的Servlet处理输出
RequestDispatcher rd = request.getRequestDispatcher("/ParamsServlet");
rd.forward(request, response);
System.out.println("RequestParamsServlet end...");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
获取单个参数值,直接输入
String name = request.getParameter("username");
String password = request.getParameter("password");
获取多个参数值,以数组方式组织
String[] hobbys = request.getParameterValues("hobby");
那么此代码是在别的servlet当中进行的输出,调用了新的ParamsServlet.java
form2具体详解
ParamsServlet
第二个要讲解的是圈起来的这个
package com.javaee.response;
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 zzl
*/
public class ParamsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ParamsServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("<br>this is ParamsServlet...");
// 设置输入的编码
request.setCharacterEncoding("utf-8");
// 单个参数
String name = request.getParameter("username");
String password = request.getParameter("password");
// 设置输出类型和编码
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("用户名:" + name);
out.println("<br />密码:" + password );
// 获取参数名为“hobby”的值【里面可能会有多个值---构成数组结构】,输出到页面
String[] hobbys = request.getParameterValues("hobby");
out.print("<br />爱好:");
if (hobbys == null) {
out.println("没有爱好.");
}else {
for (int i = 0; i < hobbys.length; i++) {
out.print(hobbys[i] + ", ");
}
}
out.println("<br />");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这部分代码其实和上一个很像,差别在于这边多参数的接收用的是字符串。重点是最后一个’,'要怎么隐藏的问题
最后一个“,”的隐藏
这是一个比较常用的方法,去掉最后一个字符串的值
for (int i = 0; i < hobbis.length; i++) {
sb.append(hobbis[i]+",");
}
// 处理最后一个逗号
str = sb.substring(0, sb.length()-1);
form3的详解
这个就没什么特别的了,只有他接受的method=“GET”,所以会隐藏密码,更加安全罢了