JAVA EE-servlet-登录及其判断跳转

JAVA EE-servlet-登录及其判断跳转

效果:
输入URL地址,显示登录界面,填写信息,根据信息跳转到不同的界面。
本次demo使用post提交。
项目目录结构
项目文档结构

  1. 创建login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="login" method="post">
${msg}<br/>
 账号:<input type="text" name="username">
 <br/>
 密码:<input type="password" name="pwd" >
 <button type="submit">登录</button>
</form>
</body>
</html>
  1. 创建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${msg}<br/>
账号:${username}<br/>
密码:${pwd}<br/>
</body>
</html>

ps:

  • isELIgnored=“false”:是否忽略EL表达式,默认为false.
  • form 的action 可以直接为url-pattern,
  • method 默认(不写)为get,有两种形式,一种为get请求,一种为post 请求。本次使用post请求。
  • 为 e l 表 达 式 , 数 据 从 作 用 域 中 取 , 取 数 顺 序 为 r e q u e s t &gt; s e s s i o n , 如 果 指 定 要 从 s e s s i o n , 则 书 写 方 式 : {}为el表达式,数据从作用域中取,取数顺序为request&gt;session,如果指定要从session,则书写方式: elrequest>sessionsession,:{sessionScope.username}
  1. 修改LoginServlet
    在doPost方法中获取参数,并根据参数信息跳转到不同的jsp
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doPost---");
		String username=req.getParameter("username");
		String pwd=req.getParameter("pwd");
		HttpSession session = req.getSession();
		
		if(username.trim().equals("admin")&&pwd.trim().equals("admin")) {
			req.setAttribute("msg", "登录成功");
			session.setAttribute("pwd", pwd);
			req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp);
		}else {
			session.setAttribute("msg", "登录失败");
			resp.sendRedirect("login.jsp");
		}
		//super.doPost(req, resp);
	}

super.doPost(req, resp); 此代码建议注释或删除。
补充:

  • 作用域:
    page 在当前页面有效(仅用于JSP中)
    request 在当前请求中有效
    session 在当前会话中有效
    application 在所有应用程序中有效
  • 转发和重定向
    引用链接JaveEE请求转发和重定向的区别
    转发:req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp);
    重定向:resp.sendRedirect(“login.jsp”);
    注意:重定向跳转 后的jsp将不会获得request 请求域的数据
    原因:

response.sendRedirect是重定向。
重定向是指向另一个Servlet或jsp重新发送一条请求,
在这之前定义的request(request.setAttribute)在另一个Servlet中是得不到这个值的 。
可以用请求转发的方式 ,如request.getRequestDispatcher(“XXX.jsp”).forward(request, response);
或者换一种跳转方式或者是将值存储到 application 或者是 session 作用域中.

此处列举出常用的HttpServletRequest
引用链接读取 HTTP 头的方法

序号 方法 & 描述
1 Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。

2 Enumeration getAttributeNames()
返回一个枚举,包含提供给该请求可用的属性名称。

3 Enumeration getHeaderNames()
返回一个枚举,包含在该请求中包含的所有的头名。

4 Enumeration getParameterNames()
返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。

5 HttpSession getSession()
返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。

6 HttpSession getSession(boolean create)
返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。

7 Locale getLocale()
基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。

8 Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。

9 ServletInputStream getInputStream()
使用 ServletInputStream,以二进制数据形式检索请求的主体。

10 String getAuthType()
返回用于保护 Servlet 的身份验证方案的名称,例如,“BASIC” 或 “SSL”,如果JSP没有受到保护则返回 null。

11 String getCharacterEncoding()
返回请求主体中使用的字符编码的名称。

12 String getContentType()
返回请求主体的 MIME 类型,如果不知道类型则返回 null。

13 String getContextPath()
返回指示请求上下文的请求 URI 部分。

14 String getHeader(String name)
以字符串形式返回指定的请求头的值。

15 String getMethod()
返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。

16 String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。

17 String getPathInfo()
当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。

18 String getProtocol()
返回请求协议的名称和版本。

19 String getQueryString()
返回包含在路径后的请求 URL 中的查询字符串。

20 String getRemoteAddr()
返回发送请求的客户端的互联网协议(IP)地址。

21 String getRemoteHost()
返回发送请求的客户端的完全限定名称。

22 String getRemoteUser()
如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。

23 String getRequestURI()
从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。

24 String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。

25 String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。

26 String[] getParameterValues(String name)
返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。

27 boolean isSecure()
返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。

28 int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。

29 int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。

30 int getServerPort()
返回接收到这个请求的端口号。

31 int getParameterMap()
将参数封装成 Map 类型。

序号 方法 & 描述
1 String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。

2 String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。

3 boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。

4 boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。

5 void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。

6 void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。

7 void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。

8 void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。

9 void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。

10 void reset()
清除缓冲区中存在的任何数据,包括状态码和头。

11 void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。

12 void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。

13 void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。

14 void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。

15 void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。

16 void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。

17 void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。

18 void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。

19 void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。

20 void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。

21 void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。

22 void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。

23 void setStatus(int sc)
为该响应设置状态码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值