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