32_Java中jsp的一些介绍

查询为例:开发流程
Servlet: 执行查询
public void service(HttpServletRequest request, HttpServletResponse response) {

	// 1) jdbc 代码,连接数据库,执行sql,查询结果
	
	// 2) 存入作用域
	request.setAttribute("变量名", 查询结果);
	
	// 3) 由servlet跳转至jsp                    转发
	request.getRequestDispatcher("目标jsp路径").forward(request, response);
}

jsp: 显示结果
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- 4) 利用jstl标签和el表达式技术显示结果 -->
<c:if test="条件"></c:if>
<c:forEach items="${变量名}" var="临时变量名">  ${临时变量名} </c:forEach>

1. 如何接收各种不同表单参数

<form action="/s1" method="post">
    <!-- name 是参数名 -->
    <input type="date" name="birthday" value="2018-09-15">
    <hr>
    男
    <!-- MALE  FEMALE -->
    <input type="radio" name="sex" value="男" checked>
    女
    <input type="radio" name="sex" value="女">

    <hr>
    唱歌<input type="checkbox" name="hobby" value="1">
    跳舞<input type="checkbox" name="hobby" value="2">
    睡觉<input type="checkbox" name="hobby" value="3">
    玩游戏<input type="checkbox" name="hobby" value="4">

    <hr>
    <!-- option 标签如果不提供 value属性, 把标签之间的文本当成value
         如果提供了value属性,以value为准
    -->
    <select name="city">
        <option>北京</option>
        <option>天津</option>
        <option value="shanghai">上海</option>
        <option>武汉</option>
    </select>

    <hr>
    个人简介:
    <textarea name="intro" cols="30" rows="10"></textarea>
    <input type="submit" value="提交">
</form>
@WebServlet(urlPatterns = "/s1")
public class Servlet1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 处理汉字乱码
        req.setCharacterEncoding("utf-8");

        // 1) 日期类型的接收,需要注意转换字符串为java中的Date类型
        String birthday = req.getParameter("birthday");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse(birthday);
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // 2) 处理单选按钮
        String sex = req.getParameter("sex");
        System.out.println(sex);

        // 3) 处理复选框, 注意处理null值(都没有勾选时,就是null值)
        String[] hobbies = req.getParameterValues("hobby");
//        System.out.println(Arrays.toString(hobbies));
        if(hobbies != null) {
            for (String hobby : hobbies) {
                System.out.println(hobby);
            }
        }

        // 4)处理下拉列表
        String city = req.getParameter("city");
        System.out.println(city);

        // 5)处理文本域
        String intro = req.getParameter("intro");
        System.out.println(intro);
    }
}

2. jstl 标签

c:choose 类似于 if elseif else

语法:

<c:choose>
  <c:when test="条件1">内容1</c:when>
  <c:when test="条件2">内容2</c:when>
  ...
  <c:when test="条件n">内容n</c:when>
  <c:otherwise>以上条件都不成立时</c:otherwise>
</c:choose>

c:out 用来输出特殊内容
它可以对${}输出的内容进行控制,可以控制是否忽略html代码

<c:out escapeXML="false" value="${作用域变量}"> 不忽略html
<c:out escapeXML="true" value="${作用域变量}"> 忽略html,(当做普通文本)

fmt:formatDate 用来格式化日期
fmt:formatNumber 用来格式化数字
语法示例:

<fmt:formatDate value="日期对象" pattern="日期格式"/>

<fmt:formatNumber value="数字对象" pattern="数字格式"/>

数字格式 # 和 0 其中0可以用来前置补零或后置补零

3. jsp 遗留语法

3.1 jsp的脚本

<%
	任意java代码
%>

jsp的弊端在于当代码越来越多时,使用jsp脚本的方式,会造成项目代码难以维护
现在绝大多数公司都禁止在jsp出现脚本代码

3.2 jsp表达式

<%= 表达式 %>

作用是向页面显示值, 表达式不能以;结束

3.3 jsp指令(**)

<%@ page contentType="页面的内容类型和编码" 
	import="要导入的java类"
    isELIgnored="是否忽略EL表达式的处理" 
	errorPage="出现错误时,要跳转的页面"
	isErrorPage="用在错误页面上,取值为true表示是错误页面,这时候才能在页面中使用exception变量"
	%>

exception只能配合jsp表达式和jsp脚本使用

<%@ taglib prefix="前缀" uri="标签的唯一标识" %>

作用是导入标签库

     

<%@ include file="另一个jsp页面" %>

作用,重用页面上的一些标签和代码

3.4 jsp声明

<%! 
	可以声明变量和方法
%>

jsp的原理:

jsp 要工作,也必须编译为java类

public class 类名 extends HttpJspBase{ // HttpJspBase 又是继承了HttpServlet
	
	public int i = 100;
	
	public int sum(int a, int b) {
		return a+b;
	}
	
	public void _jspService(HttpServletRequest request,
		HttpServletResponse response) {
		int i = 10;
		
		out.println(i++);
	}
}
  1. 当首次访问此jsp时,tomcat会把jsp转译为*.java的类(间接继承自HttpServlet)
  2. 再把*.java类编译为*.class字节码
  3. 把加载到虚拟机执行,生命周期类似于servlet的生命周期

jsp的本质仍是一个servlet

3.5 9大隐式对象

无需声明即可使用。

request 代表请求对象(可以获取请求参数,将变量存入request作用域)
response 代表响应对象(返回响应)
out 代表响应的字符输出流
pageContext 页面上下文对象,可以间接获得request等对象,并可以将变量存入page作用域

config jsp的配置信息
page 当前jsp对象(this)
exception 代表的是异常信息(当页面isErrorPage="true"时有效)

session 变量作用范围是一次会话内有效
application 变量作用范围是整个应用程序有效

page作用域: 变量作用范围仅限于当前页面
request作用域: 变量的作用范围在一次请求内有效

5.jsp forward 6.jsp 两个页面使用的是同一个请求
servlet
servlet forward x.jsp servlet与jsp使用的是同一个请求

猜你喜欢

转载自blog.csdn.net/Lisiluan/article/details/82795495