目录
案例二、使用servlet跳转jsp,且通过reqeust对象传值
创建Servlet并将数据保存到reqeust中,servlet代码
什么JSP
JSP全称Java Server Page,见名知意,Java服务端页面,在使用JSP的时候,大家可以发现JSP和HTML很相似,所以大白话讲,我们可以理解为,有了JSP,我们可以在HTML中写Java代码了,接下来我们就以一个案例来演示,通过JSP向IDEA控制台输出一句话
案例一:使用JSP向IDEA控制台输出内容
1.1、使用Maven创建一个webapp
导入jsp相关坐标
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--EL和JSTL-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
1.2、添加jsp页面test.jsp
<%@page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<% System.*out*.println("Hello JSP"); %>
</body>
</html>
运行效果:
浏览器访问test.jsp
案例二、使用servlet跳转jsp,且通过reqeust对象传值
创建Servlet并将数据保存到reqeust中,servlet代码
package manager;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/testList")
public class BuildingServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码集
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("content-type", "text/html;charset=utf-8");
resp.setContentType("text/html;charset=utf-8");
req.setAttribute("list", initData());
req.getRequestDispatcher("buildings.jsp").forward(req, resp);
}
private List<Building> initData(){
Building b1 = new Building("20栋", "2单元", "无");
Building b2 = new Building("21栋", "3单元", "无");
Building b3 = new Building("22栋", "4单元", "无");
List<Building> list = new ArrayList<Building>();
list.add(b1);
list.add(b2);
list.add(b3);
return list;
}
}
jsp代码
注意:要加入代码,同时上个网页传的变量名要和jsp中的对应
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<th>编号</th>
<th>单元</th>
<th>备注</th>
</tr>
<c:forEach items="${list}" var = "li">
<tr>
<td>${li.no}</td>
<td>${li.no}</td>
<td>${li.remark}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
运行效果
知识点补充
1、EL表达式
EL(Expression Language)是一门表达式语言,EL无法处理逻辑,只负责数据显示。格式:${…}
2、JSTL
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!EL负责显示数据,JSTL负责控制逻辑
案例三:使用servlet跳转jsp
我们在Servlet中通过HttpServletResponse对象的sendRedirect方法实现页面跳转,完成一次请求响应的全过程
package manager;
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 java.io.IOException;
@WebServlet("/testJSP")
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("index.jsp");
}
}
运行效果
在浏览器中请求servlet http://localhost:8080/testJSP 浏览器正常跳转到index.jsp页面
四、什么是请求转发和重定向
1、转发是继续传递、处理同一个请求,在服务器端进行,浏览器显示旧请求URL
2、重定向在客户端运行,会产生新请求,经过一次重定向后,浏览器会显示新url,UA EG reqeust内的对象无法使用。即目标资源不能获得reqeust属性值,而转发能获取。
3、因为浏览器要发出一个新请求,所以重定向速度比转发慢。
五、解决中文乱码问题
1、IDEA设置项目的编码集
2、解决Servlet中文乱码
//设置编码集
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
3、解决tomcat中HTML中文乱码
第1步:在config/server.xml中添加URIEncoding=“UTF-8”:
第2步:在config/web.xml进行修改,在servlet标签中添加fileEncoding属性:
第3步:切记要将之前你已经建成的html删除后在重建,这步很重要,不然你还是会发现上面的方法没用,因为已经建好的html文件其编码格式早已经改变。
第4步:启动tomcat
4、解决JSP乱码问题
<%@page contentType="text/html;utf-8" pageEncoding="utf-8" language="java" isELIgnored="false" %>