http://blog.csdn.net/clarke0922/archive/2005/01/12/250132.aspx
2005年1月12日上午 天气:阴天
今天还是跟前几天一样,还是蛮冷,太阳也没有出来。一大早就冲到了学校,教室里还是跟以前一样
还是那几个人上课。今天蛮意外,连三个火枪手都没有来!!奇怪!!
进入正题!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
这样可以提高安全性!
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个映射,是其结果不一样!!
今天就到这里,休息一下!~~