怎么在jsp中使用‘c标签’、jstl核心标签库、servlet四大域对象

  •  request作为域对象 

  • 使用servlet接受前端请求 响应数据,具体是 request 来接受请求的数据

  • response 来相应数据 但是 ,直接使用response 响应数据 是不够美观的 

  • 所以 后面咱们要引出一个 技术 叫做 jsp ,jsp 上面可以写html元素 ,所以 擅长页面展示 

  • 但是 有个问题 如何把后端动态的数据展示在 jsp 上面 

  • 这里 咱们现将第一种 解决方案 就是 域对象 

  • 他解决问题的思想 就是 在后端 把数据放在域对象中,在 jsp 页面上 从域对象中再取出来 *

  • javaweb 中 有四个域对象

    • pageContext
    • request
    • session
    • servletContext/application

一、四个域对象

域对象作用范围
pageContext该作用域中的属性只在当前 JSP 页面有效,跳转页面后失效。
request该作用域中的属性只在当前请求范围内有效,转发时可以共享request对象中数据,重定向后失效
session该作用域中的属性只在当前会话范围内有效。当session过期;或者没有设置JSESSIONID的有效期,而关闭网页,都会引起失效。
application该作用域中的属性在整个应用范围内有效,服务器重启后失效。

@WebServlet("/request5")
public class Request5Demo extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");

        resp.setContentType("text/html;charset=utf-8");


        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String gender = req.getParameter("gender");
        String age = req.getParameter("age");

        String[] hobbies = req.getParameterValues("hobby");

        String sheng = req.getParameter("sheng");

        //封装到对象中

        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setGender(gender);
        user.setAge(Integer.parseInt(age));

        user.setHobbies(hobbies);
        user.setSheng(sheng);

        //req 对象 作为 域对象来使用
        //req.setAttribute("user",user);

        //思考:为什么 重定向没有把数据带到这个页面
        //resp.sendRedirect("/main.jsp");
        // 转发 为什么 可以把数据带过去
        //req.getRequestDispatcher("/main.jsp").forward(req,resp);

        //由于 转发是一次请求 所以 request 在转发的时候 是生效的


        // 重定向是两次请求 你在 servlet 中放数据的request 和 在jsp 中取数据的request 不是同一个
        // 所以 重定向时 无法使用request 携带数据

        //那么 可以使用作用域更大的域对象

        HttpSession session = req.getSession();

        session.setAttribute("user",user);
        //重定向
        resp.sendRedirect(req.getServletContext().getContextPath()+"/main.jsp");
        //转发
       // req.getRequestDispatcher("/main.jsp").forward(req,resp);

    }
}

二、jstl标签

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。主要包括:

核心标签(c:)

JSTL函数(fn:)

格式化标签(fmt:)

数据库标签

XML标签

2.1核心标签库

标签说明
c:out将表达式的结果输出到页面中,类似于 <%= ...%>
c:set在指定范围内设置变量或属性值
c:if类似于 Java if 语句,用于条件判断
c:choose类似于 Java switch 关键字,为 c:when和c:otherwise 的父标签
c:whenc:choose 的子标签,用来判断条件是否成立
c:otherwisec:choose 的子标签,当所有的 c:when 标签判断为 false 时被执行
c:forEach类似于 Java for,用于迭代集合中的信息

2.2 使用步骤

1):有两种方案:

①:导入jstl-1.2.jar文件

②:写maven依赖(方便一些,个人推荐)

 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

2)通过tablib指令在jsp中导入相关的标签库

<%@ page contentType="text/html;charset=UTF-8" language="java" %>​<!-- 引入核心标签库,前缀必须使用"c" --><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

3)核心标签库语法

<body>

<!-- 设置值
	var 变量名
	value 对应的值
 -->
<c:set var="name" value="haha" ></c:set>

${name }

<!-- 输出值 
 default 表示默认值 -->
<c:out value="${name1 }" default="aa"></c:out>


<c:set var="sex" value="女"></c:set>

<!-- 单条件判断 
类似java中 if(){}
test 判断条件,可以通过el表达式设置,在{}里面写判断逻辑
-->
<c:if test="${sex == '男' }">
	<input type="radio" value="男" checked="checked" />男
	<input type="radio" value="女"  />女
</c:if>
<c:if test="${sex == '女' }">
	<input type="radio" value="男"  />男
	<input type="radio" value="女" checked="checked" />女
</c:if>

<c:set value="50" var="score"></c:set>
<!-- 多条件判断 -->

<c:choose>
	<c:when test="${score > 80 && score <= 100 }">
		学霸
	</c:when>
	<c:when test="${score >= 60 && score <= 80 }">
		中规中矩
	</c:when>
	<c:when test="${score > 0 && score < 60 }">
		渣渣
	</c:when>
	<c:otherwise>
		分数错误
	</c:otherwise>
</c:choose>

<% 
	List<User> list = new ArrayList<User>();
	for(int i = 0; i < 3; i++){
		User d = new User();
		d.setName("wangwu" + i);
		d.setAge(20);
		list.add(d);
	}
	request.setAttribute("userList", list);
%>
<!-- 循环遍历
	items 要遍历的集合
	var 遍历的元素的变量名
	varStatus 变量的状态
		count 序号 1, 2, 3, 4.。。
		index 索引、下标
		first 是否第一个元素
		last 是否最后一个元素
		
 -->
 
<table border="1" width="200">
	<tr>
		<td>name</td>
		<td>age</td>
		<td></td>
	</tr>
	
    <!--  var是循环时的存储数据的变量名,用它来得到想要的信息 -->
	<c:forEach items="${userList }" var="user" varStatus="vs">
		<tr>
			<td>${user.name }</td>
			<td>${user.age }</td>
			<td>${vs.count }/${vs.index }/${vs.first }/${vs.last }</td>
		</tr>
	</c:forEach>

</table>


</body>

jsp中怎么实现动态路径?

${pageContext.request.contextPath}

eg:

<a href="${pageContext.request.contextPath}/DogServlet">点击获得狗信息</a>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值