一个登陆程序及问题若干

来源:互联网 发布:linux oracle启动 编辑:程序博客网 时间:2024/05/22 00:44

(编号与注释相关)

(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");

原创粉丝点击