Java Web 学习笔记09 JSP

JSP

1、JSP 概述

1、为什么要有JSP
Servlet可以通过转发或重定向跳转到某个HTML文档。但HTML文档中的内容不受Servlet的控制。比如登录失败时,跳转回登录表单页面无法显示诸如“用户名或密码不正确”的错误消息,所以我们目前采用的办法是跳转到一个错误信息页面。如果通过Servlet逐行输出响应信息则会非常繁琐。

`ServletHTML
长处接收请求参数,访问域对象,转发页面以友好方式显示数据
短处以友好方式显示数据动态显示数据

2、什么是JSP
Java Server Page
JSP = HTML + Servlet
(1)JSP的本质是一个Servlet,Servlet能做的事情JSP都能做。
(2)JSP能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
(3)JSP不同于HTML,不能使用浏览器直接打开,而必须运行在Servlet容器中。

2、code

1、LoginServlet

package com.alex.web.servlet;
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;
	// 处理请求使用的
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");

		String username = request.getParameter("username");
		String passwd = request.getParameter("passwd");

		if ("admin".equals(username) && "123".equals(passwd)) {
			request.setAttribute("name", "admin");
			request.setAttribute("age", 20);
			request.getSession().setAttribute("name", "Tom");
			request.getSession().getServletContext().setAttribute("name", "alex");
			request.getRequestDispatcher("/success.jsp").forward(request, response);
		} else { 
			response.sendRedirect(request.getContextPath() + "/failure.jsp");
		}
	}
}

2、failure.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!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>
failure
<% exception.equals("e"); %>
</body>
</html>

3、login.jsp

<!--  HTML注释   -->
<%-- JSP 注释 --%>
<%--  page指令:用于设置当前页面 --%>
<%--  taglib指令:用于加载标签库 --%>
<%--  include指令:用于包含其它页面 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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>
	Get
	<form action="LoginServlet" method="get">
		用户名:<input type="text" name="username" />
		<br/>
		密码:<input type="text" name="passwd" /> 
		<br/>
		<!-- 访问AutoByEclipseServlet中的doGet方法 -->
		<input type="submit" value="发送GET请求" />
	</form>
	<br />
	<br />
	POST
	<form action="LoginServlet" method="post">
		用户名<input type="text" name="username" />
		<br/>
		密码:<input type="text" name="passwd" />
		<br/>
		<!-- 访问AutoByEclipseServlet中的doPost方法 -->
		<input type="submit" value="发送POST请求" />
	</form>
</body>
</html>

4、success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
<link rel="stylesheet" href="css/success.css">
<script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">

</script>
<style type="text/css">
     body {
            padding: 0px;
            margin: 0px;
        }
</style>
</head>
<body>
success
<% 
//不推荐在jsp中写Java代码,不易于维护
//页面数据处理,推荐使用JSTL 和 EL 表达式
String name = (String)request.getAttribute("name");
out.println("欢迎," + name);
%>
<br /><br />
<c:out value="${requestScope.name}"></c:out><br /><br />
<c:out value="${sessionScope.name}"></c:out><br /><br />
<c:out value="${applicationScope.name}"></c:out><br /><br />
<!-- param 是从原始请求哪里取数据 -->
${param.username}<br /><br />
${requestScope.name}<br /><br />
${sessionScope.name}<br /><br />
${applicationScope.name}<br /><br />
<!-- 只写name 默认是从request里面取,从小到大的范围去搜索数据 -->
<!-- 从小到大的范围搜索数据
           范围:
        pageContext   当前页面有效
        request       当前请求有效,一次请求可能会经过多个servlet或者jsp
        session       当前客户端有效,同一个浏览器,同一个用户,不管发起多少次请求,数据都是有效的
        application   所有的页面,所有的客户端,都能看到的数据,就放到application里面
            查找数据顺序:
         pageContext -> request -> session -> application
-->
${name}
<c:choose>
         <c:when test="${ age > 30 }"> 30</c:when>
         <c:when test="${ name eq 'admin' }">opop</c:when>
         <c:otherwise>123</c:otherwise>
</c:choose>
</body>
</html>

5、testSession.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
${sessionScope.name}
</body>
</html>

3、Servlet 传参数到jsp页面

request.setAttribute("name", "admin");
request.getSession().setAttribute("name", "Tom");
request.getSession().getServletContext().setAttribute("name", "alex")

4、jsp 获取Servlet 传递过来的值

方式一

在jsp页面中写java代码
<% 
//不推荐在jsp中写Java代码,不易于维护
//页面数据处理,推荐使用JSTL 和 EL 表达式
String name = (String)request.getAttribute("name");
out.println("欢迎," + name);
%>

方式二

在jsp页面中使用EL表达式
<!-- param 是从原始请求哪里取数据 -->
${param.username}<br /><br />
${requestScope.name}<br /><br />
${sessionScope.name}<br /><br />
${applicationScope.name}<br /><br />
<!-- 只写name 默认是从request里面取,从小到大的范围去搜索数据 -->
<!-- 从小到大的范围搜索数据
范围:
        pageContext   当前页面有效
        request       当前请求有效,一次请求可能会经过多个servlet或者jsp
        session       当前客户端有效,同一个浏览器,同一个用户,不管发起多少次请求,数据都是有效的
        application   所有的页面,所有的客户端,都能看到的数据,就放到application里面
查找数据顺序:
         pageContext -> request -> session -> application
-->

5、jsp页面写css代码

方式一

<p style="width: 5rem;"> 哈哈哈 </p>

方式二

<p align="center" width="80%"> </p>

方式三

<style type="text/css">
     body {
            padding: 0px;
            margin: 0px;
        }
</style>

方式四

<link rel="stylesheet" href="css/success.css">

6、jsp页面写js代码

方式一

<script type="text/javascript">

</script>

方式二

<script type="text/javascript" 
src="${pageContext.request.contextPath}/js/jquery.min.js"></script>

7、jsp页面写JSTL语法

在jsp页面中,不推荐使用java代码,不方便维护
页面数据处理,推荐使用JSTL 和 EL 表达式1)添加jar包
jstl.jar
standard.jar
复制到lib文件夹下,Build Path
jstl-1.2.jar
2)jsp页面添加taglib指令

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3)JSTL写法

<c:choose>
         <c:when test="${ age > 30 }"> 30</c:when>
         <c:when test="${ name eq 'admin' }">opop</c:when>
         <c:otherwise>123</c:otherwise>
</c:choose>
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页