Servlet问题

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

 

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。。。。因为我们还没有配置环境变量,右键我的电脑,属性,高级,如下图

之后点击环境变量

选择系统变量里面的classpath

在变量值那里添加...假设我的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

代码
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/p/1886377.html