Servlet的主要作用是处理WEB服务器发送过来的请求信息(request),并且把响应结果返回给WEB服务器(response)。
Servlet的这个功能是靠Servlet引擎(Servlet容器)完成的。servlet小程序也因此需要放在Servlet容器中才能运行。
因此常说Tomcat服务器既是WEB服务器又是Servlet容器。
servlet程序代码:TestServlet.java
package com.vmn;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
//Servlet程序
public class TestServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
try{
response.setContentType("text/html;charset=gb2312");//设置字符集
//response.setCharacterEncoding("gb2312");
PrintWriter pw = response.getWriter();
pw.print("<html>");
pw.print("<form action=logincl method=post>");
pw.print("用户名:<input type=text name=username><br>");
pw.print("密 码:<input type=password name=password><br>");
pw.print("<input type=submit value=提交>");
pw.print("</form>");
pw.print("</html>");
}catch(Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
doGet(request,response);
}
}
此类通过重写javax.servlet.HttpServlet类来实现自己的servlet。
12、13行设置响应给客户端的字符编码。否则页面上显示中文时会出现乱码。
web.xml
<?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_4.xsd"
version="2.4">
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.vmn.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/ts</url-pattern>
</servlet-mapping>
</web-app>
第6行声明了一个servlet,标签使用<servlet>。
第11行声明了servlet的映射,标签使用<servlet-mapping>。
第7行定义了此servlet的名字为myservlet,第12行的名字需要跟第7行相同,这样就映射过来了。
第13行定义了访问路径为"/ts"时,请求就会传到myservlet这个servlet。
第8行定义了这个servlet的实现类:com.vmn.TestServlet。这样请求就会被发送到这个servlet类中。
相关API:
当提交到logincl这个servlet的时候,在logincl这个servlet中可以通过
request.getParametter("username"); 可以获得myservlet中的属性username的属性值。
response.sendRedirect("welcome?username=zhangsan&password=123456");
通过这句话可以把响应返回到welcome这个servlet,并且把参数username和password这两个属性分别赋值zhangsan和123456
注:请求的路径后要用"?"分隔,当需要传多个参数时需要用"&"作为分隔符。
request.setCharacterEncoding("gbk");
当request传递中文字符的时候,需要上面这句话设置字符集参数
request.getRemoteHost();//获得客户端的IP
request.getServletPath();//获得请求的servlet路径