查看完整版本: [-- servlet 基础教程(一) --]

风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› servlet 基础教程(一) 登录 -> 注册

1F servlet 基础教程(一)   唧唧 Post by : 2008-07-23 01:28:26.0

基本概念:
1.     什么是Web?Web有什么用?
2.     什么是Web服务器?Web Server?
3.     Web Server的作用?
4.     发展历史?
5.     什么是CGI?
6.     Servlet的出现
7.     Servlet的作用?
8.     Web Server和Servlet的交互
9.     Servlet API
 
什么是Web?Web有什么用?:
Web就是网络,一个大的网络,是由n个服务器和客户端组成的的计算机网络,有了这个网络,就可以实现各个计算机之间的通信
 
什么是Web服务器?Web Server?
在web这个网络中,有一些计算机承担主管的作用,很多的信息都放到一个或者多个电脑中,其他计算机如果想要这些信息,那么需要到主管这里请示,然后主管回复他们,这个主管就是web服务器,也就是Web Server,它一般是只两个意思,一个是硬件是服务器,另一个是软件是服务器,比如在硬件服务器上装上服务器端的软件,Tomcat等,它的好处就在于通用
 
Web Server的作用?
1.     负责各个计算机的通信 Socket
2.     线程,处理并发,多个计算机(多用户)与服务器通信的能力 Socket
3.     特定的协议
发现问题:如果自己架设个Web Server是不容易实现,需要做大量的工作,设计制作Web Server是由系统程序员使用c/c++开发的
 
发展历史?
专用服务器: 例如:QQ,MSN,需要在客户端装软件,程序员需要开发客户端程序
Web时代:互联网上用户需要客户端,程序员只需要在通用服务器上进行二次开发,例如:开发个网站等等,用户在客户端上只装个通用的客户端就行(BrowBer浏览器),这样就可以用很多的基于Web Server平台开发的程序,非常的方便
Web Server:1.使用80端口 2.业务层协议:http
BrowBer:浏览器,如IE
 
什么是CGI?
如果我们需要做个通用的软件,那么在Web Server平台上进行二次开发,这个工作是由应用程序员来做,我们使用的是JAVA
 
如果在Web Server平台上进行二次开发,需要使用一些技术,如:CGI,Servlet等
什么是CGI?
公共网关接口,工作方式:请求-响应特点:1.无连接,请求-响应-断开连接 2.http协议
为什么要使用http协议呢?如果是有限连接,由于大量的客户端要进行访问,所以资源不够,所以使用http协议无连接的方式,解决了大量客户端访问服务器的问题
CGI就是Web Server上的Web组件,它不能离开Web Server这个平台
Web Server相当于一个容器,运行环境,Web组件在这个平台上工作
 
CGI的作用:1.采取了一个工作方式:请求-响应(无连接)实现通信功能 2.完成业务计算
 
Servlet的出现:
CGI的问题:CGI是一个独立的进程,进行工作的,进程和进程间的通信不大容易实现,比较复杂
客户端—请求(request)—web server—交给CGI(独立进程)做业务计算—返回给web server—响应(reponse)—客户端
web server通过ipc为CGI提交服务,这样是比较困难的
JAVAEE规范:Servlet替代CGI
两者的区别:1.Servlet用java写的,CGI用c/c++写的 2.Servlet是多线程的,CGI是多进程的,多线程比多进程好实现 3.Servlet是常驻内存的,效率高
 
Servlet的作用?
工作在web server之上,完成业务计算,以请求响应的方式完成特定的工作
 
Web Server和Servlet的交互:
Web Server的容器提供一些公共的对象,给Servlet来使用
Servlet组件API,容器回调这些API
 
Servlet API:
容器回掉的API:
init():给Servlet做初始化的
Service(request):将请求的信息作为参数传递给Servlet
Destroy():卸载方法
 
从容器中读取Servlet信息的API:
GetServletconfig():得到Servlet的配置信息
GetServletinfc():得到Servlet的配置信息
 
搭建Web Server环境(TomCat)
1.需要的资源
2.搭建过程
3.TomCat目录结构
 
需要的资源:
1.TomCat5.5:下载地址:http://jakarta.apache.org/builds/ 本地:servlet\三个压缩包
2.JDK1.5
 
搭建过程:
1.安装JDK1.5,设置path,x:\jdk1.5\bin
2. 设置CLASSPATH
3.解压缩TomCat
4.设置JAVA_HOME:x:\jdk1.5
5.设置CATALINA_HOME:x:\tomcat
6.测试:运行tomcat\bin\startup.bat,在浏览器中输入:http://localhost:8080/
 
TomCat目录结构:
/bin:Tomcat的命令脚本文件
/conf:存放TomCat服务器的各种配置文件,重要的配置文件是server.xml
/server:包含三个子目录:classes,lib,webapps
/server/lib:存放TomCat服务器需要的各种jar文件
/server/webapps:存放服务器自带的两个web应用程序:admin和manager
/common/lib:存放服务器和所有web应用都可以访问的jar文件
/shared/lib:存放所有web应用都可以访问的jar文件
/logs:TomCat的日志文件
/webapps:将web应用放到这里
/work:TomCat把jsp生成的servlet放到这个目录下
 
第一个web应用:
Web应用目标:
在浏览器上显示hello word!
1.TomCat服务器功能
2.Web应用程序目录结构
3.使用servlet api 创建一个web应用
4.写web.xml将url和类绑定,以便让用户输入url就能找到类
5.部署servlet类文件
 
TomCat服务器功能:
1.主界面说明:
Status:服务器状态
TomCat Administration:服务器管理员(控制平台)
TomCat Manager:应用程序管理员(管理平台)
Documentation:文档(servlet,jsp的api文档等)
Examples:例子
 
2.添加用户:
修改H:\tomcat\conf\tomcat-users.xml文件
 
3.应用程序管理界面(TomCat Manager):
列出了所有的web应用的状态,可以对web应用进行状态的设置,如:启动,关闭,删除等等
List Applications:web server的容器
HTML Manager help:帮助文档
Manager help:帮助
Server status:服务器状态
Path:web应用程序的URL
Display Name:应用程序的名字
Running:应用程序的运行情况
Session:会话,有几个连接着应用程序
Commands:命令:Reload(刷新web组件,重启)Undeploy:卸载
两种发布web应用的方式:
第一:发布webapps目录下的web应用
第二:发布位于任何位置的WAR文件
例如:web应用:hello.war 1。将它放在webapps里,选择第一种方式 2。放在任意位置,使用第二种方法
测试:http://localhost:8080/hello/index.htm
 
4.修改端口号:
Conf/Server.xml 70多行处修改端口号,修改后重启TomCat
 
Web应用程序目录结构:
Web应用具有特定的目录结构
例如:创建helloapp的web应用
/webapps目录:建立helloapp目录
/helloapp目录:web的根目录,所有的jsp,html文件都放到这里(也可以再建立目录)
/helloapp/pages目录:html文件
/helloapp/js目录:JavaScript
/helloapp/pice目录:gif
/helloapp/WEB-INF目录:存放web应用的发布描述文件web.xml
/helloapp/WEB-INF/classes目录:存放各种类文件,包括servlet类文件
/helloapp/WEB-INF/lib目录:存放该web应用所需要的jar文件,例如:JDBCjar包
Web程序运行的时候,TomCat的类加载器先装载classes中的类文件,然后装载lib下的文件
/helloapp/WEB-INF/src目录:存放.java文件
 
使用servlet api 创建一个web应用:
CLASSPATH:tomcat\common\lib\servlet-api.jar(因为jdk没有servlet的包)
/**
 * 程序目标:
 * 这个web应用的目的是让servlet响应一个信息,helloword!给容器
 * 容器响应给浏览器,最终将helloword!显示在浏览器上
 * 程序过程:
 * 用户在浏览器上输入web应用的url(请求),web应用的服务器
 * 也就是tomcat,他将这个请求告诉给servlet,servlet进行业务计算
 * servlet打了个hello word!返回给容器,容器再将这个信息返回给
 * 用户
 * 问题:
 * 1。servlet类的写法?
 * 2。web.xml的写法?为什么要写web.xml?
 * servlet类的写法:
 * 1。倒入javax.servlet包
 * 2。实现Servlet接口
 * 3。必须至少有一个service方法,这个方法负责和容器交流
 * 4。写上必要的方法:如:初始化的
 * 为什么要写web.xml:
 * web应用程序有url和servlet类的名字,那么如何通过url找到相应
 * 的类呢?那就需要将它们映射起来,web.xml就是起这个作用
 */
import javax.servlet.*;
import java.io.*;
public class Hello implements Servlet{
     public void service(ServletRequest request,ServletResponse response)
     throws ServletException,java.io.IOException{
         PrintWriter pw=response.getWriter();
         pw.print("<h1>hello word!</h1>");
     }
     public void init(ServletConfig config)throws ServletException{}
     public void destroy(){}
     public java.lang.String getServletInfo(){return "";}
     public ServletConfig getServletConfig(){return null;}
}
 
写web.xml将url和类绑定,以便让用户输入url就能找到类:
1.应用程序的名字:<display-name>Hello app</display-name>
2.Servlet类名字:
<servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>Hello</servlet-class>
</servlet>
3.Servlet类和一个url映射
<servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hi</url-pattern>
</servlet-mapping>
 
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">
 
 <display-name>Hello app</display-name>
 
 
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>Hello</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hi</url-pattern>
    </servlet-mapping>
 
</web-app>
 
部署servlet类文件:
1.设置classpath:导入servlet-api.jar包
2.编译servlet类,并将.class文件拷到/WEB-INF/classes目录中
 
最后,在浏览器中输入:http://127.0.0.1/helloapp/yuchen
语法格式为:127.0.0.1/web应用url/url
 
使用Servlet子类创建Servlet类
1.Http和HttpServlet类
2.使用HttpServlet类的Servlet类(两个例子)
3.带包名的类的部署方法
4.Servlet处理表单
5.浏览器不能正常显示html页面(看例3)
6.Html文件放到子文件夹下的部署方法(看例3)
 
Http和HttpServlet类:
1。什么是http?有什么用?
基于请求/响应的协议,web server和浏览器通过http在internet上发送和接收消息
2.http请求
由三个部分组成:请求的方法uri协议和版本,请求头,请求正文(包含查询字符串)
3.http响应
由三个部分组成:协议状态代码描述,响应头,响应正文(html页面)
4.HttpServlet的作用?
负责根据用户发送的请求来响应并返回结果给容器,servlet容器读取Http请求,然后将这些内容打包到HttpRequest对象中,这样减轻了HttpServlet的工作量,现在只要调用HttpServletRequest的一些方法就能处理请求信息了,所以,httpServlet的作用就是得到http请求并作出响应并返回结果给容器的
5.HttpServletRequest的常用方法
getCookies():得到http请求中的Cookies
getHeader(String name):得到参数指定的http请求中的Header数据
getRequestURI():得到http请求中的URI
getQueryString():得到http请求中的查询字符串
getMethod():得到http请求中所使用的方法
6.HttpServletResponse的常用方法
addCookie(Cookie cookie):向http响应里加入Cookie
setHeader(String name,String value):设置http响应的Header
addHeader(String name,String value):向http响应加入Header
 
使用HttpServlet类的Servlet类(两个例子):
使用httpServlet类的好处在于,它是个抽象类,可以只写必要的方法
要么重写service方法,要么写dopost()和doget()方法,因为,dopost和doget这两个方法会从父类中了解到用户使用的请求方法,根据用户的请求方法调用对应的dopost或者doget,所以,如果不但写了这两个方法还重写了service方法,重写的service方法就失去了判断用户请求方法的功能
 
例1
web应用
 
名字:httpServlet
 
目录结构:
 
根目录:
     \httpServlet
         \httpServlet\JS
         \httpServlet\pages
         \httpServlet\pice
         \httpServlet\WEB-INF : web.xml
                       \WEB-INF\classes : 类包名\TestHttpServlet1.class
                       \WEB-INF\lib
                       \WEB-INF\src : TestHttpServlet1.java
http://127.0.0.1/httpServlet/yc2
 
Java文件
/**
 * 知识点:
 * 使用HttpServlet的web应用
 * 程序目标:
 * 使用HttpServlet的方式响应一个hello world!
 * 优点:
 * 不用写那么多方法了
 */
package httpServlet;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.*;
public class TestHttpServlet1 extends HttpServlet{
     public void service(ServletRequest request,ServletResponse response)
     throws ServletException,java.io.IOException{
         PrintWriter pw=response.getWriter();
         pw.print("<h1>hello word!</h1>");
     }
}
 
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">
 
 <display-name>httpServlet</display-name>
 
 
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>httpServlet.TestHttpServlet1</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/yc2</url-pattern>
    </servlet-mapping>
 
 
 
</web-app>
 
例2
web应用
 
名字:dgetANDdpost
 
目录结构:
 
根目录:
     \dgetANDdpost
         \dgetANDdpost\JS
         \dgetANDdpost\pages
         \dgetANDdpost\pice
         \dgetANDdpost\WEB-INF : web.xml
                        \WEB-INF\classes : 类包名\TestMethod.class
                        \WEB-INF\lib
                        \WEB-INF\src : TestMethod.java
http://127.0.0.1/dgetANDdpost/yc3
 
java文件
/**
 * 知识点:
 * 使用HttpServlet的web应用:doGet and doPost方法
 * 父类中的service方法会从请求来的数据中辨别使用的是什么请求方法,根据
 * 请求方法,会调用相对应的HttpServlet中的方法(doget或者是dopost)
 * 1.什么是post?什么是get?
 * post用于请求中含有表单数据,不能使用url方式
 * get:url方式请求的属于get,也可以用在表单上
 * 程序目标:
 * 使用HttpServlet的方式响应一个hello world!
 */
package dgetANDdpost;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.*;
public class TestMethod extends HttpServlet{
     public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,java.io.IOException{
         PrintWriter pw=response.getWriter();//通过response得到输出流
         pw.print("<h1>hello word! get()</h1>");
     }
     public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,java.io.IOException{
         PrintWriter pw=response.getWriter();
         pw.print("<h1>hello word! post()</h1>");
     }
}
 
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">
 
 <display-name>dgetANDdpost</display-name>
 
 
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>dgetANDdpost.TestMethod</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/yc3</url-pattern>
    </servlet-mapping>
 
</web-app>
 
带包名的类的部署方法:
上面两个例子中的Servlet类都是带包名的,需要改两个地方
1.web.xml:类名需要加上包的名字
2.classes目录下的class文件要创建包文件夹,如果是使用javac –d 编译好后会自动创建和包名相同的文件夹
 
Servlet处理表单:
例2扩展
web应用
 
知识点:
1.在一个web应用中使用多个servlet类
2.在一个web应用中使用多个html页面
3.当htm文件的名字为index的时候,成为该web应用的主页
4.自动识别get和post方法
5.get结果在url中有参数,查询字符串 post结果在url中没有参数
 get请求既能使用url也可以使用表单 post请求只能在表单中使用
 
名字:dgetANDdpost
 
目录结构:
 
根目录:
     \dogetANDdopost
         \dgetANDdpost\JS
         \dgetANDdpost\pages
         \dgetANDdpost\pice : form1.htm,form2.htm
         \dgetANDdpost\WEB-INF : web.xml
                        \WEB-INF\classes : 类包名\TestMethod.class,TestMethod2.class
                        \WEB-INF\lib
                        \WEB-INF\src : TestMethod.java,TestMethod2.java
http://127.0.0.1/dogetANDdopost/yc3 form1.htm->TestMethod.java
http://127.0.0.1/dogetANDdopost/yc4 form2.htm->TestMethod2.java
 
 
web.xml的写法:
     增加<servlet>,<servlet-mapping>标签就行了
 
TestMethod2.java:代码和TestMethod大致一样:
不一样处:pw.print("<h1>i love you get()</h1>");
 
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">
 
 <display-name>dgetANDdpost</display-name>
 
 
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>dgetANDdpost.TestMethod</servlet-class>
    </servlet>
 
    <servlet>
        <servlet-name>hello2</servlet-name>
        <servlet-class>dgetANDdpost.TestMethod2</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/yc3</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>hello2</servlet-name>
        <url-pattern>/yc4</url-pattern>
    </servlet-mapping>
 
 
 
</web-app>
 
例3
web应用
 
知识点:
getParameterNames():从请求中得到所有的参数名字
getParameterValues():从请求中得到所有的参数值
getParameter(String name):从请求中得到指定参数名所对应的值
解决编码问题:userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
解决不能正常显示html内容问题:response.setContentType("text/html;charset=GB2312");
Html文件放到子文件夹下的部署方法:在html文件中,action="/根目录名/url"
"/"代表http://ip:port/
 
程序目标:
使用上面的方法,从表单中读取参数信息,并将这些信息返回给用户
 
名字:formData
 
目录结构:
 
根目录:
     \formData
     \formData\JS
     \formData\pages
     \formData\pice : form1.htm
     \formData\WEB-INF : web.xml
               \WEB-INF\classes : 类包名\TestForm.class
               \WEB-INF\lib
               \WEB-INF\src : TestForm.java
http://127.0.0.1/formData/yc5 form1.htm->TestForm.java
 
总结HttpServlet的步骤:
1.继承HttpServlet
2.覆盖部分方法(最好不要将service,请求方法(doGet,doPost)同时覆盖)
3.读取请求信息,查询字符串,表单等,并响应一个html数据
 getParameterNames():从请求中得到所有的参数名字
 getParameterValues():从请求中得到所有的参数值
 getParameter(String name):从请求中得到指定参数名所对应的值
4.得到输出流,并将结果发送给servlet容器
 response.getWriter() print println PrintWriter
 
html文件
<form method="post" action="/formData/yc5">
     userName:<input type="text" name="userName" />
     <br>
     password:<input type="password" name="password" />
     <br>
     <input type="submit" name="提交" />
</form>
 
Java文件
/**
 * 知识点:
 * getParameter(String name)
 * html基础知识
 * 编码解码
 * 在浏览器上正常显示结果
 * 程序目标:
 * 读取提交的数据,得到参数值,并且输出成html页面,html里显示标题,正文
 * 中显示参数的值
 */
package formData;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.io.*;
public class TestForm extends HttpServlet{
     public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,java.io.IOException{
         //得到指定的参数的参数值
         String userName=null;
         String title=null;
         String body=null;
         userName=request.getParameter("userName");
         if(userName!=null){//编码解码
              userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
         }else{
              userName="我的朋友";
         }
         title="form";
         body="欢迎你来到java世界";
         //在浏览器上正常显示结果
         response.setContentType("text/html;charset=GB2312");
         //输出到一个html页面
         PrintWriter pw=response.getWriter();//通过response得到输出流
         pw.print("<html><head><title>"+title+"</title></head>");
         pw.println("<body>您好"+userName+"<br>");
         pw.print(body+"这是get方式"+"</body></html>");
         pw.close();
     }
     public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,java.io.IOException{
         //得到指定的参数的参数值
         String userName=null;
         String title=null;
         String body=null;
         userName=request.getParameter("userName");
         if(userName!=null){//编码解码
              userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
         }else{
              userName="我的朋友";
         }
         title="form";
         body="欢迎你来到java世界";
         //在浏览器上正常显示结果
         response.setContentType("text/html;charset=GB2312");
         //输出到一个html页面
         PrintWriter pw=response.getWriter();//通过response得到输出流
         pw.print("<html><head><title>"+title+"</title></head>");
         pw.println("<body>您好"+userName+"<br>");
         pw.print(body+"这是post方式"+"</body></html>");
         pw.close();
     }
}
 
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">
 
 <display-name>formData</display-name>
 
 
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>formData.TestForm</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/yc5</url-pattern>
    </servlet-mapping>
 
 
</web-app>
 
使用eclipse创建web项目的太慢问题的解决方法:
1.设置:Team->validation 去掉一些选项
2.Web and xml->xml catalog 添加web app2.4这个文件
 
Servlet生命周期:
1.初始化阶段
2.响应客户请求阶段
3.终止阶段
 
 
初始化阶段:
用户-〉请求-〉到servlet容器-〉容器创建一些对象-〉servlet调用init()方法,只被调用一次
init()
init(ServletConfig config):如果覆盖这个方法,一定要调用一下父类的这个方法,让他做一些工作,然后使用Servlet.getServletConfig()得到config,这样才能拿过来接着用
 
web应用
 
知识点:
TInit.java:将一些信息写入到日志中,从web.xml中得到servlet的初始化参数信息并返回给浏览器
1.ServletConfig对象:
servlet容器创建ServletConfig对象,并且在Servlet初始化阶段当作参数传递给init(ServletConfig)
这个方法,如果要在Servlet子类中使用ServletConfig对象,分几种情况:
第一:子类的父类如果是HttpServlet并且覆盖了init(ServletConfig config)方法,super().getServletConfig()
第二:如果没有覆盖,getServletConfig()
第三:如果实现的是接口,在init(ServletConfig)中,直接使用,因为并没有覆盖init(ServletConfig)
第四:如果实现的是接口,在其他方法中使用getServletConfig()
2.getInitParameter()从web.xml中得到初始化参数的信息
3.log写入servlet对象日志
 
TestInit.java:实现Servlet接口,使用config对象,并读取web.xml中的信息
 
TestS.java:使用线程测试destroy()方法,由于service线程不安全的,所以在里面使用共享资源需要使用同步方法
 
名字:life
 
目录结构:
 
根目录:
     \life
     \life\JS
     \life\pages : lf.html
     \life\pice :
     \life\WEB-INF : web.xml
          \WEB-INF\classes : 类包名\TestS.class,Tinit.class,TestInit.class
          \WEB-INF\lib
          \WEB-INF\src : TestS.java,Tinit.java,TestInit.java
http://127.0.0.1/life/lf1 lf.html->Tinit.java
http://127.0.0.1/life/lf2          TestInit.java
http://127.0.0.1/life/lf3          TestS.java
 
lf.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Insert title here</title>
</head>
<body>
<form action="/life/lf1" method="get">
     <input type="name" name="user"></input>
     <br><input type="password" name="pwd"></input>
     <br><input type="submit">
</form>
</body>
</html>
 
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">
 
 <display-name>life</display-name>
 
 
    <servlet>
        <servlet-name>life1</servlet-name>
        <servlet-class>life.Tinit</servlet-class>
        <init-param>
              <param-name>message</param-name>
              <param-value>Hello World</param-value>
         </init-param>
    </servlet>
 
    <servlet>
        <servlet-name>life2</servlet-name>
        <servlet-class>life.TestInit</servlet-class>
    </servlet>
   
    <servlet>
        <servlet-name>life3</servlet-name>
        <servlet-class>life.TestS</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>life1</servlet-name>
        <url-pattern>/lf1</url-pattern>
    </servlet-mapping>
   
    <servlet-mapping>
        <servlet-name>life2</servlet-name>
        <url-pattern>/lf2</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>life3</servlet-name>
        <url-pattern>/lf3</url-pattern>
    </servlet-mapping>
 
 
 
</web-app>
 
Java文件
package life;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
public class TestInit implements Servlet{
 
     private ServletConfig config=null;
     public void destroy() {
         // TODO Auto-generated method stub
        
     }
 
     public ServletConfig getServletConfig() {
         // TODO Auto-generated method stub
         return null;
     }
 
     public String getServletInfo() {
         // TODO Auto-generated method stub
         return null;
     }
 
     public void init(ServletConfig arg0) throws ServletException {
         // TODO Auto-generated method stub
         config=arg0;
     }
 
     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
         // TODO Auto-generated method stub
         String info=config.getInitParameter("message");
         PrintWriter out=arg1.getWriter();
         out.print(info);
        
         config.getServletContext().log("bu neng zhi jie diao log le");
         out.close();
     }
 
}
 
package life;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
 
public class TestS extends HttpServlet{
 
     private int count;
     private boolean end=false;
    
     public synchronized boolean isEnd() {
         return end;
     }
     public synchronized void setEnd(boolean end) {
         this.end = end;
     }
     public synchronized int getCount() {
         return count;
     }
     public synchronized void in(){
         count++;
     }
     public synchronized void out(){
         count--;
     }
    
     @Override
     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
         // TODO Auto-generated method stub
         PrintWriter out=arg1.getWriter();
         arg1.setContentType("text/html");
         in();
         boolean f=true;
         while(f){
              try {
                   Thread.sleep(5000);
              } catch (InterruptedException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              }
              out.print("working......<br>");
              out.flush();
              if(this.isEnd()){
                   f=false;
              }
         }
         out.print("jieshu le");
         out.close();
         out();
     }
 
     @Override
     public void destroy() {
         // TODO Auto-generated method stub
         if(this.getCount()>0){
              this.setEnd(true);
         }
         while(getCount()>0){
              log(getCount()+" : "+(new Date()).toString());
              try {
                   Thread.sleep(1000);
              } catch (InterruptedException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              }
         }
     }
    
}
 
package life;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Tinit extends HttpServlet{
 
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         //从web.xml中得到config init信息
         PrintWriter out=response.getWriter();
         String info=getServletConfig().getInitParameter("message");
         String info2=getInitParameter("message");
         out.println(info);
         out.println(info2);
        
         //写信息到日志文件
         getServletConfig().getServletContext().log("labalagu");
         log("zhijieyong log");
         out.close();
     }
    
    
}
 
MVC:
web应用
 
程序目标:
内容管理系统(实现信息的增删改查)
1.用户输入名字和密码登陆:如果是root密码是123进入用户信息列表页面
2.点add,进入添加页面,输入名字,添加到列表
3.点修改,可以对名字进行修改
4.点删除,实现对用户记录的删除
5.可以对单个用户进行信息的查询
 
程序逻辑:
mvc架构:login.html:用户登录后,输入名字和密码,转向c,c通过得到url判断是登录,还是修改,删除等
c将信息保存转发给服务层m,进行数据库的连接实现增删改查,将结果转发给v层
 
模块划分:
1.login.html:登录页面,当点登录按钮,将数据提交到c层,c层判断url,如果是/login,那么连接到m层,m层实现jdbc中的查询功能,返回给c层结果集合,c层将结果集合发送给v层,v层将结果输出到浏览器
2.用户看到list后,点add这个按钮进入到add页面,这个按钮将发送一个指向一个servlet类的url,这个servlet类是v层,用来显示add页面;v层的这个类所显示的页面中的表单,将数据递给c层,c层判断url,如果是/add.do,连接到m层进行jdbc实现,添加成功后,显示list
3.修改:list中modify链接(tomodify.do?id=?)---c层,做两件事:从id找到name(c-m-c)然后保存这个对象,c(usre/modify)---v层:显示修改页面,v层(modify.do)---c层---m层---v层(list)
4.删除:list中delete链接(delete.do?id=?)---c层:得到id,---m层:删除
 
sql:
1.创建数据表:create table useres ( id number(4),name varchar2(30));
2.创建sequence create sequence user_sequence;
 
目录结构:
 
根目录:
     \userapp
     \userapp\JS
     \userapp\pages
     \userapp\pice : login.htm
     \userapp\WEB-INF : web.xml
              \WEB-INF\classes
              \WEB-INF\lib
              \WEB-INF\src :
                        \src\userapp.ums.web:(servlet类c层和v层)ControllerServlet.java UserListServlet.java
                       \src\userapp.ums.util:(数据库连接工厂等)JdbcUtil.java ConnectionFactory.java
                       \src\userapp.ums.service:(服务层m层:jdbc实现)UserService.java
                       \src\userapp.ums.entity:(实体)user.java
        
login.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>form</title>
     <script type="text/javascript">
         function test(form)
         {
              var username=form.user;
              if(username.value.length==0){
                   alert("please shu ru name");
                   form.user.value="root";
                   return false;
              }
              return true;
         }
 
     </script>
</head>
<body>
     <center><h3>user login</h3></center>
     <hr>
     <form action="/userapp/login.do" method="post">
     <table border="1" align="center" width="600">
         <tr>
              <td>user name:</td>
              <td>
                   <input type="text" name="user" />
              </td>
         </tr>
         <tr>
              <td>password:</td>
              <td>
                   <input type="password" name="pwd" />
              </td>
         </tr>
         <tr>
              <td colspan="2">
                   <input type="submit" value="login" onclick="return test(this.form)"/>
                   <input type="reset" value="reset" />
              </td>
         </tr>
     </table>
     </form>
    
     <center><a href="">register</a></center>
</body>
</html>
 
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">
   
 <display-name>servapp</display-name>
 
 
    <servlet>
       <servlet-name>ControllerServlet</servlet-name>
       <servlet-class>userapp.ums.web.ControllerServlet</servlet-class>
    </servlet>
    <servlet>
       <servlet-name>UserListServlet</servlet-name>
       <servlet-class>userapp.ums.web.UserListServlet</servlet-class>
    </servlet>
    <servlet>
       <servlet-name>UserAddServlet</servlet-name>
       <servlet-class>userapp.ums.web.UserAddServlet</servlet-class>
    </servlet>
    <servlet>
       <servlet-name>UserModifyServlet</servlet-name>
       <servlet-class>userapp.ums.web.UserModifyServlet</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>ControllerServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>   
    <servlet-mapping>
        <servlet-name>UserListServlet</servlet-name>
        <url-pattern>/user/list</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>UserAddServlet</servlet-name>
        <url-pattern>/user/add</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>UserModifyServlet</servlet-name>
        <url-pattern>/user/modify</url-pattern>
    </servlet-mapping>
   
</web-app>
 
entity包:
package userapp.ums.entity;
//用户实体
public class User {
     private int id;
     private String name;
     public int getId() {
         return id;
     }
     public void setId(int id) {
         this.id = id;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public void setName(String name,int id){
         this.name=name;
         this.id=id;
     }
}
 
service包:m层
 
/*
 * 程序目标:
 * 服务层(m)
 * login():判断用户名和密码
 * findAll():查找所有的信息
 * add():将用户要插入的信息保存到数据库
 * findById():查找并返回指定id的对象
 * update():修改信息
 * delete():删除
 * nextId():sequence
 */
package userapp.ums.service;
 
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
 
import userapp.ums.entity.User;
import userapp.ums.util.ConnectionFactory;
import userapp.ums.util.JdbcUtil;
 
/*
 * 服务层:
 * login():判断从login.html中传来的用户名和密码
 */
public class UserService {
     private List users=new ArrayList();
     public User login(String username,String pwd){
         if(username.equals("yuchen")&&pwd.equals("123")){
              User user=new User();
              user.setName("yuchen");
              return user;
         }
         return null;
     }
 
     public Collection findAll() {
         // TODO Auto-generated method stub
         //jdbc
         Collection users=new ArrayList();
         Connection con=null;
//       Statement st=null;
         PreparedStatement ps=null;
         ResultSet rs=null;
        
         try {
              con=ConnectionFactory.getConnection();
//            st=con.createStatement();
//            rs=st.executeQuery("select id,name from users");
              String sql="select id,name from useres";
              ps=con.prepareStatement(sql);
              rs=ps.executeQuery();
             
              while(rs.next()){
                   User user=new User();
                   user.setId(rs.getInt(1));
                   user.setName(rs.getString(2));
                   users.add(user);
              }
         } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            throw new RuntimeException(e.getMessage());
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }finally{
              JdbcUtil.close(rs,ps,con);
         }
         return users;
     }
    
     public void add(User user){
         Connection con=null;
         PreparedStatement ps=null;
         try {
              int id=user.getId();
              String name=user.getName();
              String sql="insert into useres values (?,?)";
              con=ConnectionFactory.getConnection();
              ps=con.prepareStatement(sql);
              ps.setInt(1, id);
              ps.setString(2, name);
              ps.executeUpdate();
         } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }finally{
              JdbcUtil.close(ps, con);
         }
     }
    
     public User findById(int id){
         User user=null;
         Connection con=null;
         PreparedStatement ps=null;
         ResultSet rs=null;
        
         try {
              String sql="select id,name from useres where id=?";
              con=ConnectionFactory.getConnection();
              ps=con.prepareStatement(sql);
              ps.setInt(1, id);
              rs=ps.executeQuery();
              if(rs.next()){
                   user=new User();
                   user.setId(rs.getInt(1));
                   user.setName(rs.getString(2));
              }
         } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }finally{
              JdbcUtil.close(ps, con);
         }
         return user;
     }
    
     public void update(User user){
         Connection con=null;
         PreparedStatement ps=null;
        
         try {
              String sql="update useres set name=? where id=? ";
              con=ConnectionFactory.getConnection();
              ps=con.prepareStatement(sql);
              ps.setString(1, user.getName());
              ps.setInt(2, user.getId());
              ps.executeUpdate();
         } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }finally{
              JdbcUtil.close(ps, con);
         }
     }
    
     public void delete(int id){
         Connection con=null;
         PreparedStatement ps=null;
        
         try {
              con=ConnectionFactory.getConnection();
              ps=con.prepareStatement("delete from useres where id=?");
              ps.setInt(1, id);
              ps.executeUpdate();
         } catch (ClassNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }finally{
              JdbcUtil.close(ps, con);
         }
     }
    
      public int nextId()
         {
             int nextId = -1;
 
             Connection con = null;
             Statement st = null;
             ResultSet rs = null;
 
             try
             {
                 con = ConnectionFactory.getConnection();
                 st = con.createStatement();
                 String sql = "select user_sequence.nextval from dual";
                 rs = st.executeQuery(sql);
                 rs.next();
                 nextId = rs.getInt(1);
             } catch (Exception e)
             {
                 throw new RuntimeException();
             } finally
             {
                 JdbcUtil.close(rs, st, con);
             }
 
             return nextId;
         }
}
 
util包:
package userapp.ums.util;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class ConnectionFactory {
        
     public static Connection getConnection() throws ClassNotFoundException, SQLException{
         Class.forName("oracle.jdbc.driver.OracleDriver");
         return DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name","scott","tiger");
     }
}
 
package userapp.ums.util;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JdbcUtil {
    
     public static void close(ResultSet rs,Statement st,Connection con){
         try {
              if(rs!=null){
                   rs.close();
              }
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }
         try {
              st.close();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }
         try {
              con.close();
         } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
         }
     }
    
     public static void close(Statement st,Connection con){
         close(null,st,con);
     }
}
 
web包:servlet,(c and v层)
 
package userapp.ums.web;
/**
 * c层,中央控制器:得到url,判断url,进行不同的操作
 */
import java.io.IOException;
import java.util.Collection;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import userapp.ums.entity.User;
import userapp.ums.service.UserService;
 
public class ControllerServlet extends HttpServlet{
 
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         /*
          * 创建服务层对象并处理并发问题
          */
         UserService service=null;
         synchronized(getServletContext()){
              //一个servlet容器创建一个ServletContext对象
              service=(UserService)getServletContext().getAttribute("service");
              if(service==null){
                   service=new UserService();
                   getServletContext().setAttribute("service", service);
              }
         }
             
         //得到path
         String path=null;
         path=request.getServletPath();
         path=path.substring(0, path.length()-3);
        
         if(path.equals("/login")){
              //得到参数用户名密码
              String userName=request.getParameter("user");
              String pwd=request.getParameter("pwd");
              //调用m层的一个方法检查用户输入的用户名和密码是不是正确
             
              try{
                   User user=service.login(userName,pwd);
                   if(user!=null){
                       //将用户名和密码保存到session中
                       HttpSession session=request.getSession(true);
                       session.setAttribute("user", user);
                       //转发给路径为/find.do的servlet
                       forward("/find.do",request,response);
                       //登录成功,进行用户信息显示
                   }else{
//                     如果输入的不对,那么进入login.html页面
                       forward("/login.do",request,response);
                   }
              }catch(Exception e){
                   e.printStackTrace();
                forward("/error.html", request, response);
              }
 
         }else if(path.equals("/find")){
              //访问m层,查询用户信息
              Collection users=service.findAll();
              request.setAttribute("users", users);
              forward("/user/list",request,response);
         }else if(path.equals("/add")){
              String name=request.getParameter("name");
              User user=new User();
             
              int id=service.nextId();
              user.setName(name);
              user.setId(id);
              service.add(user);
              forward("/find.do",request,response);
         }else if(path.equals("/tomodify")){
              //得到id
              int id=Integer.parseInt(request.getParameter("id"));
              User user=service.findById(id);
              request.setAttribute("user", user);
              forward("/user/modify",request,response);
         }else if(path.equals("/modify")){
              int id=Integer.parseInt(request.getParameter("id"));
              String name=request.getParameter("name");
              User user=new User();
              user.setId(id);
              user.setName(name);
              service.update(user);
              forward("/find.do",request,response);
         }else if(path.equals("/delete")){
              int id=Integer.parseInt(request.getParameter("id"));
              service.delete(id);
              forward("/find.do",request,response);
         }
     }
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         doGet(request,response);
     }
    
     private void forward(String path,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
         RequestDispatcher rd=getServletContext().getRequestDispatcher(path);
         rd.forward(request, response);
     }
}
 
/*
 * 程序目标:
 * 动态显示添加页面
 */
package userapp.ums.web;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import userapp.ums.entity.User;
 
public class UserAddServlet extends HttpServlet{
 
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         HttpSession session=request.getSession(false);
         User admin=(User) session.getAttribute("user");
        
         PrintWriter out=response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>user add</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h3 align=\"center\">User Add</h3>");
        out.println("<hr>");
        out.println("Welcome, " + admin.getName());
        out.println("<center>");
        out.println("<form action=\"" + request.getContextPath() + "/add.do\" method=\"post\">");
        out.println("name:<input type=\"text\" name=\"name\" size=\"15\">");
        out.println("<input type=\"submit\" value=\"add\">");
        out.println("<input type=\"button\" value=\"back\" onclick=\"history.back()\">");
        out.println("</form>");
        out.println("</center>");
        out.println("</body>");
        out.println("</html>");
     }
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         super.doPost(request, response);
     }
    
}
 
/*
 * 程序目标:
 * 将结果通过html等技术显示在浏览器上
 * 知识点:
 * 1.window.location='url路径' 点add按钮后,请求的url
 * 这里是:http://127.0.0.1:8090/userapp/user/add.do
 * 2.getContextPath():得到web应用的根路径
 * 3.动态创建链接路径
 */
package userapp.ums.web;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import userapp.ums.entity.User;
 
public class UserListServlet extends HttpServlet{
 
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         //v层动态输出用户列表,会话可以结束了
         HttpSession session=request.getSession(false);
         User admin=(User) session.getAttribute("user");
        
         PrintWriter out=response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>user list</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h3 align=\"center\">User List</h3>");
        out.println("<hr>");
        out.println("welcome,"+admin.getName());
        out.println("<table align=\"center\" border=\"1\" width=\"500\">");
        out.println("<tr>");
        out.println("<th width=\"30\">no</th>");
        out.println("<th>name</th>");
        out.println("<th width=\"5%\" >operation</th>");
        out.println("</tr>");
       
        Collection users=(Collection) request.getAttribute("users");
        Iterator it=users.iterator();
        int no = 1;
        while(it.hasNext()){
             User user=(User) it.next();
            out.println("<tr>");
            out.println("<td align=\"center\">" + (no++) + "</td>");
            out.println("<td>" + user.getName() + "</td>");
            out.println("<td nowrap>");
            out.println("<a href=\"" + request.getContextPath() + "/tomodify.do?id=" + user.getId() + "\">modify</a>");
            out.println("|<a href=\"" + request.getContextPath() + "/delete.do?id=" + user.getId() + "\" onclick=\"return confirm('are you sure to delete it?')\">delete</a></td>");
            out.println("</tr>");
        }
        out.println("</table>");
        out.println("<br>");
        //创建添加按钮,window.location='url路径'
        out.println("<center><input type=\"button\" value=\"add\" onclick=\"window.location='" + request.getContextPath() + "/user/add'\"></center>");
        out.println("</body>");
        out.println("</html>");
    }
   
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        doGet(request, response);
    }
}
 
package userapp.ums.web;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import userapp.ums.entity.User;
 
public class UserModifyServlet extends HttpServlet{
 
     @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         HttpSession session=request.getSession(false);
         User admin=(User) session.getAttribute("user");
         User user=(User) request.getAttribute("user");
        
          PrintWriter out = response.getWriter();
            
             out.println("<html>");
             out.println("<head>");
             out.println("<title>user modify</title>");
             out.println("</head>");
             out.println("<body>");
             out.println("<h3 align=\"center\">User Modify</h3>");
             out.println("<hr>");
             out.println("Welcome, " + admin.getName());
             out.println("<center>");
             out.println("<form action=\"" + request.getContextPath() + "/modify.do\" method=\"post\">");
             out.println("<input type=\"hidden\" name=\"id\" value=\"" + user.getId() + "\">");
             out.println("name:<input type=\"text\" name=\"name\" size=\"15\" value=\"" + user.getName() + "\">");
             out.println("<input type=\"submit\" value=\"save\">");
             out.println("<input type=\"button\" value=\"cancel\" onclick=\"history.back()\">");
             out.println("</form>");
             out.println("</center>");
             out.println("</body>");
             out.println("</html>");
     }
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         doGet(request, response);
     }
    
}


风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› servlet 基础教程(一) 登录 -> 注册

查看完整版本: [-- servlet 基础教程(一) --]
CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 18 ms,0 (Queries)  Gzip enabled
粤ICP备07511478号