jsp+servlet实现简单登录页⾯功能(附demo)
⽬录
实现功能:
开发环境:
预备知识:
1.登录界⾯login.jsp:
2.登录成功界⾯hello.jsp:
3.登录失败信息回显Login.jsp:
思路简述:
具体代码Code:
实现功能:
模拟简单登录功能,登录成功跳转新页⾯,登录失败在原登录界⾯提⽰登录失败信息
开发环境:
eclipse
Tomcat-8.0
预备知识:
HTML标签,Servlet相关知识——请求的转发与重定向,jsp相关知识,EL表达式
思路实现:共2个jsp,⼀个servlet
1.登录界⾯login.jsp:
采⽤jsp,不采⽤html的原因是因为要进⾏登录失败信息回显(当然如果⽤html结合ajax也可以实现,这⾥采⽤jsp更⽅便)如图:
2.登录成功界⾯hello.jsp:
欢迎信息+登录的⽤户名
如图:
3.登录失败信息回显Login.jsp:
如图:
思路简述:
问题1:jsp页⾯如何与⼀个java类进⾏连接绑定起来?
简单的说,⼀个jsp页⾯要跟⼀个servlet进⾏连接,需要有⼀个桥梁,这个桥梁就是l⽂件,可以通过下⾯代码观察到,登录页⾯的表单的提交的action属性值,填写的就是在l⽂件⾥对应的servlet-mapping中的url-pattern的值,⽽这个值⼜对应了⼀个servlet-name,servlet-name则对应到⼀个servlet-class,这样就把jsp和java类(servlet类)进⾏了关联。
其实我觉得最明显的就是提交表单后,url地址变化了,通过这个url地址将表单信息传给了对应的java类。
问题2:实现的整体的思路是怎么样的?
⼀个jsp页⾯通过表单元素,将⽤户信息通过url的形式提交给⼀个已经在l配置映射好的servlet类,servlet类接收到传来的表单信息,进⾏值校验(为了⽅便起见则直接定义⽤户名密码了,正常情况下是要采⽤jdbc进⾏从数据库中取出值进⾏校验的),然后对校验结果进⾏判断,如果账户密码正确,则跳转到登录成功的页⾯(采⽤重定向),如果失败,则将登录失败的提⽰信息存到request域对
象中并返回登录界⾯显⽰出来(采⽤请求的转发)
简单的联系:
jsp页⾯<----------&l<--------->servlet类
问题3:在servlet中要如何获取jsp中提交过来的表单信息呢?
问题4:登录页⾯如何在登录失败的时候给出提⽰信息呢?
实现思路是如果登录失败,则往request域对象中存⼊登录失败的提⽰信息,然后通过请求的转发的⽅式跳转回登录页⾯并显⽰,所以登录界⾯要嵌⼊⼀段脚本代码,⽤来判断当前是否有登录失败提⽰信息的对象,如果有则将该对象保存的信息打印出来,如果没有则什么都不显⽰。
1)如果账密不匹配,则往request域中存⼊message对象,该message中保存了提⽰信息:request.setAttribute("message", "账密错误,请重新登录<br>");
并转发到登录页⾯:RequestDispatcher("/loginDemo/login.jsp").forward(request, response);
2)在登录页⾯获取该对象:(因为登录失败的时候才有该对象,疑问:那如果我登录失败后再访问登录页⾯,那不应该会显⽰错误信息吗?答案是否定的。可了解request域对象⽣命周期相关知识)
<%
Attribute("message")!= null){
out.Attribute("message"));
}
%>
问题5:Attribute()和Parameter()区别是:
前者获取的是⼀个object对象,后者获取的是⼀个string字符串,所以前者使⽤的时候可能会碰到需要做⼀些类型转换的情况。
问题6:表单访问路径填写问题
在ation属性,或者请求的转发,重定向,⼀般采⽤绝对路径,可以避免路径访问出错,访问资源不存在等问题。
jsp表达式:<%=ContextPath()%>或者⽤EL表达式:${ tPath }可以获取当前web应⽤根⽬录路径,不妨试试输出打印下,就可以观察值是多少了。
具体代码Code:
1.login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>标题</title>
<style type="text/css">
*{margin: 0;padding: 0;}
form{margin: 0 auto;padding:15px; width: 300px;height:300px;text-align: center;} #submit{padding: 10px}
#submit input{width: 50px;height: 24px;}
</style>
</head>
<body>
<div class="wrapper">
<form action="<%=ContextPath()%>/loginDemo" method="post">  <label>⽤户名:</label>
<input type="text" name="userName" value="${param.userName}"/><br><br>  <label>密码:</label>
<input type="password" name="password"/><br>
<font color="red">
<%
Attribute("message")!= null){
out.Attribute("message"));
}
%>
</font>
<div id="submit">
<input type="submit" value="登录"/>
</div>
</form>
</div>
</body>
</html>
2.hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>标题</title>
</head>
<body>
Hello:<br>
<font color="green" size="22">
<%
out.Parameter("userName")+"<br>");
%>
</font>
<a href="<%=ContextPath()%>/loginDemo/login.jsp">重新登录</a> </body>
</html>
3.对应的LoginServlet.java
el表达式获取值package loginDemo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = Parameter("userName");
String password = Parameter("password");
String myUser = "Dong";
String myPwd = "5432100";
if(userName.equals(myUser)&&password.equals(myPwd)) {
response.ContextPath()+"/loginDemo/hello.jsp?userName="+userName);
}else {
request.setAttribute("message", "账密错误,请重新登录<br>");
}
}
}
4.对应的l的配置(注册)与映射
<servlet>
<servlet-name>logindemo</servlet-name>
<servlet-class>loginDemo.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logindemo</servlet-name>
<url-pattern>/loginDemo</url-pattern>
</servlet-mapping>
到此这篇关于jsp+servlet实现简单登录页⾯功能(附demo)的⽂章就介绍到这了,更多相关jsp+servlet登录页⾯内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。