初识servlet

java->servlet->jsp


1、静态页面(html)
   动态页面:和用户交互,不同时间也不同
   常用技术:jsp/servlet asp(快淘汰了) php(l linux a apache m mysql p php)asp.net


2、b/s :browser/server                   http请求
   c/s :client/server (客户端由自己开发)  tcp/ip协议(socket)


3、web服务器
   tomcat服务器(小型或中型)(开源)、jboss(开源)、weblogic、webSphere
   如何模拟一个简单的服务器?【作业】


4、安装tomcat
   1、解压
   2、startup.bat
   3、配置环境变量:高级---环境变量---新建:JAVA_HOME
                                    路径:jdk所在的目录(如果后面没有其它路径,不要加;)
   4、测试:http//:localhost:8080
   
   【如何主打更改8080端口?conf---server.xml----port="8080"改一下就行】
   5、在访问的时候一定要保证是启动的。
   【*****如何在不配置电脑的环境变量下,启动?---startup.bat打开,在第25行写上set JAVA_HOME=路径】


5、tomcat的文件目录
   bin:关闭和启动
   conf:配置文件
   server.xml:与server相关的文件配置,比如启动时的端口
              配置context,即web应用
   web.xml:配置与一个web应用的配置,相当于一个站点
   tomcat-users.xml:配置用户密码和权限
   lib:放置支撑的jar包
   logs:存放日志,当启动出错的时候,可以查看日志
   webapps:存放我们的web应用,即站点,建立web目录,存放html.jsp,图片等,则web目录会被当做web应用管理的
              但这样只在(版本5.0后的才可以)
   work:工作目录,存放jspb被访问后生产的相应的servlet、class文件


6、web应用(注意其结构)
   一个管理文本站点的目录,也叫web应用工程
   
7、tomcat如何管理虚拟目录?
   在server.xml中<Host>节点加
   <Context path="/A" docbase="绝对路径"/>  ----重启生效
   A---是制定的web名称,用作访问时的名称


8、Context 几个属性的说明
  path
  docbase
  reloadable:若设为true,自动更新web应用,建议在开发时设为true,在产品发布时设为false


   设为uppackwar:设为true,自动解压


9、如何设置首页?
   图


10、servlet
    实现的三种方式:
                 1.实现servlet接口
                 2.继承GernericServlet
                 3.继承HttpServlet
    【注意,用javac 命令编译打包文件时要带参数  javac -d . 文件
 


11、servlet就是java程序(java类)
       该java类要遵循servlet开发规范
        servlet是运行在服务器端的
功能很强大,几乎可以完成网站的所有功能,是学习jsp的基础。


12、第一个servlet:
       (1)建立一个web文件夹,在该文件下建立WEB-INF文件夹
       (2)WEB-INF文件夹文件名不能改,在里面建一个web.xml文件(可以从root文件下拷贝过来)/一个class文件夹、、一个lib文件夹
       (3)在class文件夹下建立java文件,在dos窗口编译
                 建包的java文件在编译时用javadoc -d .  源文件
 提示找不到servlet等包??--------到tomcat-----lib文件夹中找到servlet.jar----配置相应路径的classpath环境变量
       (4)编译成功后部署-----在web.xml中部署
                如何部署?
------从exmples中的web.xml文件中拷贝相应部署过来就可以
                          <!--根据servlet规范部署servlet-->
   <servlet>
        <!--可以自己取名,默认servlet的名字  [注册]-->
      <servlet-name>MyFristServlet</servlet-name>
        <!--要指定放在哪个包下,形式是包/包/.../类【全路径】-->
      <servlet-class>com.hsp.MyFristServlet</servlet-class>
    </servlet>


    <!--servlet的映射【已经注册的名字可以多次映射】-->
    <servlet-mapping>
      <!--该名和上面的名字必须一样-->
      <servlet-name>MyFristServlet</servlet-name>
       <!--将来访问servlet的资源名部分【即对外访问的路径】-->
      <url-pattern>/ABC</url-pattern>
    </servlet-mapping>
   
         (5)启动tomact------在浏览其中输入http//localhost::8080/web文件夹/资源名(如上面配置的/ABC)


      (6)如何向浏览器中输出文字??
                service()函数中ServletResponse来完成:res.getWriter().println("Helloworld!");
servlet每次运行,service()都会运行。


  13、tomcat 7的用户名设置的问题
          不同于以往的Tomcat版本,Tomcat7.0将manager角色细化为manager-gui,manager-script,manager-jmx,manager-status,
 所以要使用Tomcat7.0,需要首先去conf\tomcat-users.xml添加角色与用户信息,具体如下:
         <role rolename="manager-gui"/>
        <role rolename="manager-script"/>
       <role rolename="manager-jmx"/>
      <role rolename="manager-status"/>
     <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>


        如何不要关闭和重启tomcat来完成更新,用reload即可
stop是表示停站,网站不服务。


 14、servlet的工作流程
        当servlet第一次调用时,init()会把servlet加载到内存,该函数只会调用一次;
然后去调用servlet的service函数,当再次访问该servlet时,就直接调用servlet的service函数;
        当web应用reload或关闭tomcat或关机时,都会调用destroy(),去销毁servlet函数


15、三种方式
       GenericServlet 开发,是Servlet的子类,是抽象类,它只含一个service()函数,也要部署;(了解即可)
       HttpServlet:继承了GenericServlet 也实现了Servlet接口,90%的网站java开发都是用该种形式开发的。
提供了post提交的方法和get提交的方法,默认是get。
实现两个方法: doget()
                            dopost()
get和post提交的区别:
get:响应速度快
post:安全,提交的长度无限制理论上不超过64K
              
16、使用myeclipse开发servlet的流程:
        可支持servlet,jsp,struts,hibernate,spring
(1)建立web工程
      (2)新建一个servlet: //大部分开发人员都是把两个函数合二为一
                                        this.doGet(request, response);
或this.doPost(request, response);
         (3)配置tomcat
       (4)发布
       (5)浏览器中查看


18、servlet细节
        (1)一个已经注册的servlet可以多次映射到不同url
(2)映射时可以含多个/
(3)映射的后缀名没有实际的含义。如2.html 并说明映射的是html文件
        (4)在对servlet进行映射时可以使用通配符---------可用于网站暂时关闭时的任意匹配
         *.扩展名  或 / 卡开头 /*结尾
                  如:*.do   *.ss
        /*       、/news/*
         在匹配时:谁的匹配度高,谁就被选中
                                       *.do的优先级最低
         (5)servlet是单列的
         即第一次访问就加载到内存,以后访问就是同一个实例
                -----会出现线程并发安全问题
利用同步机制
synchronized(对象){ 同步代码}包起来(对象一般为this)  【注意synchronized的首字母s必须小写】
                 如果一个变量不需要共享,则直接在doget()或dopost()中定义,而不要定义成成员变量


         //如何消除单例的并发不安全问题??(ticket是成员变量)
synchronized(this)
{
if(ticket>0)
{
System.out.println("还能买到票");
}
ticket--;
if(ticket<0)
{
System.out.println("没有票了");
}
}




          (6)load-on-startup
         在网站启动时可能要初始化一些数据,做一些临时表。。。
                     还有定时完成的任务,比如定时写日志,备份数据库,邮件定时发送
                     配合线程可以迅速解决
                    通过配置load-on-startup 可以使某个servlet自动创建
   <load-on-startup>1</load-on-startup>      ------其中的数字表示启动顺序
                   是在web.xml中配置的
   <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Servlet2</servlet-name>
    <servlet-class>com.xc.Servlet.Servlet2</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
            
   (7)response.setCharacterEncoding("utf-8");设置编码的形式
                      如何修改myeclispse的servlet模板


17、servletConfig:
        读取servlet的配置信息,包括数据库配置、编码类型等
     <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>


    在<servlet></servlet>中配置的是该servlet自身才能用到的,和<servlet></servlet>并列写的才可以都用


    如何获取?
    单个: this.getInitParameter(变量名称);
    所有:  
          Enumeration<String>  enumeration= this.getInitParameterNames();
while(true)
{
String name=enumeration.nextElement();
String value=this.getInitParameter(name);

}


18.附上浏览器---web----servlet之间的消息传递的示意图


你可能感兴趣的:(tomcat,servlet,web服务器,Web应用,clientserver)