学习 JSP !这一篇就够了!一.简介二.JSP注释 三.JSP指令 四.JSP内置对象 五.JSP动作标签 六.BeanUtils 七.EL表达式

一.简介

JSP语言:它是在servlet发展起来的,更加方便,它是HTML,java代码,JSP自己的东西所组成的,英文缩写是java server pages。

在jsp文件中,我们可以在java代码之间插入html代码,也可以在html代码之中插入java代码

html中插入java:

第一种:<%=java%>这是一个输出的语句,里面的内容直接输出,注意不要写分号。

第二种:<%java%>在这里面我们就可以写一些java代码,for循环之类的。

java中插入html:

%>html<%

以前我们在HTML文件中写页面,现在就可以在JSP中写页面了

二.JSP注释

JSP中可以有java,html,和自己的JSP语言,当然它的注释也有三种

1.HTML注释:<!--注释-->

2.java注释://注释    或       /*注释*/     或      /** 注释*/

3.JSP注释: <%--注释--%>

例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 我是html注释 -->
<%--我是JSP注释 --%>
<%
//我是java注释
/*
我是java多行注释
*/
%>
</body>
</html>

三.JSP指令

1.page指令(可以出现多个page指令)

法:<%@ page 属性名称=属性值%>  

属性:红色为重点

           language          目前没什么用,现在只能翻译java语言(上面的代码中已经应用了这个属性)

           extends             继承,没有什么用,不用修改

           session              默认为true,可以直接用session这个对象

           import                导入包

           buffer                 设置缓冲区大小,默认为8KB

           autoflush            如果缓冲区满了,是否自动刷新,默认为自动刷新,如果不自动刷新,则抛出异常

           errorpage           程序抛出异常,直接抛到指定的错误页面

           iserrorpage         在错误页面使用的属性,决定是否可以直接使用exception,默认是可以的

           isELIgnored        是否忽略EL表达式,默认为false,不忽略

           pageEncoding     指定当前页面的编码(上面的代码中已经应用了这个属性)

           contentType        浏览器默认打开文件时的编码(上面的代码中已经应用了这个属性)

例1:

<%@ page import="java.util.*"%>
<%@ page buffer="10kb"%>
<%@ page autoflush="true"%>
<%@ page iserrorpage="false"%>
<%@ page isELIgnored="false"%>

例2:errorpage

error.jsp发生错误的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="/JSP/500.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	int a=10/0;
%>
</body>
</html>

500.jsp跳转的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="/Demo3/image/7.jpg">
</body>
</html>

 没有配置错误页面之前是:

配置之后:

 还有一个更重要的配置全局错误页面的方法,就是在web.xml中配置,其实就是配置一下当发生什么错误的时候跳转,跳转页面的地址是哪里

  <error-page>
  	<error-code>500</error-code>
  	<location>/JSP/500.jsp</location>
  </error-page>

2.include指令:可能有很多网页的头部和尾部的HTML的页面是不变的,所以,我们就可以不用动它,直接写body的内容,然后把以前用过的头部和尾部用一句话加在里面,下面的演示一共有三个页面head.jsp    body.jsp     foot.jsp然后我再body.jsp中将头部和尾部引用进去,这种方式叫做静态包含。

head.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h5>我是head</h5>
</body>
</html>

 foot.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h5>我是foot</h5>
</body>
</html>

 body.jsp

<%@ include file="/include/head.jsp" %>是引用的方式,注意一下顺序

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="/include/head.jsp" %>
<h5>我是body</h5>
<%@ include file="/include/foot.jsp" %>
</body>
</html>

四.JSP内置对象(这些对象可以直接使用)

1.request对应HttpServletRequest,页面来的请求

2.response对应HttpServletResponse,服务器的回应

3.session对应HttpSession

4.application对应ServletContext,服务器的全域对象

5.out对应Jspwriter,可以向页面输出一些内容

6.pagecontext对应pagecontext

这是最重要的一个内置对象,通过它可以获取另外的内置对象,它同时也是一个域对象,代表当前页面的域

比如:pageContext.request.getparameter();

它的方法:

setAttribute(name,value)以键值对的形式设置名字和值

setAttribute(name,value,scope)scope代表域,可以在指定的域中设定,比如:PageContext.PAGE_SCOPE当前页面的 域

getAttribute(name)通过名字获取值

getAttribute(name,scope)在指定域中获取值

findAttribute(name)全域查找,从最小的域开始找,如果找不到将域扩大

page对应this

8.config对应ServletConfig

五.JSP动作标签

1.<jsp:forward>转发(转发就是在一个项目的内部进行跳转)

1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>原网站</h1>
<jsp:forward page="/forward/2.jsp"></jsp:forward>
</body>
</html>

2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>转发的网站</h1>
</body>
</html>

 结果:我们可以发现我们访问的是1.jsp,然后跳转到了2.jsp,然后上面的访问地址却还是1.jsp,这就是转发的特点之一

2.<jsp:param>转发时的传递参数,写在转发标签之内,我们直接写例子体会一下,获取1.jsp的参数,在2.jsp中获取并输出到页面之中。

1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>原网站</h1>
<jsp:forward page="/forward/2.jsp">
	<jsp:param value="50" name="price"/>
</jsp:forward>
</body>
</html>

2.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>转发的网站</h1>
<%
String a=request.getParameter("price");
out.print(a);
%>
</body>
</html>

 结果:

3.<jsp:include page="url"></jsp:include>动态包含页面,功能和前面的静态包含是相同的

六.BeanUtils

把jsp页面提交过来的表单提交到servlet中,用BeanUtils进行封装,需要注意的是,下面封装数据中的username,password,必须和jsp页面中name中的username,password是一样的,才能利用BeanUtils完成数据的封装。

首先得有一个jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/Demo3/BeanLogin" method="post">
	姓名:<input type="text" name="username"><br>
	密码:<input type="password" name="password"><br>
	<input type="submit" value="提交">
</form>
</body>
</html>

然后创建一个user类进行封装数据

package cn.itcast.servlet;

public class User {
	private String username;
	private String password;
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}

最后创建一个名字为BeanLogin 的servlet程序:

package cn.itcast.servlet;

import java.io.IOException;
import java.util.Map;

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

import org.apache.commons.beanutils.BeanUtils;

/**
 * Servlet implementation class BeanLogin
 */
@WebServlet("/BeanLogin")
public class BeanLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BeanLogin() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		//首先获取数据
		Map<String,String[]> map=request.getParameterMap();
		//创建一个可以封装数据的具体对象
		User user=new User();
		try {
			//将具体的封装数据的对象和获取的数据联系起来
			BeanUtils.populate(user, map);
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

七.EL表达式

1.从域对象中获取属性值

${ username }从域中获取属性名字为username的值,默认从最小的域中获取

${ requestScope.username }从指定的域中获取属性名字为username的值

${ arrs[0] }这里的arrs为数组的名字,功能是从指定的数组中获取值,里面的0代表第一个位置,也就是序号

$( map.key)从map集合中获取值,map为名字,key为关键字

2.在表达式中执行一些运算

$( a+b )获取a+b的值

$(a==b)判断a和b是否相等

等等,有很多类似运算符的操作

1和2的演示代码和结果:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
	request.setAttribute("a", 10);
	request.setAttribute("b", 10);
	request.setAttribute("username", "demo");
	String[] arrs=new String[]{"1","2","3"};
	request.setAttribute("arrs", arrs);
	Map<String,String> map=new HashMap<String,String>();
	map.put("key","value");
	request.setAttribute("map", map);
%>
${username}
${requestScope.username}
${arrs[0]}
${map.key}
${a+b}
${a==b}
</body>
</html>

3.提供了一些web对象可以直接使用

pageScope:当前页面的域

requestScope:请求的域

sessionScope:session的域

applicationScope:全局的域

例:${sessionScope.username}

param:获取表单过来的参数,相当于request.getParameter()

cookie:获取cookie对象

PageContent:通过它可以获取其他的对象

${PageContext.request}:获取request对象

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/85682197