Servlet问题

1.今天开始学习servlet技术,一开始主要是了解一下servlet的概念,优点。Servlet的生命周期,首先是创建一个servlet类,自动加载形成servlet实例,之后一直等待用户请求,如果有请求,则会接受请求,调用service方法,并将结果返回到客户端,之后又会继续等待下一个请求,或者由服务器调用destroy方法卸载。Servlet生命周期执行的三个函数有init(),service(),destroy()。除了service方法可以执行多次之外,其他2个方法都只能执行1次。

 2010112411594059.jpg

2.学会开发,部署一个简单的servlet。首先就是编写一个servlet的程序,放在WEB-INF/classes/test目录下,之后就是在classpath中加入servlet-api.jar和jsp-api.jar的路径,之后再编译servlet程序,之后就是建立一个web.xml文件来告诉servlet容器servlet类在哪个位置,最后一定要做的一步就是重启tomcat服务器。

具体步骤如下:

我写了一个简单的Hello程序,代码如下

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

public class Hello extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super .init(config);
}

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{
PrintWriter out
= response.getWriter();
response.setContentType(
" text/html;charse=GB2312 " );
out.print(
" <HTML><BODY> " );
out.print(
" hello,servlet " );
out.print(
" </body></html> " );
}

public void destroy()
{
}
}

如果直接编译的话,会说找不到javax.servlet包,javax.servlet.http。。。。因为我们还没有配置环境变量,右键我的电脑,属性,高级,如下图

2010112412133534.jpg

之后点击环境变量

2010112412141574.jpg

选择系统变量里面的classpath

2010112412143670.jpg

在变量值那里添加...假设我的apache装在c:\program files\apache software foundation\tomcat 6.0目录下的话

;c:\program files\apache software foundation\tomcat 6.0\lib\jsp-api.jar;c:\program files\apache software foundation\tomcat 6.0\lib\servlet-api.jar

之后我再建一个web.xml文件来告诉servlet容器servlet类放在哪里了

 
  
<? xml version="1.0" encoding="iso-8859-1" ?>
< web-app xmlns ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version ="2.5" >
< servlet >
< servlet-name > Hello </ servlet-name >
< servlet-class > test.Hello </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > Hello </ servlet-name >
< url-pattern > /Hello </ url-pattern >
</ servlet-mapping >
</ web-app >

3.servlet之间的协作

     如何进行servlet之间的协作,servlet之间是可以互相通信的。下面我写了一个rud1的servlet,主要是接收由jsp页面传递过来的参数

name1和name2参数,如果是空值,则回到jsp页面。如果name1=li&&name2=123则转到rud2这个servlet,其他则转回jsp

ContractedBlock.gif ExpandedBlockStart.gif 代码
package  test;
import  java.io. * ;
import  javax.servlet. * ;
import  javax.servlet.http. * ;
import  java.util. * ;

public   class  Rud1  extends  HttpServlet
{
    
private   static   final  String CONTENT_TYPE = " text/html;charset=GBK " ;
    
public   void  init()  throws  ServletException
    {
        
// super.init(config);
    }
    
public   void  doPost(HttpServletRequest request,HttpServletResponse response)  throws  ServletException,IOException
    {
        doGet(request,response);
    }
    
    
public   void  doGet(HttpServletRequest request,HttpServletResponse response)  throws  ServletException,IOException
    {
        
// doPost(request,response);
        String name1 = request.getParameter( " name1 " );
        String name2
= request.getParameter( " name2 " );
        
if (name1.equals( "" ) | name2.equals( "" ))
        {
            RequestDispatcher rd
= getServletContext().getRequestDispatcher( " /Dia.jsp " );
            rd.include(request,response);
        }
        
byte [] b = name1.getBytes( " iso-8859-1 " );
        name1
= new  String(b);
        
byte [] bb = name2.getBytes( " iso-8859-1 " );
        name2
= new  String(bb);
        
if (name1.equals( " li " ) && name2.equals( " 123 " ))
        {
            RequestDispatcher rd1
= getServletContext().getRequestDispatcher( " /Rud2 " );
            rd1.forward(request,response);
        }
        
else
        {
            RequestDispatcher rd2
= getServletContext().getRequestDispatcher( " /Dia.jsp " );
            rd2.forward(request,response);
        }
    }
    
    
public   void  destroy()
    {
        
    }
}

主要是用了

void forward(ServletRequest request,ServletResponse response)throws ServletException,IOException
void include(ServletRequest request,ServletResponse response)throws ServletException,IOException
两个都是跳转函数,forward是转发到服务器上的另一个资源,并把控制权交给目标servlet
include是把资源包含到响应当中。

我试过用2个方法来进行跳转,发现用forward是不会出现乱码,但是用include则会出现乱码,具体原因还在研究当中

forward是转发的另一个页面.
include是把另一个页面加载到当前页面.

转载于:https://www.cnblogs.com/cookies9/archive/2010/11/24/1886377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值