Java Web简明教程–Servlet篇[5]–犀利的内置对象

简介: 前面几篇写的内容挺多挺乱,稍微理顺下:1,网站无非是前后台交互2,目前我们的后台可以认为是Servlet3,前台可以认为是JSP和HTML4,Servlet因为可以写out.println("");等输出到前台的html内容,所以一定程度上它的输出可以认为是前台。5,JSP因为可以在<%%>中间写Java代码后台逻辑,所以可以当后台使用

6,不管是html还是jsp,其实都是在服务器端的,区别是:客户端访问时,html直接传给客户端,jsp需要先转换为Serlvet,然后Servlet运行结果返回给客户端。当然其实我们都不用管,会用就行


好,猫哥整理逻辑之后,果然更乱了。其实不是猫哥整理的乱,而是因为JSP和Servlet能力太强,所以有时候啊,得有个领导给他们分分工,设定下各自的职责和目标,激发他们最大的能力。所谓的领导,当然是程序设计世界的上帝——程序猿和美丽的程序媛啦——哎哎,那谁谁,看到程序媛,眼都直了。


OK,按照业内比较流行的做法,就是JSP负责显示的外观和显示的具体内容,Servlet负责根据需求提供获取的内容冰处理业务逻辑。在这个过程中,涉及从前台网页提交数据到Servlet,这个问题已做了详细说明,此处不表。还涉及一个从Servlet将数据返回给网页显示的问题,这个问题有以下处理方案:


方案1,Servlet处理后,跳转到HTML页面,因为HTML页面是静态的,所以无法实现输出动态结果的功能。比如就无法输出不同班级不同的学生列表。

方案2,Servlet处理后,使用out.print()输出处理结果。这个方法可行,但是输出的内容混杂着许多html标签,导致前端后端完全无法分离。

方案3,Servlet处理后,跳转到JSP页面,方法可行。但是需要将数据(比如学生列表)从Servlet传递到JSP页面。

1

2

3

综合方案1-3,方案3如果实现的好,可以在最大程度上实现前后端分离,逻辑清晰,所以方案3得到了大家的喜爱。同时大家完全不必担心方案3中的数据传输问题,Servlet/JSP提供了内置对象 这样的逆天神器——其实就是封装好的对象,非常棒的解决了这个问题。


OK,本篇我们只讲最最常用的四个内置对象response、out、request、session。


先来看个例子


public void doPost(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {//response封装了客户端响应模型

           //request封装了客户端请求的信息

    PrintWriter out = response.getWriter();//out用于输出

1

2

3

4

我们知道,网页提交请求到服务器,然后服务器响应请求输出结果。这个过程从根本上讲是数据包的传递,再根本上讲是电压等物理信号的传递。然而我们不管,在Servlet和JSP世界,这些信号被封装到了request和response对象中。也就是说,request对象中包含着客户端请求的信息,而response代表着服务端对客户端响应的信息,通过它哥俩,程序员就能非常方便获取、操作输入输出(请求响应)。


然后out对象呢,其实就是response的一个小弟,response对象封装的是对客户端的各种响应,最常见的就是输出(当然不止输出,还有网页跳转什么的也算响应)。所以out也成了一个内置对象。


上面的例子是在Servlet中使用response、out、request,在JSP中更加简单,看例子


<body>

  该班的学生有:<br/>

   <%

    response.setContentType("text/html");//设置输入格式

 response.setContentType("text/html");

    request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8");

    String classId=request.getParameter("class");//获取要查询的班级id

    StudentOperation stuOper=new StudentOperation();

    List students=stuOper.selectByClassId(classId);

    for(Object obj:students){

  StudentInfo stu=(StudentInfo)obj;

  out.print("姓名:"+stu.getStudentName()+" ");

  out.print("班级:"+stu.getStudentClass().getClassName());

  %>

  <br/>

  <%

 }

    %>

 </body>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

可见,这三个对象是可以在JSP中直接不打招呼拿来用的,那叫一个方便,所以才叫内置对象吗。内置的意思,不用在置办了,咱JSP天生就有!


OK,所以从Servlet向JSP传值,变得如此简单:


Servlet端: request.setAttribute("name", "张三");

JSP获取:      request.getAttribute("name");

1

2

attributte的意思是“属性”,request.setAttribute("name", "张三");的意思是在request这个内置对象添加一个叫name的属性,属性值是张三。request.getAttribute("name");的意思是从request这个内置对象中获取名字是name的属性的值。


OK,还有一个session,这个才是难点。

session也有setAttribute和getAttribute方法,同样可以从Servlet向JSP传值。


那有request就够了,还要session干嘛?session具备非常重要的意义,request代表一次请求,而session代表一次会话,所谓回话的意思就是一个客户在使用一个浏览器客户端访问服务器期间,session在此期间生存在唯一。简单点,session有点像为每个用户分配的静态对象,开始访问时生成,关闭浏览器时销毁。这个可能不好理解,暂时先会用request传值就行了,session在具体实践中再讲。

相关文章
|
26天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
48 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
59 6
|
1月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
74 4
|
1月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
67 0
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
109 0
|
2月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
44 1
|
2月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
43 0
|
3月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
3月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
57 0
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
251 0