手机扫码查看
2020javaweb教程之JSP
什么是JSP?
全称: Java Server Pages,java服务器页面。和Servlet一样,是sun公司定义的一种动态网页开发技术。
特点:基于html模版,可以在html模版嵌入java代码和jsp中的标签。
Tomcat可以包含的资源有静态资源和动态资源:
静态资源:HTML+css+js
动态资源:servlet、JSP
为什么要用JSP?
1.jsp性能好,可以在HTML页面中动态嵌入元素
2.服务器调用的是已经编译好的jsp文件
3.jsp基于java servlet Api 有很多强大企业支持
4.jsp可以与处理业务逻辑的servlet一起使用,该模式被java servlet模板引擎所支持
JSP构成
JSP页面中可以包含指令,Java语句、变量、方法或表达式、静态内容(html、css、javascript)
脚本元素(Scripting Elements):声明、脚本段、表达式。
注释指令(Comment Elements):HTML注释、Java注释、JSP隐式注释。
指令元素(Directive Elements):page、include、taglib 等
动作元素(Action Elements):jsp:include、jsp:forward、jsp:useBean等。
JSP指令
告诉JSP引擎如何解析JSP文件中的内容
语法: <%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” 。。。。。%>
示例:<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
page指令
作用:用于定义JSP页面的各种属性
<%@ page import=”java.util.Date,java.util.List”%>
session:是否会自动创建session对象,默认值为true;
<%@ page session=”false” %>
buffer:JSP中有javax.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.
<%@ page buffer=”80kb” %>
errorPage:如果页面中有错误,跳转到指定的资源 errorPage=”/uri” 如果写“/”则代表当前应用的目录 下,绝对路径。 如果不写“/”则代表相对路径
<%@ page errorPage=”URI” %>
isErrorPage:是否创建throwable对象。默认是false
<%@ page isErrorPage=”true” %>
contentType:等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码
<%@ page contentType=”text/html;charset=utf-8″ language=”java” %>
pageEncoding: Jsp文件本身的编码
<%@ page pageEncoding=”UTF-8″ %>
isELIgnored: 是否支持EL表达式。 默认是false,支持表达式;是true表示不支持表达式,${1+1};false输出结果2 true按照原样输出
<%@ page isELIgnored=”false” %>
include指令
静态包含(页面合并):<%@ include file=”test.jsp” %>
动态包含(动态引用):<jsp:include page=”test.jsp”>
脚本元素
脚本:
<%
java代码
int a=97;//局部变量
out.write(a);//打印到页面
%>
脚本表达式:<%=2+3 %>等价于输出语句 (注意:不能使用分号来结束表达式)
<%!
定义方法
public void eat(){}
int num=5;//全局变量
%>
jsp:forward请求转发
<jsp:forward page="index.jsp">
<jsp:param name="username" value="admin"/>
<jsp:param name="password" value="123456"/>
</jsp:forward>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
%>
获取值<%=username%> <br><%=password%>
JavaBean指令
<%
//java代码创建
Users users=new Users();
users.setUsername("admin");
users.setPassword("admin");
%>
<%--1.声明引用 2.查询有没有重复的 3.创建新对象 4.存到作用域 5.赋值--%>
<jsp:useBean id="user" class="entity.Users"></jsp:useBean>
<jsp:setProperty name="user" property="username" value="admin888"></jsp:setProperty>
<jsp:setProperty name="user" property="password" value="admin888"></jsp:setProperty>
<%--取值--%> <%=users.getUsername()%> <jsp:getProperty name="user" property="username"/>
表单精确匹配
<jsp:useBean id="users2" class="entity.Users"></jsp:useBean> <jsp:setProperty name="users2" property="*"></jsp:setProperty> <jsp:getProperty name="users2" property="username"/> <jsp:getProperty name="users2" property="password"/>
利用setProperty封装成对象
表单页面
<form action="test.jsp" method="post">
username : <input type="text" name="username"><br>
password : <input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
jsp页面
<jsp:useBean id="users2" class="entity.Users"></jsp:useBean>
<jsp:setProperty name="users2" property="*"></jsp:setProperty>
<%
request.setAttribute("users",users2);
request.getRequestDispatcher("/test").forward(request,response);
%>
<jsp:getProperty name="users2" property="username"/>
<jsp:getProperty name="users2" property="password"/>
servlet
Users users = (Users) request.getAttribute("users");
UsersService us=new UsersServiceImpl();
int add = us.add(users);
内置对象
九大内置对象
servlet中内置对象:
request、response、session、application、config、exception、out、pageContext、page

存到作用域
<%
pageContext.setAttribute("mobile","133");
request.setAttribute("username","admin");
session.setAttribute("password","admin888");
application.setAttribute("sex","男");
request.getRequestDispatcher("test.jsp").forward(request,response);
response.sendRedirect("test.jsp");
%>
在作用域取值
<%
//pageContext的自身作用域仅能作用在当前jsp,不能跨请求
Object mobile = pageContext.getAttribute("mobile");
//request对应的是一次请求,重定向或跨越超过1个页面就丢失了
Object username = request.getAttribute("username");
//session对应一次会话,浏览器关闭就丢失了
Object password = session.getAttribute("password");
//application对应一次服务器启动,关闭即销毁
Object sex = application.getAttribute("sex");
%>
<%=username%> <br>
<%=password%> <br>
<%=sex%> <br>
<%=mobile%>
JSP的out和getWriter()方法的区别
1.out是JspWriter类型,getWriter()是PrintWriter类型
2.out输出到缓冲区中,没有写到response中,getWriter()直接写到response中
3.out一般用在jsp中,getWriter()用在servlet中
pageContext对象
pageContext作用:1.代表容器使用 2.代表页面上下文,获取其他八个内置对象
域对象:
jsp中共包含四个域对象分别是pageContext、request、session、application
request域的使用场景:本次请求之后,数据就不再使用了,根据学号查询学生,根据新闻id查询新闻。
session域的使用场景:同一个会话中共享的数据,使用session,用户登录信息
application域的使用场景:所有用户共享的数据。整个程序的配置信息
pageContext域的使用场景:当前页面。
其中pageContext可以操作其他三个域对象(request,session,application)的数据
<%
//存的是当前页面作用域
pageContext.setAttribute("user","user");
//存在指定的作用域里
pageContext.setAttribute("username","admin",PageContext.REQUEST_SCOPE);
//存在session里
pageContext.setAttribute("password","123",PageContext.SESSION_SCOPE);
//存在application里
pageContext.setAttribute("mobile","133",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("user")%>
<%=pageContext.getAttribute("username")%>
<%=pageContext.getAttribute("password")%>
<%=pageContext.getAttribute("mobile")%>
<br>
<%--用pageContext在所有作用域里取值,getAttribute方法需要指定名称、作用域--%>
<%=pageContext.getAttribute("username",2)%>
<%=pageContext.getAttribute("password",3)%>
<%=pageContext.getAttribute("mobile",4)%>
<br>
<%--适合不知道在哪个作用域存的,只知道名称--%>
<%=pageContext.findAttribute("username")%>
它可以访问其他8个内置对象
在普通类中可以通过PageContext获取其它JSP隐式对象,具体如下:
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
提供了简易方法:
pageContext.forward(“2.jsp”);//转发 request.getRequestDispatcher().forward();
pageContext.include(“2.jsp”);//动态包含
- 本页地址 https://www.9713job.com/?p=2434
- 上一篇 <<2020Javaweb教程:filter过滤器
- 下一篇 >>2020javaweb教程之JSP应用



发表回复