J2EE 第5次课笔记--Servlet

时间:2020-12-24 21:04:34

http://blog.csdn.net/clarke0922/archive/2005/01/12/250132.aspx

2005年1月12日上午                                                                                                               天气:阴天

          今天还是跟前几天一样,还是蛮冷,太阳也没有出来。一大早就冲到了学校,教室里还是跟以前一样

还是那几个人上课。今天蛮意外,连三个火枪手都没有来!!J2EE 第5次课笔记--Servlet奇怪!!

          进入正题!go!

            今天还是讲servlet,上次讲到了servlet的部署文件的配置和怎样在浏览器*问servlet!!

 今天王老师讲了一下怎样在web.xml中部署一个servlet的Init-value,然后在servlet中通过getInitParameter(”name”)

调用初始化的值,这样的好处在于---如果你编写了很多的servlet,而起用到了一个值或者多个值,然后你要去修

改那个值,但是你又不想把程序从新编译,可以在应用程序的web.xml中的相应的servlet中去部署一个初始化的值

,这样你就只需要修改这个值就可以了!还讲了怎样把一个servlet中的request和response传个另外一个servlet或者

更多?---需要用到RequestDispatcher这个类!

具体请看下面的例子:

1.怎样在web.xml中部署一个初始值

         a.首先建立一个servlet,名字为ServletInitValue,代码如下:

           
import javax.servlet.http.*;
            import java.io.*;

            public class ServletInitValue extends HttpServlet
            {
             public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
             {
              //设置文本类型,如果要显示中文可以加上charset="gb2312",
              //如果用PrintWriter这个类时,setContentType必须首先声明
              response.setContentType("text/html");  
              request.setCharacterEncoding("GBK");     //设置字体为大陆简体
  
              PrintWriter out = response.getWriter();  //得到输出流
              String age = getInitParameter("age");    //通过此方法得到web.xml部署的值
              out.println("Your age is: "+age);
             }
            }



    b.部署web.xml文件

    <?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <!--映射一个servlet-->
  <servlet>
    <servlet-name>aa</servlet-name>
    <servlet-class>ServletInitValue</servlet-class>
 <init-param>
   <param-name>age</param-name>
   <param-value>24</param-value>
 </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>aa</servlet-name>
 <url-pattern>/yy</url-pattern>
  </servlet-mapping>

</web-app>
      
c.打开tomcat,输入http://localhost:8080/yy

     显示your age is: 24
注:因为在部署里面映射了servlet的访问路径,就不需要输入http://localhost:8080/servlet/ServletInitValue
     这样可以提高安全性!J2EE 第5次课笔记--Servlet


2.怎样通过在servlet传值

    a.先建立一个servlet进行中间处理

import javax.servlet.http.*;
import java.io.*;
import javax.servlet.*;

public class WordsCE extends HttpServlet
{
 public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
 {
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("GBK");
  
  String text = request.getParameter("name");
  String btn = request.getParameter("ok");
  if(btn.equals("中文"))
  {
   RequestDispatcher rd = request.getRequestDispatcher("/yo");  //此方法可以把参数传到下一个servlet
   rd.forward(request,response);   //把当前servlet的request和response传给下一个servlet
  }
  else
  {
   RequestDispatcher rd = request.getRequestDispatcher("/ya");
   rd.forward(request,response);
  }
 }
}

    b.建立显示的servlet

import javax.servlet.http.*;
import java.io.*;
import javax.servlet.*;

public class ShowWords extends HttpServlet
{
 public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
 {
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("GBK");
  
  PrintWriter out = response.getWriter();
  String s = new String(getInitParameter("language").getBytes("ISO-8859-1"));
  String text = request.getParameter("name");
  out.println(s+", "+text);
  out.close();
  
 }
}

     c.部署web.xml文件
   <?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <!--映射一个servlet-->
  <servlet>
    <servlet-name>abc</servlet-name>
    <servlet-class>ShowWords</servlet-class>
 <init-param>
   <param-name>language</param-name>
   <param-value>Hello</param-value>
 </init-param>
  </servlet>
  <servlet>
    <servlet-name>aoe</servlet-name>
 <servlet-class>ShowWords</servlet-class>
 <init-param>
   <param-name>language</param-name>
   <param-value>你好</param-value>
 </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>abc</servlet-name>
 <url-pattern>/ya</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>aoe</servlet-name>
 <url-pattern>/yo</url-pattern>
  </servlet-mapping>

</web-app>

输出的结果是这样的
 hello,输入的信息
      &
你好,输入的信息


不难看出,此程序是用一个servlet来处理hello和你好的输出,但还是需要中间处理提交的信息,就用WordsCE这个

servlet来处理提交的信息和把这些信息交给ShowGoods来显示!

WordsCE有个方法getRequestDispatcher(“/ya“);来把本servlet的信息交个这个映射的servlet进行处理,也就是

ShowGoods,并且用forward方法传出request和response,完全把处理权交给了下一个servlet!

在部署文件中,进行了对Showgoods一个servlet的2个映射,是其结果不一样!!

今天就到这里,休息一下!~~