浪潮优派培训笔记:JSP的9大内置对象之(二).与Input/Output有关的内置对象:out、request、response

(二).与Input/Output有关的内置对象:out、request、response

  request对象实现javax.servlet.http.HttpServletRequest接口-->javax.servlet.ServletReqest接口;

  response对象实现javax.servlet.http.HttpServletResponse接口-->javax.servlet.ServletResponse接口;

 out对象实现javax.servlet.jsp.JspWriter类,后者和Servlet中的常用的PrintWriter类都继承于java.io.Writer类。

  out(掌握):  JspWriter类型,提供print()方法,

  out.print()和out.println()用于打印信息到浏览器。

  此外out对象还提供了一些其他方法来控制管理输出缓冲区和输出流。(了解即可)

 获得当前缓存区大小:out.getBufferSize();

  获得剩余缓存区大小:out.getRemaining();

  request(重点)

 request的常用方法:获取请求的路径(协议,服务器名,端口,应用程序上下文)

request.getContextPath();//获取项目的Web Context-root,如:/jspPro2

request.getScheme();//获取协议类型,如:http

request.getServerName();//获取服务器名

request.getServerPort();//获取服务端口号

例如:当新建一个Advanced Templates的JSP文件时,文件的开头会有下面的这段代码:

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+

request.getServerPort()+path+"/";

%>

                其中,basePath就定位到应用程序的根路径,即:http://localhost:7070/项目名/。

  request的功能——数据传递功能

l在表单提交时,tomcat会自动将表单元素的值以name-value对的形式封装到下一个页面的request对象中去,所以可以通过下一个页面的request对象的getParameter()或getParameterValues()方法来提取自动封装的数据。其中:通过getParameter()方法来获取单值,通过getParameterValues()方法获取多值。

l根据业务需要,程序员可以通过request.setAttribute("name","value")方法将数据封装到request对象中,则在此request对象生命周期范围内,可以通过request.getAttribute("name")取值,或通过request.removeAttribute("name")删除数据。

l获取url中的参数 :url中带参数的形式: ../*.jsp?name=value

       根据name获取value: request.getParameter("name");

       【request生命周期】:从发出请求,到此请求被响应;如果url发生变化,则请求发生变化。

 request的功能——实现界面的请求转发

请求转发:也叫服务器端的转发,客户端(浏览器)的url不变

       request.getRequestDispatcher("要转向的url").forward(request,response);

 

例:在JSP项目jspPro2的register.jsp文件的全部代码如下: 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<html>

    <head>

       <title>Register</title>

       <script type="text/javascript">

           function regButton(){

              document.forms[0].action="returnInfo.jsp";

              document.forms[0].submit();    

           }

       </script>

    </head>

    <body>

       <form action="" method="post" name="myform">

           <table align="center" border="0">

              <tr>

                  <td align="right">用户名:</td>

                  <td><input type="text" name="name" size="19"/></td>

              </tr>

              <tr>

                  <td align="right">密&nbsp;&nbsp;码:</td>

                  <td><input type="password" name="pass" size="21"/></td>

              <tr>

                  <td align="right">性&nbsp;&nbsp;别:</td>

                  <td><input type="radio" name="sex" value="男" checked>男

                     &nbsp;&nbsp;

                     <input type="radio" name="sex" value="女">女

                  </td>

              </tr>

               <tr>

                  <td align="right">爱&nbsp;&nbsp;好:</td>

                  <td>

                     <input type="checkbox" name="hobby" value="看书" checked>

                     看书 &nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="打游戏">

                     打游戏&nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="编程" checked>

                     编程 &nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="吃饭">

                     吃饭

                  </td>

              </tr>

              <tr>

                  <td align="right">出生日期:</td>

                  <td>

                     <input type="text" size="4" maxlength="4" name="year">

                     年&nbsp;

                     <select name="month" size="1">

                         <option value="0">请选择月份</option>

                         <option vlaue="1" selected>一月</option>

                         <option vlaue="2">二月</option>

                         <option vlaue="3">三月</option>

                         <option vlaue="4">四月</option>

                         <option vlaue="5">五月</option>

                         <option vlaue="6">六月</option>

                         <option vlaue="7">七月</option>

                         <option vlaue="8">八月</option>

                         <option vlaue="9">九月</option>

                         <option vlaue="10">十月</option>

                         <option vlaue="11">十一月 </option>

                         <option vlaue="12">十二月 </option>

                     </select>

                     月&nbsp;

                     <input type="text" size="2" maxlength="2" name="day">

                     日

                  </td>

              </tr>

              <tr align="center">

                  <td colspan="2">

                     <input type="button" value="注  册" οnclick="regButton()">

                     &nbsp; &nbsp;

                     <input type="reset" value="重  置">

                  </td>

              </tr>

           </table>

       </form>

    </body>

</html>

 通过浏览器访问register.jsp并输入相应信息后的显示效果为:

returnInfo.jsp文件的全部代码如下: 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<html>

    <head>

       <title>return info</title>

    </head>

    <body>

       <%

           //request.setCharacterEncoding("UTF-8");

           //response.setCharacterEncoding("UTF-8");

           String name = request.getParameter("name");

//设置编码格式

           name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

           String pass = request.getParameter("pass");

           String sex = new String(request.getParameter("sex").getBytes(

                  "ISO-8859-1"), "UTF-8");

           String likes[] = request.getParameterValues("hobby");

           String year = request.getParameter("year");

           String month = new String(request.getParameter("month").getBytes("ISO-8859-1"),"utf-8");

           String day = request.getParameter("day");

       %>

       您提交的信息为:

       <p>用户名:<%=name%></p>

       <p>密码:<%=pass%></p>

       <p>性别:<%=sex%></p>

       <p>爱好:

           <%

              for (String str : likes) {

              String like = new String(str.getBytes("ISO-8859-1"), "UTF-8");

              out.print(like + "   ");

           }%></p>

       <p> 出生日期: <%=year%>&nbsp;<%=month%>&nbsp;<%=day%></p>

    </body>

</html>


上一页面点击“注册”后会出现下面的页面:


 response(重点): ServletResponse <-- HttpServletResponse

response对象用于将服务器端数据发送到客户端,可通过在客户端浏览器显示、用户浏览页面的重定向以及在客户端创建Cookies等实现。

response对象实现HttpServletResponse接口,可以对客户的请求做出动态的响应,向客户端发送数据。以下是response对象的主要方法:

■      addHeader(String name,String value):添加HTTP头文件,该头文件将会传到客户端去,如果有同名的头文件存在,那么原来的头文件会被覆盖。

■      setHeader(String name,String value):设定指定名字的HTTP文件头的值,如果该值存在,那么它将会被新的值覆盖。

■      containsHeader(String name):判断指定名字的HTTP文件头是否存在,并返回布尔值。

■      flushBuffer():强制将当前缓冲区的内容发送到客户端。

■      addCookie(Cookie cookie):添加一个Cookie对象,用来保存客户端的用户信息,可以用request对象的getCookies()方法获得这个Cookie。

■      sendError(int型错误编号,"错误信息"):向客户端发送错误信息。例如,“505”指示服务器内部错误,“404”指示网页找不到的错误。

■      setRedirect(url):把响应发送到另一个指定的页面(URL)进行处理。

响应转发:response.sendRedirect("要转向的url");即客户端转发,浏览器的url会发生变化。

刷新界面:response.setIntHeader("refresh",10);  10秒后刷新本页面

          response.setHeader("refresh","3;url=要刷新到的页面"); 【注意参数形式】

使用HTML语言的HTTP-EQUIV也可以:

<METAHTTP-EQUIV="Refresh" CONTENT=" 10; URL=http://Server/Path">


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我作为 AI 无法编写和执行代码。但是,我可以提供一个基本的思路: 1. 使用 requests 库发起 HTTP 请求,获取网站首页的 HTML 文件。 2. 使用 BeautifulSoup 库解析 HTML 文件,提取新闻列表和图片信息。 3. 使用 pymongo 或 redis-py 库将提取的信息存储到相应的数据库中。 需要注意以下事项: 1. 爬取网站时需要遵守 robots.txt 协议,避免对网站造成过大压力。 2. 爬取网站时需要设置合适的请求头,模拟真实用户访问。 3. 存储信息时需要进行数据清洗和去重,避免存储重复或无用信息。 下面是一份简单的代码示例,仅供参考: ```python import requests from bs4 import BeautifulSoup from pymongo import MongoClient # 设置请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36' } # 发起 HTTP 请求,获取网站首页的 HTML 文件 url = 'http://www.inspuruptec.com:9090/' response = requests.get(url, headers=headers) # 使用 BeautifulSoup 解析 HTML 文件,提取新闻列表和图片信息 soup = BeautifulSoup(response.text, 'html.parser') news_list = soup.find_all('div', class_='news_list')[0] news_items = news_list.find_all('div', class_='news_item') news_data = [] for news_item in news_items: title = news_item.find('a').text href = news_item.find('a')['href'] time = news_item.find('span').text news_data.append({ 'title': title, 'href': href, 'time': time }) images = soup.find_all('div', class_='banner_img') image_data = [] for image in images: src = image.find('img')['src'] alt = image.find('img')['alt'] image_data.append({ 'src': src, 'alt': alt }) # 存储信息到 MongoDB 数据库中 client = MongoClient('mongodb://localhost:27017/') db = client['inspuruptec'] news_collection = db['news'] image_collection = db['images'] news_collection.insert_many(news_data) image_collection.insert_many(image_data) ``` 需要注意的是,上述代码仅是一个简单的示例,实际情况下需要根据具体需求进行修改和优化,以保证程序的稳定性和可扩展性。另外,还需要注意遵守网站的相关规定和法律法规,避免对网站造成不必要的损失和影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值