我们在利用Servlet进行web开发的时候 ,运行的不是 JSP页面 而实际上是一个 Java类的对象 。这个类的对象从
javax.sevlet.http.HttpServlet ;这个类是基于HTTP的 Servlet类 我们自己写的 Servlet应该从 这个类派生而来 .
通过我们自己编写的类 以及对web.xml的部署 ,进行web的流程控制 ,实现用户与服务器的交互 。
要注意在 编写Servlet进行相应客户端的时候 我们在调用 Response.setContenType("text/html;charset=gb2312");的时候一定要放在其他函数调用的前面 因为这是设置 相应给客户端页面的 MIME类型 ,设置真个页面的属性。 这个和JSP页面的 意义是一样的 ,如果我们不设置
那么 页面中的交互文本将是乱码 。。。。
下面是一个简单的 Servlet注册代码
运行 Tomcat的时候输入如下提交
web工程的web.xml编写如下代码
firstServlet //实例名字
me.RServlet //类
firstServlet //实例名字
/firstServlet //URL访问的时候相对于 WEB应用的 逻辑路径
ch08
//这是一个默认主页的配置
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
Servlet代码 ,将生成的 RServlet.class复制到 WEB-INF下的 classes目录下
package me;
import javax.servlet.*;
import javax.servlet.http.*; //基于http的 HttpServlet类在此包中
import java.io.*;
import java.sql.*;
public class RServlet extends HttpServlet //从HttpServlet类派生而来 至少实现以下一个函数
{
String user ;
String password;
PrintWriter out ;//输出流
public void init(ServletConfig config) throws ServletException
{
super.init(config) ;//调用基类的构造函数进行初始化
}
public void service(ServletRequest req, ServletResponse res) //重写Service来对客户端的请求进行相应
{
res.setContentType("text/html;charset=GB2312");//设置相应页面的格式 如果不设置那么将会导致出现乱码
//设置 MIME类型应该在 获取PrintWriter之前
this.getPrintWriter(res);//获得输出流
if((user=req.getParameter("user"))==null||(password=req.getParameter("password"))==null)//数据不合理就返回
{
out.print("非法数据提交!
");
return ;
}
else
{
this.addUserToDB(this.user, this.password) ;//增加用户到数据库
}
}
public void getPrintWriter(ServletResponse res)
{
try
{
this.out=res.getWriter() ;
}
catch(Exception e)
{
}
}
public void addUserToDB(String user,String pass)//增加用户数据到数据库
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
Connection cn=DriverManager.getConnection("jdbc:odbc:testDatabase","sa","7603835");//构造一个Connection对象表示和一个数据库的链接
Statement s=cn.createStatement() ;//创建Statement对象
String sql="insert into info(username,password) values('"+user+"','"+pass+"')";
s.executeUpdate(sql) ;//执行SQL语句
cn.close() ;
}
catch(Exception e)
{
out.print("Error");
}
out.print("数据添加成功!");
}
}