海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020javaweb教程之JSP

未分类
2020-10-28 16:58:05
1822677238@qq.com

手机扫码查看

2020javaweb教程之JSP

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”);//动态包含

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注