一个登陆程序及问题若干

(编号与注释相关)

(1)out.println("<html>")等等这些都是存放在缓存中的,当程序执行到RequestDispatcher接口的forward(..)方法之后,原先在响应缓存中没有提交的内容将被自动清除。如果是include(..)方法将请求转发给其他的servlet,被调用的servlet对该请求做出的响应将并入原先的响应对象中,原先的servlet还可以继续输出响应信息。

(2)如果在一个表单中用户名和密码的名称分别为user和password,那么在servlet中定义String类型来request.getParameter()时,也可以定义成user和password,不会冲突。

(3)为简化IE地址以及程序中servlet名字,在web.xml的<url-pattern>中将/servlet/LoginServlet1改成/servlet/Login1,将/servlet/LoginServlet2改成/servlet/Login2,则在浏览器中的地址也相应改变。注意更改web.xml后要重启服务器。

(4)关于ServletContext对象.getRequestDispatcher(..)和request.getRequestDispatcher(..)。

    两个方法的参数都是资源路径名(可以是servlet或jsp文件)。

    ServletContext对象.getRequestDispatcher(..)方法的参数必须以"/"开头,因为这个路径是相对于当前的web路径。(比如book工程,servlet位于fo包,则web路径为http://localhost:8080/book,此处假设web.xml中<url-pattern>都为默认带/servlet)在该例中,如果是servlet文件,则应该写成ServletContext对象.getRequestDispatcher("/servlet/WelcomeServlet")。如果是jsp文件,则应是ServletContext对象.getRequestDispatcher("/WelcomeJsp.jsp")。

    request.getRequestDispatcher(..)方法参数是相对于当前(所谓当前,该例子中是以LoginServlet1为准,即在地址栏中输入的那个servlet)servlet路径(比如book工程,servlet位于fo包,则servlet路径为http://localhost:8080/book/servlet,此处假设web.xml中<url-pattern>都为默认带/servlet)。在该例中,如果是servlet文件,则应该写成request.getRequestDispatcher("Login2")(注意此处不是LoginServlet2,(3)中已经改变了<url-pattern>)。如果是jsp文件,则情况较复杂,要把web.xml中<url-pattern>的/servlet/Login1改为/Login1,程序中实现过,不详述。

程序源码如下:

(a)LoginServlet1.java

 

(b)LoginServlet2.java

 

(c)WelcomeServlet.java

 

(d)WelcomeJsp.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'WelcomeJsp.jsp' starting page</title>
   
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">   
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->

  </head>
 
  <body>
    <div align="center"><strong>登陆成功</strong>
  <br>
  欢迎<%String user=request.getParameter("user");
  out.print(user);%>
  <br>
  </div>
  </body>
</html>

 

(e)web.xml

  

http://localhost:8080/book/servlet/Login1 用户名为ping,密码为yang

context.getRequestDispatcher("").forward(request,response)只能是绝对路径。request.getRequestDispatcher("").forward(request,response)可以是绝对路径可以是相对路径。

response.sendRedirect("")可以是绝对路径也可是相对路径

RequestDispatcher rd=request.getRequestDispatcher("Login2.jsp");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个 Python 程序,用于读取储存若干素质的文件。您可以按照如下步骤操作: 1. 准备储存素质的文件,可以是文本文件或者 CSV 文件,每一行表示一个素质,不同列之间用逗号或者其他分隔符分割。 2. 编写 Python 程序,使用文件读取函数打开文件,读取每一行,并将素质存储到一个列表或者字典中。 3. 对于不同的素质储存方式,可以使用不同的数据结构进行存储。例如,对于每行只有一个素质的文本文件,可以使用列表进行存储;对于每行有多个素质的 CSV 文件,可以使用字典进行存储,其中每个键表示一个素质名称,对应的值为该列的所有素质值。 下面是一个读取文本文件的示例程序: ```python # 打开文件 with open('qualities.txt', 'r') as f: # 读取每一行,将素质存储到列表中 qualities = [line.strip() for line in f.readlines()] # 打印素质列表 print(qualities) ``` 如果您的储存方式是 CSV 文件,可以使用 Python 的 csv 模块进行读取。下面是一个读取 CSV 文件的示例程序: ```python import csv # 打开 CSV 文件 with open('qualities.csv', 'r') as f: # 使用 csv 模块读取 CSV 文件 reader = csv.DictReader(f) # 创建一个字典,用于存储所有素质 qualities = {} # 遍历 CSV 文件中的每一行 for row in reader: # 遍历每个素质的名称和值,将其存储到字典中 for name, value in row.items(): if name not in qualities: qualities[name] = [] qualities[name].append(value) # 打印素质字典 print(qualities) ``` 这个程序将会读取一个名为 'qualities.csv' 的 CSV 文件,并将每个素质存储到一个字典中。每个素质的名称将作为字典的键,对应的值为该列的所有素质值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值