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方法就可以进行事务操作

原文地址:https://www.cnblogs.com/zhizhiyin/p/6446520.html