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需要满足以下三个要求:
- 是一个公有类,且含有公有的无参构造方法;
- 属性私有;
- 属性具有公有的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);
}
}
- 结果