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
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是把另一个页面加载到当前页面.