展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

javaweb开发(六):servlet请求转发、重定向、EL表达式

  • 构建1个web项目,导入依赖

  • 编写TestServlet

@WebServlet(name = "testServlet",urlPatterns = {"/test"})
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div> TestServlet doGet </div>");
}
}
  • 配置端口

  • 测试

  • 请求转发

  • 新建1个admin.jsp

  • 编写DispatchServlet

@WebServlet("/forward")
public class DispatchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("DispatchServlet doGet");
req.getRequestDispatcher("/WEB-INF/admin.jsp").forward(req,resp);
}
}
  • 启动项目测试
# 访问http://localhost:8080/index.jsp可以访问到页面
# 访问http://localhost:8080/admin.jsp无法访问页面
# 访问http://localhost:8080/WEB-INF/admin.jsp无法访问页面
# 访问http://localhost:8080/forward可以访问页面admin.jsp
# servlet内部转发
  • 转发到其他servlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("DispatchServlet doGet");
req.getRequestDispatcher("request").forward(req,resp);
}
  • 测试
http://localhost:8080/forward?userName=jack&age=11&sport=ball&sport=sleep
  • 控制台打印
DispatchServlet doGet
应用上下文路径 getContextPath=
客户端发出请求时的完整URL getRequestURL=http://localhost:8080/request
请求行中的资源名部分 getRequestURI=/request
请求行中的参数部分 getQueryString=userName=jack&age=11&sport=ball&sport=sleep
发出请求的客户机的IP地址 getRemoteAddr=0:0:0:0:0:0:0:1
客户机发请求使用的网络端口号 getRemotePort=51171
获取请求头 getHeader(Accept)=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
客户端请求参数 getParameter=jack
客户端请求参数列表,多个值 getParameterValues=[Ljava.lang.String;@57d4dac
客户端请求参数封装成的map类型 getParameterMap=org.apache.catalina.util.ParameterMap@68a7bf4d
  • EL表达式
# DispatchServlet中编写入下
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("DispatchServlet doGet");
req.setAttribute("name","xdclass");
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
  • index.jsp中获取领域对象中值
name = ${name}
  • 启动测试
# 直接访问index.jsp不能获取到领域对象中的值
http://localhost:8080/index.jsp
# 访问时使用重定向可获取到领域对象中值
http://localhost:8080/forward


  • 新建1个实体类
public class User {
private int id;
private String name;
private String host;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
}
  • 编写servlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("DispatchServlet doGet");
User user = new User();
user.setHost("https://xdclass.net");
user.setId(1);
user.setName("老王");
req.setAttribute("user",user);
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
  • 编写index.jsp
name = ${user.name}
id= ${user.id}
host= ${user.host}
  • 启动测试
http://localhost:8080/forward

  • 重定向,是一个外部的转发,有2次请求,无法获取到领域对象中的值
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("DispatchServlet doGet");
req.setAttribute("name","jack");
resp.sendRedirect("/index.jsp");
}
  • 测试
posted @   DogLeftover  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示