4-2 JSP & ajax & jstl

JSP

JSP(全称Java Server Pages)是一种动态网页开发技术,它使用JSP标签在HTML网页中插入java代码。标签成对出现<% %>。
JSP是一种Java Servlet,主要用于实现Java Web应用程序的用户界面部分:
JSP标签有多种功能,如访问数据库、记录用户选择信息、访问javaBeans组件等,还可以在不同的网页中传递控制信息和共享信息;
JSP文件后缀名为*.jsp
JSP开发的web应用可以跨平台使用,既可以运行在Linux上也能运行在Windows上。

EL表达式

  • EL(Expression Language) 是为了使JSP写起来更加简单而诞生的。
<c:set var="money" value="200" scope="request" />
<!-- EL表达式:可以访问JavaBeans和jsp内置对象 -->
金额:${money}
//访问request中的list集合
集合:${list[0] }
//访问request对象中的user对象
用户:${user.userName }

JSP指令

在这里插入图片描述

JSP内置对象

  • JSP内置对象是由JSP页面的容器(tomcat)加载,不需要显式的声明就可以直接在JSP页面中使用的对象。JSP一共有9个内置对象:

在这里插入图片描述

request
  • jsp传参到servlet
<a href="demoServlet?addr=China&userNo=3&phone=123456">

URL:

http://localhost:8080/web01/demoServlet?addr=China&userNo=3&phone=123456
//servlet中获取request参数
String addr = req.getParameter("addr");
System.out.println(addr);
String userNo = req.getParameter("userNo");
System.out.println(userNo);
String phone = req.getParameter("phone");
System.out.println(phone);	
  • servlet传参到jsp
req.setAttribute("name", "张三");
req.setAttribute("age", 12);
//请求转发:通过请求转跳转到JSP页面
req.getRequestDispatcher("/WEB-INF/page/demo01.jsp").forward(req, resp);
<h3>jsp内置对象-request</h3>
<%= request.getAttribute("name") %><br>
<%= request.getAttribute("age") %>
  • 获取当前页面路径
<%=request.getContextPath() %>

等效于EL表达式:

${pageContext.request.contextPath}
session
//获取session,没有则创建一个
HttpSession session = req.getSession();
//设置session的属性
session.setAttribute("name", "李四");
session.setAttribute("age", 18);
//设置session失效时间
session.setMaxInactiveInterval(5);
//请求转发:通过请求转跳转到JSP页面
req.getRequestDispatcher("/WEB-INF/page/demo01.jsp").forward(req, resp);
  • servlet传参到jsp
<h3>jsp内置对象-session</h3>
<%=session.getAttribute("name") %><br>
<%=session.getAttribute("age") %>
  • 传参到servlet
//获取session
HttpSession session = req.getSession();
//输出session属性
System.out.println("" + (String)session.getAttribute("name") + (Integer)session.getAttribute("age"));
out
<h3>jsp内置对象-out</h3>
<% 
	String a = new String("你好!!!"); 
	out.println(a); 
%>

JavaBean

组件
  • 组件就是一个可以重复使用的软件模块。
JavaBean简介

JavaBean就是一种组件技术,简单来说,创建一个JavaBean组件就是创建一个Java类。
JavaBean需要满足以下三个要求:

  1. 是一个公有类,且含有公有的无参构造方法;
  2. 属性私有;
  3. 属性具有公有的set和get方法;
  • 示例
public class UserInfo {
	//私有化属性
	private String userName;
	private int age;
	//公有的无参构造方法
	public UserInfo() {
		
	}
	//公有的set和get方法
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
JavaBean与SpringBean的区别

https://blog.csdn.net/qq_42245219/article/details/82748460

ajax

  • jsp传参到servlet
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.9.1.min.js"></script>
<script>
		function find(){
			//ajax请求
			$.ajax({
				url: "ajaxServlet",//请求地址
				type:"GET",//请求方式GET/POST
				//data:{"addr":"山东青岛","userNo":"1001","phone":"18312341234"},//请求参数
				//data:$("form").serialize(),//表单序列化
				data:"addr=山东青岛&userNo=1001&phone=18312341234",
				success:function(str){//请求成功之后的回调函数,接收服务端响应的数据
					alert(str);
				},
				error:function(){//请求失败之后的回调函数
					
				}
			});
		}
</script>
<input type="button" value="提交请求" onclick="find();"/>
  • 一般方法取参 和 遍历所有传入的参数
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AjaxServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//一般方法获取request参数
		System.out.println(req.getParameter("addr"));
		//获取所有请求参数名的结果集
		Enumeration<String> params = req.getParameterNames();
		//遍历参数名结果集,获取所有参数值
		//hasMoreElements判断参数名集合中是否有元素
		while (params.hasMoreElements()) {
			//nextElement获取下一个元素
			String key = (String) params.nextElement();
			System.out.println(key+":"+req.getParameter(key));
		}	
		//创建字符输出流,向客户端响应数据
		PrintWriter out = null;
		out = resp.getWriter();
		out.write("success");
		out.flush();
		if (out == null) {
			out.close();
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

jstl

  • JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

jstl标签库的引入

  • JSTL标签库需要导入两个支持jar包jstl.jar和standard.jar
<!-- JSTL标签库是一个JSP标签的集合,封装了许多jsp应用程序通用的核心功能-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- JSTL格式化标签 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>

示例

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> 
<!-- 引入jstl标签库 -->
<!-- 
JSTL标签库是一个JSP标签的集合,封装了许多jsp应用程序通用的核心功能
uri:标签库路径
prefix:标签库别名
-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- JSTL格式化标签 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
<html>

<body>
<p style="color:red; font-size:36px;">jstl-foreach</p>
<!-- 
	items 被遍历的数据集
	var 每一条遍历记录的别名
	类似于java的for(var : items){}
-->
<c:forEach var="str" items="${list}">
	<p>${str}</p>
</c:forEach>

<p style="color:red; font-size:36px;">jstl-if</p>
<c:if test="${no > 20}">
	<p>yes</p>
</c:if>
<c:if test="${no <= 20}">
	<p>no</p>
</c:if>

<p style="color:red; font-size:36px;">jstl-choose</p>
<!-- 类似于java中的switch -->
<c:choose>
    <c:when test="${no > 20}">
        <p>大于20</p>
    </c:when>
    <c:when test="${no < 20}">
        <p style="color:red;">小于等于20</p>
    </c:when>
    <c:otherwise>
    	<p>otherwise</p>
    </c:otherwise>
</c:choose>

<hr>

<c:out value="输出标签,类似out内置对象" />
<br>

<!-- 
c:set 声明变量标签 
var 变量名
value 变量值
scope 作用域page request session application

四大作用域,可以使用四个值:
page:只能应用于当前页
request:只能应用于当前的请求
session:在本次session内有效
application:能应用于整个应用程序内
-->
<c:set var="money" value="200" scope="session" />

<!--在demo01.jsp中访问变量-->
<a href="http://localhost:8080/web01/demoServlet">验证money生效</a>
<hr>
<!-- 
EL表达式
作用:
1 获取服务端请求中的参数值
2 输出数据到jsp页面
3 获取请求中的参数对象的属性值
 -->
${map.name}
${map.age}
<hr>
<!-- 格式化数字标签 -->
<f:formatNumber value="12.125" maxFractionDigits="2"></f:formatNumber>
<f:formatNumber value="${5 / 3}" maxFractionDigits="3"></f:formatNumber>
<c:set var="now" value="<%=new java.util.Date()%>" />
<hr>
<!-- 格式化日期标签 -->
<f:formatDate value="${now}"  pattern="yyyy-MM-dd HH:mm:ss:SSS"/>
<hr>
${now}
</body>
</html>
package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JSTLServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		List<String> list = new ArrayList<String>();
		list.add("张三");
		list.add("李四");
		list.add("刘能");
		list.add("谢广坤");
		req.setAttribute("list", list);
		req.setAttribute("no", 12);
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "周润发");
		map.put("age", 62);
		req.setAttribute("map", map);
		//请求转发,跳转到jsp页面
		req.getRequestDispatcher("/WEB-INF/page/jstl.jsp").forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}
  • 结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值