zoukankan      html  css  js  c++  java
  • javawebsshservlettomcat

    javaweb -servlet

    1、servlet本质

    servlet本质上就是java类,servlet是只能运行在服务器端的java类,而且必须遵循特殊的规范,在运行中有自己的生命周期。

    servlet必须调用java servlet api,必须是对特定类或接口的继承或实现。并且,他必须重写特定的方法去处理客户端请求。

    2、servlet作用

    servlet主要功能是用来接受,处理客户端请求,并把处理结果返回到客户端显示。

    3、servlet生命周期

    servlet需要在特定的容器中才能运行,这里所说的容器即servlet运行时所需要的环境(如tomcat、resin、weblogic、websphere)

    servlet的生命周期指的是servlet从被web服务器加载到它被销毁的整个生命过程

    执行过程:

    客户端-request->服务器[init(),servlet(),destory()-response]->客户端

    生命周期:

    servlet容器创建一个servlet实例--容器调用该实例的init()方法--容器向servlet传递客户端请求,并且调用此实例的service()方法--容器在销毁本实例前调动他的destroy()方法

    在以上阶段中,servlet对外提供服务阶段是最重要的。service()方法是变成人员真正要关心的方法。因为他才是servlet真正开始响应客户端请求,并且处理业务逻辑的方法。service()接收到客户端请求后,再调用该servlet相应的方法去处理请求。

    -------------------------tomcat笔记

    http请求到容器,容器分析http网址,localhost:8080/servlet

    /servlet在web.xml中查找对应的servlet配置,找到对应的servlet.java;

    找到后,运行该servlet的 init,service,desrtoy.

    其中service有doGet doPost方法来处理请求。

    这里的servlet,泛指上面定义中的专门用来处理http请求的java类,包括有

    servletConfig,

    ServletException,

    HttpServlet,

    HttpServletRequest,

    HttpServletResponse,

    HttpSession,

    ServletContext等。

    doGet和doPost的区别

    get是通过http header来传输数据,有字数限制,而post是通过http body来传输数据,没有字数的限制。

    几个serverlet例子

    1.读写

    //设置服务器的响应内容类型,从文件中读取内容
    
    response.setContentType("text/html");
    response.setCharacterEncoding("gb2312");
    PrintWriter out = response.getWriter();
    String fileName = "content.txt";
    String realPath = new File(realPath);
    
    //取得文件绝对路径
    File file = new File(realPath);
    
    if(file.exists()){
    FileReader reader = new FileReader(file);
    BufferedReader bufferReader = new BufferedReader(reader);
    String line = null;
    
     
    
    //读取文件内容
    while((line = bufferReader.readLine())!=null){
    out.print("<font size = '4'>"+line+"</font><br>");
    
    }else
    {
    out.print("文件不存在");
    }
    }
    
     
    
    //设置服务器的响应内容类型,并创建一个文件
    response.setCharacterEncoding("gb2312");
    PrintWriter out = response.getWriter();
    String fileName = "new.txt";
    
    String realPath = request.getRealPath(fileName);
    File file = new File(realPath);
    FileWriter writer = new FileWriter(file);
    
    //在文件中写入内容
    BufferedWriter bufferWriter = new BufferedWriter(writer);
    bufferWriter.write("计算机网络");
    bufferWriter.newLine();
    bufferWriter.write("计算机组成原理");
    bufferWriter.flush();
    bufferWriter.close();
    writer.close();
    

    2.取出http的头部内容,并在页面打印

    response.setContentType("text/html");
    
    PrintWriter out = response.getHeader(name);
    
    //首先使用方法取出http头信息的名称,然后循环取出对应的头信息的值
    
    Enumeration e =request.getHeaderNames();
    
    while(e.hasMoreElements()){
    
    String name = (String)e.nextElement();
    
    String value = request.getHeader(name);
    
    out.println(name+"="+value+"<br>");
    
    } 
    

      

    javaweb ⑧struts2 基本概念+实现

    在struts2中有一个核心控制器FilterDispatcher,它负责处理用户的所有请求,如果遇到以.action结尾的请求url,就会交给Struts2框架来处理,Struts2的工作流程如下:

    客户端浏览器发送请求--核心控制器FilterDispatcher接收请求后,根据后面的扩展名,来决定是否调用action,以及调用哪个action--在调用action的execute方法之前,struts2会调用一系列的拦截器以提供一些通用的功能,如验证或文件上传等功能,这些拦截器的组合被称为拦截器链--在调用完拦截器链后,struts2就会调用action的execute方法,在execute方法中就会执行用户的相关操作--根据action的execute方法的返回值,会将处理结果信息返回到浏览器,这些结果可以是html页面,jsp页面、图像,也可以是其他的任何web资源

    开发一个struts2框架程序的步骤:

    配置web.xml文件--编写发出请求的页面--编写处理请求的action--配置关于action的映射文件--进行测试

    准备工作:

    myEclipse-创建web项目-导入struts2的包

    开发步骤例子:

    开发struts2的步骤:
    1.配置web.xml文件
    配置FilterDispatcher的xml

    <filter>
        //过滤器名称
        <filter-name>struts2</filter-name>
        <filter-class>
            //指定Struts2过滤器的类名
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    //配置Struts2过滤器要过滤的路径
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

       

    2.编写发出请求的页面

    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
        <head>
            <title>hello world</title>
        </head>
        <body>
            <h2>
                //使用property标签来获取Action中的属性
                <s:property value="message"/>
            </h2>
        </body>
    </html>
    

      


    3.编写处理请求的action
    实现业务逻辑message

    package struts2;
    import com.opensymphony.xwork2.ActionSupport;
    public class HelloWorld extends ActionSupport{
        public static final String MESSAGE="Hello World!I'm from struts2 ";
        public String execute()throws Exception{
            setMessage(MESSAGE);
            return SUCCESS;
            }
        private String message;
        public void setMessage(){
            this.message=message;
            }
        public String getMessage(){
            return message;
            }
    }
    

      

    4.配置关于action的映射文件

    <struts>
        <constant name="struts.devMode" value="false"/>
        <package name="struts2" extends="struts-default">
            <action name ="HelloWorld" class="struts2.HelloWorld">
                <result>/helloWorld.jsp</result>
            </action>
        </package>
    </struts>    
    

      

    5.进行测试

    其他概念:

    Struts2是基于J2EE平台的MVC框架,主要是采用servlet和JSP技术来实现的一个MVC框架。

    Struts2=jsp+servlet

    1、(jsp获取页面信息,传递给web容器,web容器分给对应的servlet)Struts2中,jsp获取数据,传递给FilterDispatcher来分派,找到对应的action来处理;

    2、执行方法前后,会调用拦截器提供一些通用功能(验证/文件上传等)

    3、调用完拦截器后,struts2 会调用action的execute方法,执行用户相关操作。(如果action中想对servletAPI做访问,就要用ActionContext类)

    4、根据返回值返回 result 给浏览器,<result>元素的值可以是jsp页面文件,也可以是一个Action的name值。通过这些配置告诉Struts2框架,在执行Action后,将相应一个JSP文件或者将执行另一个Action。

    5、在web的世界中,输入/输出是没有数据类型的概念的,任何数据都被当作字符串或字符串数组来传递。如果使用servlet+JSP,我们需要自己手动转换数据类型成为对象,然后处理之后再转换成字符串传递给用户。

    Struts2中有强大的类型转换功能,对常用的数据类型提供了内建的数据类型转换器。

    6、Struts2输入校验,action中有validate方法可以做校验的跳转。

    taglib指令

    编译指令是指在<%@ %>之间的部分,不向客户端输出任何内容,用来设置全局变量、声明类、方法和输出内容的类型指令。

    taglib指令是当jsp页面中引用了用户自定义标签时,用来声明这些用户自定义标签的。
    jsp引擎使用taglib指令以确定在jsp中遇到的用户自定义标签时应该怎样去做。

    e.g  使用jsp标准标签库jstl中的c标签

    uri:标识标签库描述符,唯一确定标签库的名字

    prefix:定义前缀字符串,通过其对描述符文件标签进行引用

    无论jsp页面中的自定义标签出现在什么位置,taglib指令都必须出现在页面的前端位置。

    (TLD文件用来对应  自定义标签--对应处理程序 )

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <body>
    
    <% session.setAttribute("Name","Smith");%>
    
    <c:if test="${sessionScope.Name=='Smith'}">
    
    ${sessionScope.Name}<br>
    
    </body>
    

      

    struts2标签

    <s:property value="attrName"/>

     用于获取ognlcontext对象中的属性值,亦称为数据标签。其中value的值为具体的属性名称。

    获取request/session/application/attr/parameters这五个范围时,需要明确指定范围,比如

    <body>
    <s:generator separator="-" val="'010-12345678-123-123'" id="phoneNum">
    </s:generator>
    分隔后子字符串:
    <s:iterator value ="#attr.phoneNum" id="number">
    <!-- property 访问value的值(值/集合/方法) -->
    <s:property value="number"/><br>
    </s:iterator>
    </body>
    

      

    javaweb ⑨数据库操作 Hibernate

    1.开发Hibernate程序的基本步骤

     创建Hibernate配置文件(对数据库中的数据进行配置)--创建会化工厂类(可以很方便的获得session对象)--创建实体类(一个实体类对应一张数据库表)--创建映射文件(指定哪个实体类和哪个数据库表对应)--操作数据库(可以进行数据库操作了)

    安装mysql,在myEclipse中创建连接

    连接完成后,可以开始开发了。

    整合S2SH开发项目步骤

    Hibernate+struts2

    1.数据库层开发,
    创建数据库s2sh,创建表book,字段bookID,bookNo,bookPrice,bookName
    根据table的条目开发pojo类 Book 
    持久层开发
    编辑hibernate的cfg.xml,配置好ide和mysql的连接,添加po类的映射
    <mapping resource="po/Book.hbm.xml" />。
    编辑pojo类到数据库的映射 hbm.xml(Hibernate mapping);

    <hibernate-mapping>
    <class name="po.Book" table="book">
    <id name="bookId"><generator class="identity"></generator></id>
    <property name="bookName"></property>
    <property name="bookNo"></property>
    <property name="bookPrice"></property>
    </class>	
    </hibernate-mapping>
    

      


    编辑注释@Entity,@Id,@Column,自定义AnnotationSessionFactory类来获得session对象
    编辑cfg.xml
    <mapping class="po.Book"/>
    编辑测试类,测试数据库设置和连接是否成功;
    2.数据访问层开发
    编辑DAO层,所有的操作数据的方法,保存数据、删除数据、修改数据、查询数据等;
    DAO接口、DAO实现类,DAO工厂类
    1.定义接口bookDAO,三个方法(添加书籍,根据bookNo查询书籍,查询所有书籍)
    2.添加实现类bookDAOImpl,实现方法,并通过调用hibernate中方法完成数据访问操作
    通过调用hibernate中的相应方法来完成数据访问操作。
    3.业务逻辑层开发
    业务逻辑层重点实现业务逻辑。通过调用数据访问层来实现的。
    业务逻辑组件接口、业务逻辑组件实现类,业务逻辑工厂类。
    编辑service 接口、实现、工厂类
    4.表现层
    1.添加书籍录入表单,接收书籍信息,bookInput.jsp
    2.添加书籍录入控制器,并调用业务逻辑层完成书籍录入,BookInputAction
    3.编辑struts.xml,配置action跳转页

    Struts2+spring
    1.添加框架支持
    添加Spring框架支持,导入jar包,配置web.xml(添加contextLoaderListener监 
    听器)
    2.装配数据访问层,使数据访问层由Spring的IoC容器来管理
    applicationContext.xml

    <bean id = "bookDAO" class="dao.BookDAOImpl"></bean>
    

      


    3.装配业务逻辑层
    在装配业务逻辑层之前,首先需要修改业务逻辑组件实现类,在该类添加一个数据访问层 
    接口的类型,并为属性添加get和set方法,这样在装配业务逻辑层时,就可以在业务逻辑层注入数据 
    访问层。
    1.serviceImpl中增加 BookDAO和对应的getter setter
    2.

    <bean id = "bookService" class="service.BookServiceImpl">
    <property name="bookDAO" ref="bookDAO"></property>
    </bean>
    

      

    通过前面这两个步骤,在业务逻辑层中就可以直接使用数据访问层中的方法了,在这里就 
    看不到工厂类的影子了。
    4.装配业务控制器
    用来直接跟用户交互,需要调用业务逻辑层的方法完成特定的业务逻辑。
    业务控制器同样需要在Spring中进行装配,并为其注入业务逻辑层示例对象。
    在装配控制器之前,首先需要修改业务控制器类,在该类中增加一个业务逻辑层接口类 
    型的属性,并为其添加get set方法。这样在装配业务控制器时,就可以为其注入业务逻辑层。
    1.BookInputAction中增加 BookService和对应的getter setter
    2.

    <bean id = "bookInputAction" class="action.BookInputAction">
    <property name="bookService" ref="bookService"></property>
    </bean>
    

      

    Hibernate+Spring整合

    整合前:在hibernate.cfg.xml中对数据源进行配置;整合后,在Spring配置文件 
    applicationContext.xml中进行配置,就可以使用Spring容器统一管理数据源了。
    1.使用Spring管理SessionFactory
    2.使用HibernateTemplate类
    在Spring中配置一个HibernateTemplate Bean,并注入SessionFactory实例对象
    3.使用HibernateDaoSupport类
    简化DAO开发的类,提供了一个setSessionFactory方法来接收一个SessionFactory 
    对象,从而完成SessionFactory的注入。
    还提供了一个setHibernateTemplate方法来接收一个HibernateTemplate对象,从 
    而完成HibernateTemplate的注入。
    同样HibernateDaoSupport类也提供了getSessionFactory和getHibernateTemplate 
    方法来获得SessionFactory对象和HibernateTemplate对象

    1.在applicationContext中配置各个bean
    2.重新编辑DAO的内容, extends HibernateDaoSupport后重新编辑方法

    4.使用Spring管理事务管理器
    编辑applicationContext中配置bean transactionManager
    5.为业务逻辑层注入事务管理器
    在BookServiceImpl中增加transactionManager,并设置set、get
    6.使用transactionTemplate进行事务管理
    注入transactionManager之后,可以通过它来实例化一个TransactionTemplate。
    通过调用TransactionTemplate的execute方法就可以进行事务操作
    1.在BookServiceImpl中修改代码

      

    javaWeb SSH开发步骤

    1.UserDAOImpl.java 数据访问层实现类,在其中定义了增删改查功能
    2.AspectJAnnotation.java 面向切面编程类,在其中定义了进行数据库操作前执行的代码
    3.applicationContext.xml Spring的配置文件,在其中将数据访问层类和面向切面编程类进行配置
    4.UserClient.java 用户功能测试程序,通过该程序来进行面向切面功能的测试

    1.struts2 开发步骤:
    1.配置web.xml
    设置filter过滤器名称和路径
    2.编写jsp页面
    3.编写处理action
    4.配置action的配置文件 struts.xml
    <action name="HelloWorld" class="struts2.HelloWorld">
    <result>/helloWorld.jsp</result>
    </action>


    1.数据库层开发,
    创建数据库s2sh,创建表book,字段bookID,bookNo,bookPrice,bookName
    根据table的条目开发pojo类 Book 
    持久层开发
    编辑hibernate的cfg.xml,配置好ide和mysql的连接,添加po类的映射
    <mapping resource="po/Book.hbm.xml" />。
    编辑pojo类到数据库的映射 hbm.xml(Hibernate mapping);

    编辑测试类,测试数据库设置和连接是否成功;
    2.数据访问层开发
    编辑DAO层,所有的操作数据的方法,保存数据、删除数据、修改数据、查询数据等;
    DAO接口、DAO实现类,DAO工厂类
    1.定义接口bookDAO,三个方法(添加书籍,根据bookNo查询书籍,查询所有书籍)
    2.添加实现类bookDAOImpl,实现方法,并通过调用hibernate中方法完成数据访问操作
    通过调用hibernate中的相应方法来完成数据访问操作。
    3.业务逻辑层开发
    业务逻辑层重点实现业务逻辑。通过调用数据访问层来实现的。
    业务逻辑组件接口、业务逻辑组件实现类,业务逻辑工厂类。
    编辑service 接口、实现、工厂类
    4.表现层

    1.添加书籍录入表单,接收书籍信息,bookInput.jsp
    2.添加书籍录入控制器,并调用业务逻辑层完成书籍录入,BookInputAction
    3.编辑struts.xml,配置action跳转页


    Struts2+spring
    1.添加框架支持
    添加Spring框架支持,导入jar包,配置web.xml(添加contextLoaderListener监听器)
    2.装配数据访问层,使数据访问层由Spring的IoC容器来管理
    applicationContext.xml
    <bean id = "bookDAO" class="dao.BookDAOImpl"></bean>
    3.装配业务逻辑层
    在装配业务逻辑层之前,首先需要修改业务逻辑组件实现类,在该类添加一个数据访问层接口的类型,并为属性添加get和set方法,这样在装配业务逻辑层时,就可以在业务逻辑层注入数据访问层。
    1.serviceImpl中增加 BookDAO和对应的getter setter
    2.
    <bean id = "bookService" class="service.BookServiceImpl">
    <property name="bookDAO" ref="bookDAO"></property>
    </bean>

    通过前面这两个步骤,在业务逻辑层中就可以直接使用数据访问层中的方法了,在这里就看不到工厂类的影子了。
    4.装配业务控制器
    用来直接跟用户交互,需要调用业务逻辑层的方法完成特定的业务逻辑。
    业务控制器同样需要在Spring中进行装配,并为其注入业务逻辑层示例对象。
    在装配控制器之前,首先需要修改业务控制器类,在该类中增加一个业务逻辑层接口类型的属性,并为其添加get set方法。这样在装配业务控制器时,就可以为其注入业务逻辑层。
    1.BookInputAction中增加 BookService和对应的getter setter
    2.
    <bean id = "bookInputAction" class="action.BookInputAction">
    <property name="bookService" ref="bookService"></property>
    </bean>

    Hibernate+Spring整合

    整合前:在hibernate.cfg.xml中对数据源进行配置;整合后,在Spring配置文件applicationContext.xml中进行配置,就可以使用Spring容器统一管理数据源了。
    1.使用Spring管理SessionFactory
    2.使用HibernateTemplate类
    在Spring中配置一个HibernateTemplate Bean,并注入SessionFactory实例对象
    3.使用HibernateDaoSupport类
    简化DAO开发的类,提供了一个setSessionFactory方法来接收一个SessionFactory对象,从而完成SessionFactory的注入。
    还提供了一个setHibernateTemplate方法来接收一个HibernateTemplate对象,从而完成HibernateTemplate的注入。
    同样HibernateDaoSupport类也提供了getSessionFactory和getHibernateTemplate方法来获得SessionFactory对象和HibernateTemplate对象

    1.在applicationContext中配置各个bean
    2.重新编辑DAO的内容, extends HibernateDaoSupport后重新编辑方法

    4.使用Spring管理事务管理器
    编辑applicationContext中配置bean transactionManager
    5.为业务逻辑层注入事务管理器
    在BookServiceImpl中增加transactionManager,并设置set、get
    6.使用transactionTemplate进行事务管理
    注入transactionManager之后,可以通过它来实例化一个TransactionTemplate。
    通过调用TransactionTemplate的execute方法就可以进行事务操作

  • 相关阅读:
    Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案
    Asp.net Mvc Framework 十(测试方法及Filter的示例)
    无注册表的COM调用
    Direct3D 9学习笔记(13)网格(Mesh)4
    Direct3D 9学习笔记(11)网格(Mesh)2
    ATL 核心COM继承类之IDispatchImpl及调用
    ATL 核心COM继承类之CComObjectRootEx及CComObjectLock
    Direct3D 9学习笔记(12)网格(Mesh)3
    ATL COM类之激活
    ATL 引用计数线程模型
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/6446520.html
Copyright © 2011-2022 走看看