servlet(一)

Servlet

基本概念:

1.     什么是Web?Web有什么用?

2.     什么是Web服务器?Web Server?

3.     Web Server的作用?

4.     发展历史?

5.     什么是CGI?

6.     Servlet的出现

7.     Servlet的作用?

8.     Web ServerServlet的交互

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通过ipcCGI提交服务,这样是比较困难的

JAVAEE规范:Servlet替代CGI

两者的区别:1.Servletjava写的,CGIc/c++写的 2.Servlet是多线程的,CGI是多进程的,多线程比多进程好实现 3.Servlet是常驻内存的,效率高

 

Servlet的作用?

工作在web server之上,完成业务计算,以请求响应的方式完成特定的工作

 

Web ServerServlet的交互:

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.搭建过程

3TomCat目录结构

 

需要的资源:

1TomCat5.5:下载地址:http://jakarta.apache.org/builds/ 本地:servlet/三个压缩包

2JDK1.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目录结构:

/binTomcat的命令脚本文件

/conf:存放TomCat服务器的各种配置文件,重要的配置文件是server.xml

/server:包含三个子目录:classes,lib,webapps

/server/lib:存放TomCat服务器需要的各种jar文件

/server/webapps:存放服务器自带的两个web应用程序:adminmanager

/common/lib:存放服务器和所有web应用都可以访问的jar文件

/shared/lib:存放所有web应用都可以访问的jar文件

/logsTomCat的日志文件

/webapps:将web应用放到这里

/workTomCatjsp生成的servlet放到这个目录下

 

第一个web应用:

Web应用目标:

在浏览器上显示hello word!

1TomCat服务器功能

2Web应用程序目录结构

3.使用servlet api 创建一个web应用

4.写web.xmlurl和类绑定,以便让用户输入url就能找到类

5.部署servlet类文件

 

TomCat服务器功能:

1.主界面说明:

Status:服务器状态

TomCat Administration:服务器管理员(控制平台)

TomCat Manager:应用程序管理员(管理平台)

Documentation:文档(servletjspapi文档等)

Examples:例子

 

2.添加用户:

修改H:/tomcat/conf/tomcat-users.xml文件

 

3.应用程序管理界面(TomCat Manager):

列出了所有的web应用的状态,可以对web应用进行状态的设置,如:启动,关闭,删除等等

List Applicationsweb server的容器

HTML Manager help:帮助文档

Manager help:帮助

Server status:服务器状态

Pathweb应用程序的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应用具有特定的目录结构

例如:创建helloappweb应用

/webapps目录:建立helloapp目录

/helloapp目录:web的根目录,所有的jsphtml文件都放到这里(也可以再建立目录)

/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!返回给容器,容器再将这个信息返回给

 * 用户

 * 问题:

 * 1servlet类的写法?

 * 2web.xml的写法?为什么要写web.xml?

 * servlet类的写法:

 * 1。倒入javax.servlet

 * 2。实现Servlet接口

 * 3。必须至少有一个service方法,这个方法负责和容器交流

 * 4。写上必要的方法:如:初始化的

 * 为什么要写web.xml

 * web应用程序有urlservlet类的名字,那么如何通过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.xmlurl和类绑定,以便让用户输入url就能找到类:

1.应用程序的名字:<display-name>Hello app</display-name>

2Servlet类名字:

<servlet>

        <servlet-name>hello</servlet-name>

        <servlet-class>Hello</servlet-class>

</servlet>

3Servlet类和一个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

1HttpHttpServlet

2.使用HttpServlet类的Servlet类(两个例子)

3.带包名的类的部署方法

4Servlet处理表单

5.浏览器不能正常显示html页面 (看例3

6Html文件放到子文件夹下的部署方法 (看例3

 

HttpHttpServlet类:

1。什么是http?有什么用?

基于请求/响应的协议,web server和浏览器通过httpinternet上发送和接收消息

2http请求

由三个部分组成:请求的方法uri协议和版本,请求头,请求正文(包含查询字符串)

3http响应

由三个部分组成:协议状态代码描述,响应头,响应正文(html页面)

4HttpServlet的作用?

负责根据用户发送的请求来响应并返回结果给容器,servlet容器读取Http请求,然后将这些内容打包到HttpRequest对象中,这样减轻了HttpServlet的工作量,现在只要调用HttpServletRequest的一些方法就能处理请求信息了,所以,httpServlet的作用就是得到http请求并作出响应并返回结果给容器的

5HttpServletRequest的常用方法

getCookies():得到http请求中的Cookies

getHeaderString name):得到参数指定的http请求中的Header数据

getRequestURI():得到http请求中的URI

getQueryString():得到http请求中的查询字符串

getMethod():得到http请求中所使用的方法

6HttpServletResponse的常用方法

addCookieCookie cookie):向http响应里加入Cookie

setHeaderString nameString value):设置http响应的Header

addHeaderString nameString value):向http响应加入Header

 

使用HttpServlet类的Servlet类(两个例子):

使用httpServlet类的好处在于,它是个抽象类,可以只写必要的方法

要么重写service方法,要么写dopost()doget()方法,因为,dopostdoget这两个方法会从父类中了解到用户使用的请求方法,根据用户的请求方法调用对应的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文件

/**

 * 知识点:

 * 使用HttpServletweb应用

 * 程序目标:

 * 使用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文件

/**

 * 知识点:

 * 使用HttpServletweb应用:doGet and doPost方法

 * 父类中的service方法会从请求来的数据中辨别使用的是什么请求方法,根据

 * 请求方法,会调用相对应的HttpServlet中的方法(doget或者是dopost

 * 1.什么是post?什么是get?

 * post用于请求中含有表单数据,不能使用url方式

 * geturl方式请求的属于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类都是带包名的,需要改两个地方

1web.xml:类名需要加上包的名字

2classes目录下的class文件要创建包文件夹,如果是使用javac –d 编译好后会自动创建和包名相同的文件夹

 

Servlet处理表单:

2扩展

web应用

 

知识点:

1.在一个web应用中使用多个servlet

2.在一个web应用中使用多个html页面

3.htm文件的名字为index的时候,成为该web应用的主页

4.自动识别getpost方法

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 去掉一些选项

2Web 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.修改:listmodify链接(tomodify.do?id=?)---c层,做两件事:从id找到name(c-m-c)然后保存这个对象,c(usre/modify)---v层:显示修改页面,v层(modify.do---c---m---v(list)

4.删除:listdelete链接(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:(servletc层和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" οnclick="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.doservlet

                       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/" οnclick=/"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() + "/" οnclick=/"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/" οnclick=/"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/" οnclick=/"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);

     }

    

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值