jsp元素注释,指令元素,九大内置对象,el表达式,jstl标签库


(1)可以在eclipse中建立一个lib包,加入jstl.jar和standard.jar包,

<%@ page language="java" contentType="text/html; charset=UTF-8"  errorPage="index.jsp"

    pageEncoding="UTF-8"%>
    <!--上述<%@%>是指令元素errorPage="index.jsp" 表示出错后跳转到index.jsp页面 -->
    
    
    <%@include file="index.jsp" %>
 <!--  <%@include file="index.jsp" %>表示静态包含index.jsp页面,即调用这个页面时也调用index.jsp页面.
 因为index页面是出错误时候会调用,现在定义了静态调用,则可以将下面的错误代码注释掉了 -->
 
 
 <!-- 下面是引用标签库,uri表示标签库的路径,prefix表示标签库的简称 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>




<!-- <meta>标签只能写在<head><\head>之中,
<meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。
<meta> 标签位于文档的头部,不包含任何内容。<meta> 标签的属性定义了与文档相关联的名称/值对。
content 属性提供了名称/值对中的值。该值可以是任何有效的字符串。
content 属性始终要和 name 属性或 http-equiv 属性一起使用。
http-equiv 属性为名称/值对提供了名称。并指示服务器在发送实际的文档之前先在要传送给浏览器的 MIME 文档头部包含名称/值对。
当服务器向浏览器发送文档时,会先发送许多名称/值对。虽然有些服务器会发送许多这种名称/值对,但是所有服务器都至少要发送一个:
content-type:text/html。这将告诉浏览器准备接受一个 HTML 文档。
使用带有 http-equiv 属性的 <meta> 标签时,服务器将把名称/值对添加到发送给浏览器的内容头部。例如,添加:
<meta http-equiv="charset" content="iso-8859-1">
<meta http-equiv="expires" content="31 Dec 2008">
这样发送到浏览器的头部就应该包含:
content-type: text/html
charset:iso-8859-1
expires:31 Dec 2008
 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">




<title>Insert title here</title>
</head>

<body>



(2)简单获取<jsp:param>的参数

<%@ 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>
    
    <!-- 页面跳转,直接执行MyServlet页面的代码 -->
    <jsp:forward page="/servlet/MyServlet"></jsp:forward>
    
    
    <!-- <jsp:param>操作被用来以“名-值”对的形式为其他标签提供附加信息。
    它和<jsp:include>、<jsp:forward>、<jsp:plugin>一起使用,方法如下:
<jsp:param name=”paramName” value=”paramValue”/>
其中,name为与属性相关联的关键词,value为属性的值
通过jsp:forward可以得知下面的代码会在MyServlet中进行获取,所以在MyServlet中写获取数值的的代码-->
    <jsp:param value="zhangsan" name="username"/>
    
</body>

</html>

MyServlet中的代码为:



import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
       
  
    public MyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对常用标签.jsp页面中的<jsp:param value="zhangsan" name="username"/>进行调用,获取传递过来的参数
String username=request.getParameter("username");//request.getParameter进行获取
response.getWriter().write("hellow "+username);//输出username的值
}


/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}


}





(3)九大内置对象
JSP中基本上不会嵌入Java代码,但是我们也知道JSP会转换为servlet,在Servlet中,输出数据时,都需要通过response.getWrite();
但是在JSP中,直接使用out对象进行输出,为什么呢?这就是因为out为JSP的一个隐藏对象,JSP中内置了9个隐藏对象,
使得JSP比Servlet使用起来更简单,更方便,


    page、config、application、request、response、session、out、exception、pageContext


      page:page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于this。


      config:标识Servlet配置,类型:ServletConfig,api跟Servlet中的ServletConfig对象是一样的,能获取该servlet的一些配置信息,能够获取ServletContext


      application:标识web应用上下文,类型:ServletContext,详情就看Servlet中的ServletContext的使用


      request:请求对象,  类型:httpServletRequest


      response:响应对象  类型:httpServletResponse


      session:表示一次会话,在服务器端记录用户状信息的技术


      out:输出响应体 类型:JspWriter


      exception 表示发生异常对象,类型 Throwable。


      pageContext:表示 jsp页面上下文(jsp管理者) 类型:PageContext(只适合当前界面)
九大内置对象和servlet中对象的关系


      page就是jsp转换为servletservlet对象本身,也就是this


      config -- Servlet中的servletConfig


      application -- Servlet中的ServletContext


      request  -- Servlet中的request


      response  -- Servlet中的response


      session  -- Servlet中的session    


      out  -- JspWriter


      exception  -- 异常对象


      pageContext  -- 表示 jsp页面上下文(jsp管理者) 类型:PageContext,


        其中pageContext对象最牛逼,


JSP中的四大作用域。


      page、request、session、application


      其中操作page域中属性需要借助pageContext对象。
这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据,比如request.setAttribute()注意和request.setParameter()区分开来,一个是存储在域中的、一个是请求参数,session.setAttribute()、application其实就是SerlvetContext,自然也有setAttribute()方法。而page作用域的操作就需要依靠pageContext对象来进行了。在上面我们也有提到JSP的四大作用域,


        page作用域:代表变量只能在当前页面上生效


        request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B


        session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。


        application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。


示例:
<%@ 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>


<%
   //向pageContext域中添加数据
  pageContext.setAttribute("name", "张三");
%>


<%
// 从pageContext域中取出加数据 ,注意用什么域给了参数就要用同一个域中方法获取。
 String name=(String)pageContext.getAttribute("name");
//内置对象out输出
out.write(name);//输出结果为张三
%>


   <%
      //内置的ServletContext域
   application.setAttribute("sex","男");
  
   %>
   
   <%
   //这个代码是测试 pageContext域的数据能否用内置的内置的ServletContext域的获取方法
     String name1=(String)application.getAttribute("name");
  
     String sex=(String)application.getAttribute("sex");
     //结果是null---男,因为不能用ServletContext域的获取方法来获取pageContext域的数据
    response.getWriter().write(name1+"---"+sex);
   %>
   


</body>
</html>




(4)el表达式
作用:输出。用${}进行输出,如:${1+2}输出结果为3.
<body>
    <%
    // page、request、session、application域的各个设置参数的方法
      pageContext.setAttribute("name", "张三");
     request.setAttribute("name","李四");
     session.setAttribute("name","王五");
     application.setAttribute("name","haha");
    %>
    
    <!-- el表达式取出域中的数据 ,pageScope指的都是取出page域中的数据-->
   
    ${pageScope.name}
    <br />${requestScope.name}
    <br />${sessionScope.name}
    <br />${applicationScope.name}
   


</body>
输出结果是:
张三
李四
王五
haha


示例:el表达式获取对象中的属性
<%@page import="com.el表达式.demo.User"%>
<%@import  %>
<%@ 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>
    <%--el表达式获取对象中的属性 --%>
    <%
    //一定要将User类导入,在本页面开头:alt+/快捷键进行导入,注意User不能写完再导入。
    request.setAttribute("user", new User("zhangsan","123456"));
    
    %>
    //用request域输出,找的分别是User中的getUsername和getPassword方法
   名字: ${requestScope.user.username },密码是:${requestScope.user.password}


</body>
</html>        
在User中的代码如下:
package com.el表达式.demo;


public class User {

private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}


}








(5)获取el表达式中的list集合表达式 ,这里用session,用其他作用域也行
<body>
  <%--获取el表达式中的list集合表达式 ,这里用session,用其他作用域也行,--%>
  <%
  List<String> strList=new ArrayList<>();
  strList.add("aaa");
  strList.add("bbb");
  session.setAttribute("strList",strList);
  
  %>
  //下标为1的,也就是结果:bbb
  ${sessionScope.strList[1]}
  
</body>




(6)获取el表达式中的list集合中对象的属性
<body>
  <%--获取el表达式中的list集合中对象的属性 ,这里用session,用其他作用域也行,--%>
  <%
  List<User> userList=new ArrayList<>();
  userList.add(new User("赵六","123"));//这里注意要将User路径导入
  userList.add(new User("zhaoqi","123"));
  session.setAttribute("userList",userList);
  
  %>
  姓名:${sessionScope.userList[1].username}
  
  
</body>




(7)获取el表达式中的map集合中对象的属性
<body>
  <%--获取el表达式中的map集合中对象的属性 ,这里用application,用其他作用域也行,--%>
  <%
  Map<String,User> map=new HashMap<String,User>();
   map.put("aaa",new User("zhaoliu","123"));
   map.put("bbb",new User("zhaowu","123"));
  application.setAttribute("map",map);
  %>
  //结果是:zhaoliu
  姓名:${applicationScope.map.aaa.username}
  
  
</body>




(8)三目运算符
${80<100?"小":"大"}


(9)判断空
${empty person}
结果:true


(10)EL表达式中定义了11个隐式对象
使用这些隐式对象可以很方便地读取到Cookie、HTTP请求消息头字段、请求参数、Web应用程序中的初始化参数的信息,EL表达式中的隐式对象具体如下:


隐式对象                                                   作用
pageContext               对应于JSP页面中的pageContext对象
pageScope                 代表page域中用于保存属性的Map对象
requestScope     代表request域中用于保存属性的Map对象
sessionScope     代表session域中用于保存属性的Map对象
applicationScope 代表application域中用于保存属性的Map对象
param                          表示一个保存了所有请求参数的Map对象
paramValues       表示一个保存了所有请求参数的Map对象,它对于某个请求参数, 返回的是一个string类型数组
header                          表示一个保存了所有http请求头字段的Map对象
headerValues   表示一个保存了所有http请求头字段的Map对象,返回string类型数组
cookie                           表示一个保存了所有cookie的Map对象
initParam               表示一个保存了所有web应用初始化参数的map对象




1、pageContext对象
     EL表达式中的pageContext隐式对象与JSP页面中的pageContext对象相对应,EL表达式可以通过pageContext隐式
对象访问其它JSP隐式对象,如访问request、response对象属性时,可以使用表达式${pageContext.request.requestURI}
表达式${pageContext.response.contentType}等。


2、代表特定域属性的隐式对象(共4个)




     EL表达式中的pageScope、requestScope、sessionScope和applicationScope四个隐式对象分别用于访问JSP页面的page、request、session、application四个域中的属性。例如,表达式${pageScope.userName}返回page作用域中的userName属性的值,表达式${sessionScope.bookName}返回session作用域中的bookName属性的值。
     在EL表达式中也可以不使用这些隐式对象来指定查找域,而是直接引用这些域中的属性名称。例如,表达式${userName}就会在page、request、session、application这四个作用域内按顺序依次查找userName属性,直到找到为止。


3、代表请求参数的隐式对象(2个)


     EL表达式中的隐式对象param和paramValues用于获取客户端访问JSP页面时传递的请求参数的值,由于HTTP协议允许使用一个请求参数名出现多次,即一个请求参数可能会有多个值,所以,EL表达式提供了param和paramValues这两个隐式对象来分别获取请求参数的某个值和所有值。
     Param隐式对象用于返回一个请求参数的某个值,如果同一个请求参数有多个值,则返回第一个参数的值。paramValues隐式对象用于返回一个请求参数的所有值,返回结果为该参数的所有值组成的字符串数组,例如表达式${paramValues.username[0]}用于返回数组中第一个元素的值。


4、代表HTTP请求消息的隐式对象(2个)


    EL表达式中的隐式对象header和headerValues用于获取客户端访问JSP页面时传递的请求头字段的值。由于HTTP协议允许一些请求头字段出现多次,即一个请求头字段可能会有多个值,所以,EL表达式提供了header和headerValues两个隐式对象分别用于获取请求头字段的某个值和所有值。
     header隐式对象返回一个请求头字段的某个值,如果同一个请求头字段有多个值,则返回第一个值,例如,使用表达式${header.referer}可以非常方便的获取referer请求头字段的值。headerValues隐式对象用于返回一个请求头字段所有值组成的字符串数组。


5、cookie隐式对象
     EL表达式中的隐式对象cookie是一个代表所有Cookie信息的Map集合,Map集合中元素的关键字为各个Cookie的名称,值则为对应的Cookie对象。使用cookie隐式对象可以访问某个Cookie对象,这些Cookie对象则是通过调用HTTPServletRequest.getCookies()方法得到的,如果多个Cookie共用一个名称,则返回Cookie对象数组中的第一个Cookie对象。例如,要访问一个名为userName的Cookie对象,可以使用表达式${cookie.userName}。


6、initParam隐式对象


    EL表达式中的initParam是一个代表Web应用程序中的所有初始化参数的Map对象,每个初始化参数的值是ServletContext.getInitParameter(String name)方法返回的字符串。Web应用程序的初始化参数可以通过两种方式来配置,分别是在server.xml文件中配置和在web.xml文件中配置,具体如下:
       (1)在server.xml文件中配置Web应用程序的初始化参数:
       (2)在web.xml文件中配置Web应用程序的初始化参数:




示例1:重点
<body>
  <%--使用el表达式中的隐式对象param获取请求参数--%>
    ${param.username}
    
    
    <%-- 使用el表达式中的隐式对象paramValues获取请求参数--%>
    ${paramValues.hobby[1]}
    
     <%-- 使用pageContext获取其他对象,如request,session,response,这里输出的是当前路径--%>
     ${pageContext.request.contextPath }
  
</body>




(11)<C:foreach
示例:
<body>
 <%--begin表示开始,end表示结束,&nbsp表示空格 --%>
    <c:forEach begin="1" end="10" var="i">
    <a href="http://www.baidu.com?page=${i}">${i }</a> &nbsp;
    
    </c:forEach>
</body>
结果:1 2 3 4 5 6 7 8 9 10
并且这10个数字都有超链接,分别链接到百度的第i页。




示例:在一个表中输出
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="com.el表达式.demo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*"
    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>
  <%
    List<User>userList=new ArrayList<User>();
  userList.add( new User( "张三","12"));
  userList.add(new User("李四","122"));
  userList.add(new User("王五","1122"));
  request.setAttribute("userList", userList);
  %>
  <%--用foreach遍历,可以建立一个表来进行展示 ,items表示的是遍历的数据源,var表示在这个遍历中创建一个暂时的变量来调用属性--%>
    <table cellpadding="20" border="1">
    
    <tr>
       <td>序号</td>
       <td>用户名</td>
       <td>密码</td>
       <td>操作</td>
    </tr>   
    <c:forEach items="userList" var="user" varStatus="s">
    <tr>
    <td>${s.count}</td>
    <td>${user.username }</td>
    <td>${user.password }</td>
    <td><a href="">删除</a><a href="">修改</a>
    </tr>
    </c:forEach>
    
    </table>
</body>
</html>


结果如下图:










(12)jstl标签库中的if otherwise
示例1:第一种形式的写法
<body>
 
 <%
   session.setAttribute("user", new User("张三","123"));
 %>
 <%-- ${empty session.user }可以直接写成${empty user }--%>
 <c:if test="${empty session.user }">
          <a href="">登录</a>
 </c:if>
 <c:if test="${!empty user }">欢迎您&{user.username}</c:if>
 
</body>


User的代码:


public class User {

private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}


}


示例2:第二种写法
<body>
 
 <%
   session.setAttribute("user", new User("张三","123"));
 %>


 <c:choose>
 <c:when test="${empty session.user }">
  <a href="">登录</a>
 </c:when>
<c:otherwise>欢迎您${user.username }</c:otherwise>
 </c:choose>
 
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一份Javaweb代码,实现用户登录功能并显示用户名和密码,注释已加上。 1. login.html ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <form action="login.jsp" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 2. login.jsp ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- 导入Java的类 --%> <%@ page import="java.io.*,java.util.*" %> <%-- 设置页面编码和语言 --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- 获取表单提交的用户名和密码 --%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); %> <%-- 判断用户名和密码是否正确 --%> <% if ("itcast".equals(username) && "123".equals(password)) { // 用户名和密码正确,将用户名和密码保存到session session.setAttribute("username", username); session.setAttribute("password", password); // 跳转到login2.jsp页面 response.sendRedirect("login2.jsp"); } else { // 用户名和密码错误,返回登录页面 response.sendRedirect("login.html"); } %> ``` 3. login2.jsp ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- 导入JSTL标签 --%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%-- 设置页面编码和语言 --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login2</title> </head> <body> <%-- 使用EL表达式显示用户名和密码 --%> <p>用户名:${sessionScope.username}</p> <p>密码:${sessionScope.password}</p> </body> </html> ``` 希望这份代码能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值