JSP

1,定义

JSP即Java+html,最终会成为一个servlet
public class TestAction extends Httpservlet(){}
最终会编译成 .class文件 .class存在tomact下面的work文件下

2,JSP的使用

(1)HTML代码:直接在JSP页面正常书写即可(CSS,JAVASCRIPT);
(2)Java代码:
java代码一定是写在<%%>中的 这个是一定要有;
输出java代码中的值<%=%> 这个一定不能写;
Java方法写在<%!%>中
(3)练习:使用上述的三个java代码书写格式来进行书写:

在这里插入图片描述

写一个for循环

<body>
     
    <!-- 写一个for循环 -->
    <%
    for(int i=0;i<10;i++){
     %>
    <%=i+1 %>
    <%
    }
     %>
  </body>

(4)JSP中的注释

<!--HTML的注释-->:如果有java代码的话,不会显示在页面,但是会执行;
<%--JSP的注释--%>:如果有java代码的话,即不会在页面显示,也不会进行执行;

3,JSP注释

两种JSP注释

<!--注释内容-->
此种注释是会自动发布到客户端的,在浏览器上查看页面源代码就可以看见注释内容ctrl+shift+/

<%--注释内容--%>
此种注释会被JSP引擎自动忽略,不会被发送到客户端.无快捷键

4,Jsp指令的书写**

1,定义:所谓指令,就是告诉jsp引擎,在将.jsp文件转为.java的时候,需要做一些什么样的额外处理,可以理解为是声明;
2,指令的语法:<%@ 指令名 属性名=属性值%>
在这里插入图片描述
3,常用的指令:
(1)Page指令:

a),import:用于导包的,可以一次性导入多个包,中间用逗号隔开,也可以使用多次page指令来进行导包;
b),pageEncoding:告诉JSP引擎,JSP文件保存的时候应该采用的编码格式;
c),contentType:等价于response.setContentType();

(2)include指令
<%@include file=“second.jsp” %>

这个指令里面最主要的属性是file,用来表示这个页面中要包含哪个页面,但是一定要注意,当一个jsp中使用include指令来包含另外一个jsp的时候,那么这两个jsp会通过tomcat的引擎所转为的java文件拼凑在一起,即不能在两个jsp中声明相同的变量名,并且jsp中变量可以直接在主jsp中去使用,因为他们本来就在一个java文件中;
案例:把first.jsp与second.jsp两个jsp内容放在一个页面

<--first.jsp里的内容-->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@include file="second.jsp" %>
<body>
这是第一个JSP页面,我要包含第二个JSP, <br>
</body>
<--first.jsp里的内容-->
 <body>
    这是第二个JSP页面<br>
  </body>

启动tomact运行http://localhost:8080/JspDemo03/index.jsp
结果如下:
在这里插入图片描述

5, JSP的运行机制

(1) 当容器接受到一个JSP的请求时,先查找这个JSP页面是否存在;
(2) 如果存在的话,容器就会调用JSP引擎,(将.jsp文件转为了.java文件);这个java文件实质上就是一个servlet;
(3)将这个java文件(即servlet)进行编译,创建servlet实例,JSP生成的java文件在Tomcat的安装目录的work目录下并且执行;
注:
JSP如何转换为java文件
HTML标签:直接放到service方法中的out.write(“html标签”);
Java代码:直接在servlet中原样输出;
Java的结果:放到了service方法里的out.print(java的结果);

6, url如何传值

(1)从一个Jsp跳转到另一个Jsp
在jsp后面加上一个?

<a href="aa.jsp?变量名sbq=变量值sbs"></a>

如果我们要传两个值怎么办

<a href="aa.jsp?变量名=变量值sbs&变量名2=变量值"></a>

如果再想多传一个,就再加一个&

<body>
    <a href="urlDemo02.jsp?name1=孙悟空喜欢吃桃&name2=gggdgdg&name3=gvcgvcv">孙悟空喜欢吃桃</a>
    <a href="urlDemo02.jsp?name=唐僧喜欢念经">唐僧喜欢念经</a>
    <a href="urlDemo02.jsp?name=八戒喜欢睡觉">八戒喜欢睡觉</a>
    <a href="urlDemo02.jsp?name=沙僧喜欢干活">沙僧喜欢干活</a>
     <a href="http://baidu.com">跳转到百度</a>
  </body>
<body>
	<%
  String name3=(String)request.getParameter("name3");
  String name1=(String)request.getParameter("name1");
  String name2=(String)request.getParameter("name2");
   %>
	获得的值是:<%=name3 %><br>
	获得的值是:<%=name1 %><br>
	获得的值是:<%=name2 %>
</body>

(2),跳转到百度的四种方法:

第一种

<a href="http://baidu.com">第一种跳转到百度</a><br>

第二种

<a href="javascript:window.location='http://baidu.com'">第二种跳转到百度</a><br>

第三种,写一个函数

<head>
	<script type="text/javascript">
	function add(){
				window.location="http://baidu.com";	}
    </script>
</head>
<a href="javascript:add();">第三种跳转到百度</a><br>

第四种

<head>
	<script type="text/javascript">
	function add(){
				location.href="http://baidu.com";	}
    </script>
</head>
<a href="javascript:add();">第四种跳转到百度</a><br>

第五种

<head>
	<script type="text/javascript">
	function add(){
	document.getElementById("form1").submit();
	}
    </script>
</head>
  <form id="form1" action="http://baidu.com">
    </form>
<a href="javascript:add();">第五种跳转到百度</a><br>

执行逻辑:
在这里插入图片描述

<head>
 <script type="text/javascript">	
	//跳转到查询所有
	function list(){
		document.getElementById("form1").submit();
	}	
 </script>
</head>
   <body>
  	<form id="form1" action="<%=request.getContextPath()%>/userList.do">	
	</form>	
	<a href="javascript:list();">查询出所有数据</a><br>
  </body>

通过xml跳转到 userList.jsp

7,JSP内置对象:

在这里插入图片描述
session对象
session在网络中被称为对话。由于HTTP协议是一种五协议状态,也就是当浏览器向服务器发出请求后,服务器接受请求,并返回响应值后,该连接就结束了,而服务器并不保存相关的信息,为了改变这一缺点,HTTP协议提供了session,通过session可以在应用程序的Web页面进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭服务器。
但是,如果在一个会话中,客户端长期不向服务器发送请求,session会自动消失,这个实践取决于服务器,可以修改。

8.URL

注:URL属于URI
在这里插入图片描述
(1)@WebServlet("/aa.do")相当于配置了.xml文件中的UserAction 类的url为/aa.do
(1)添加库
buildpath-add library-JavaEE6 Libraries
(2)例题:

@WebServlet("/aa.do")//配置uri为/aa.do
public class UserAction extends HttpServlet{
protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	//获取uri
	String uri=request.getRequestURI();
	System.out.println("URI为"+uri);
	//截取Uri,lastIndexOf包含头不包含尾,故要+1
	String url=uri.substring(uri.lastIndexOf("/")+1, uri.lastIndexOf("."));
	System.out.println("URL为"+url);
	
	System.err.println("进来了没有");
}	
}

运行servlet,浏览器输入:http://localhost:8080//jspDemo08/aa.do
打印结果:
在这里插入图片描述

(3)注
(1)当配置uri为:@WebServlet("*.do")时,浏览器中输所有的.do(aa.do或者bb.do或者cc.do等)都会调用该类。
(2)当配置uri为:@WebServlet(urlPattern={"/aa.do","/bb.do","/cc.do"}),浏览器中输入aa.do或者bb.do或者cc.do都会调用该类。
(3)urlPattern也允许这样写:
当配置uri为:@WebServlet(urlPattern={"/user/aa.do","/user/bb.do","/user/cc.do"}),浏览器中输入http://localhost:8080//jspDemo08/user/aa.do或者http://localhost:8080//jspDemo08/user/bb.do或者http://localhost:8080//jspDemo08/user/cc.do都会调用该类。
(4)URL与URI
这是URI:jspDemo08/aa.do
这是URL:aa

(4)又一个例子

@ WebServlet(urlPatterns={"/user2/login.do","/user2/list.do","/user2/update.do","/user2/delete.do"})
public class User2Action extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	//获取uri
	String uri=req.getRequestURI();
	//截取url
	String url=uri.substring(uri.lastIndexOf("/")+1, uri.lastIndexOf("."));
	if(url.equals("login")){
		System.out.println("登陆成功 ");
	}
	else if (url.equals("list")) {
		System.out.println("查询所有");
	}
	else if (url.equals("update")) {
		System.out.println("删除成功");
		resp.sendRedirect(req.getContextPath()+"/user2/list.do");
	}
	else if (url.equals("delete")) {
		System.out.println("修改成功");//是在这里面调用dao中的方法
		//修改成功,再重新查询
		resp.sendRedirect(req.getContextPath()+"/user2/list.do");
	}
}
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}
}

9,JSP EL

EL表达式
什么包都不需要导
<%=msg%>同等与${msg}

<% User user=request.getP("user");%>
${user.id} //等价于EL中的<%=user.getID()%>

1、文字
JSP 表达式语言定义可在表达式中使用的以下文字:

在这里插入图片描述
2、操作符
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:

在这里插入图片描述

<%String msg=(String)request.getAttribute("msg"); %>
<font color="red"><%= msg==null ?"":msg %></font>

上面代码等同于:

<font color="red">${msg}</font>//我不懂为啥

10,JSTL表达式

1,使用前准备
(1)必须导入两个架包
(a)jstl.jar
(b) standard.jar

(2)在jsp头文件必需声明标签库,引入
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

2,常用的标签
(1)Set标签

通过jstl来塞值

<body>
	<h1>set的使用</h1>
	通过原来request来塞值:<% request.setAttribute("name01", "name值01"); %><br>
	原来获取方法:<%=request.getAttribute("name01") %><br> EL表达式或取${name01 }
	<br>

	<!-- 通过jstl表达式来塞值<c:set var="变量 " value="值"></c:set> -->
	通过jstl表达式来塞值:<c:set var="name02" value="name的值02"></c:set><br>
	获取jstl中的值:${name02}<br>

	<!-- 通过jstl表达式来塞值<c:set var="变量 "></c:set> -->
	通过jstl表达式来塞值:<c:set var="name03" value="name的值03"></c:set><br>
	 获取jstl中的值:${name03}<br>

</body>

输出结果:
在这里插入图片描述

set的作用域

<body>
<h3>request作用域</h3> 
 <c:set var="name1" scope="request">set塞的值333</c:set><br>
  通过page作用域来获取${pageScope.name1}<br>
  通过request作用域来获取${requestScope.name1 }<br>
  通过session作用域来获取${sessionScope.name1 }<br>
  通过application作用域来获取${applicationScope.name1}  <br>
  不写通过作用域来获取${name1}
</body>

在这里插入图片描述

<body>
<h3>page作用域</h3> 
 <c:set var="name1" scope="page">set塞的值333</c:set><br>
  通过page作用域来获取${pageScope.name1}<br>
  通过request作用域来获取${requestScope.name1 }<br>
  通过session作用域来获取${sessionScope.name1 }<br>
  通过application作用域来获取${applicationScope.name1}  <br>
  不写通过作用域来获取${name1}
</body>

在这里插入图片描述

<body>
<h3>session作用域</h3> 
 <c:set var="name1" scope="session">set塞的值333</c:set><br>
  通过page作用域来获取${pageScope.name1}<br>
  通过request作用域来获取${requestScope.name1 }<br>
  通过session作用域来获取${sessionScope.name1 }<br>
  通过application作用域来获取${applicationScope.name1}  <br>
  不写通过作用域来获取${name1}
</body>

在这里插入图片描述

<body>
<h3>application作用域</h3> 
 <c:set var="name1" scope="application">set塞的值333</c:set><br>
  通过page作用域来获取${pageScope.name1}<br>
  通过request作用域来获取${requestScope.name1 }<br>
  通过session作用域来获取${sessionScope.name1 }<br>
  通过application作用域来获取${applicationScope.name1}  <br>
  不写通过作用域来获取${name1}
</body>

在这里插入图片描述
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

(2)remove
通过remove删除对应的作用域的值

<body>
	<h3>remove标签的使用就是删除</h3>
	<c:set var="name3" scope="application">set塞的值333</c:set>
	 塞的name3的值时${name3} <br>
	<c:remove var="name3" />
	删除后的name3的值${name3} <br>
</body>

在这里插入图片描述
通过remove删除不同作用域的值,删除失败

<body>
	<h3>remove标签的使用就是删除</h3>
	<c:set var="name3" scope="application">set塞的值333</c:set>
	 塞的name3的值时${name3} <br>
	<c:remove var="name3" scope="request"/>
	删除后的name3的值${name3} <br>
</body>

在这里插入图片描述
(3)URL标签
在这里插入图片描述
(4)import标签
在这里插入图片描述
(5)if标签
在这里插入图片描述
(6)choose标签
在这里插入图片描述
(7)forEach标签

<body>


<%
List<User> list=new ArrayList<User>();
list.add(new User(1,"张三1"));
list.add(new User(2,"张三2"));
list.add(new User(3,"张三3"));
list.add(new User(4,"张三4"));
list.add(new User(5,"张三5"));
list.add(new User(6,"张三6"));
request.setAttribute("list", list);
//以前的获取list方式
//List<User> user=request.getAttribute("list");
 %>
 
	<h3>C:forEach的使用</h3>
	<table border="1" cellpadding="0" cellspacing="0" width="50%">
		<tr>
			<td>id</td>
			<td>用户名</td>
		</tr>

		<c:forEach var="sbq" items="${list}">
			<tr>
				<td>${sbq.id}</td>
				<td>${sbq.name}</td>
			</tr>
		</c:forEach>
	</table>
	
		<h3>第二种</h3>

		<table border="1" cellpadding="0" cellspacing="0" width="50%">
			<tr>
				<td>id</td>
				<td>用户名</td>
			</tr>
			<!--下标是从2开始,到第5条  -->
			<c:forEach items="${list }" var="li" begin="2" end="5">
				<tr>
					<td>${li.id }</td>
					<td>${li.name }</td>
				</tr>
			</c:forEach>
		</table>
</body>

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值