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在具体实践中再讲。

相关文章
|
8天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
29天前
|
网络安全 开发工具 数据安全/隐私保护
|
11天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
35 4
|
13天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
10天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
26 0
WK
|
16天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
19 0
|
1月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
23 1
|
2月前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
65 3
|
2月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
85 3
|
2月前
|
关系型数据库 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应用提供了一个坚实的基础。
53 0