Java.Web学习笔记 Servlet
2016-08-05 12:26
381 查看
3.5.3@Resource注入
可以使用
或者:
然后在web.xml中配置一下文件比如上述的变量i的配置文件就是
然后运行就好了,不需要再写getXXX的代码获取xml定义的参数了,这样做的好处是更改默认参数的时候不需要重新编译文件,省了很多时间。
这个其实是使用了JNDI(Java Naming Directory Interface)用配置了资源,然后通过@Resource方式注入。
还有一种调用的方式:
3.5.5注射数据源
还可以注射Java Bean的复杂对象以及数据源
Servlet生命周期
Servlet只在服务器启动的时候开始生命周期,在服务器结束的时候结束生命周期,。无论请求多少次只会有一个Servlet实例,多个客户端请求时,服务器会启动多个线程执行service方法
带@PostConstruct或@PreDestroy注解的生命周期
@PostConstruct在构造函数之后init()之前运行
@PreDestroy在destroy()之后,彻底销毁之前运行
注解
如果是支持注解的web服务器,在启动的时候会遍历WEB-INF/classes下的所有class文件和WEB-INF/lib下的所有jar文件,会影响启动速度,如果应用程序没有注解可以这样写
http://java.sum.som…” version=”2.5” metadata-complete=”true”>
Servlet跳转
利用servlet跳转可以很容易把任务按模块分开,一个servlet接受用户提交的数据,然后跳到另一个Servlet读取数据库操作,最后跳到另一个Servlet把处理结果显示出来,Servlet跳转可以实现程序模块化。
MVC就使用了Servlet跳转。
Forward
Forward代码如下
getRequestDispatcher()方法必须以’/’开始,‘/’表示web根目录,如果要跳转的页面是http://localhost:8080/servlet/servlet/LifeCycleServlet,则参数应该是“/servlet/LifeCycleServlet”
Redirect
使用
Refresh
自动刷新不仅可以实现自动跳转到另一个页面,还可以实现一段时间之后自动刷新本页面。
其中1000为时间,单位毫秒,URL参数指定的网址就是1秒钟之后跳转的页面。当URL设置的路径为Servlet自己的路径时,就会每隔1秒钟自动刷新本页面一次;
Servlet与线程安全
多线程并发读写Servlet类属性会导致数据不同步,两个线程都去写name这个变量,如果这个name是公有变量,那么可能name会不同步。因为,Servlet只有一个实例,所以变量是共用的。
可以使用
private @Resource(name="asdf") String i;
或者:
@Resource(name="asdf") private String i;
然后在web.xml中配置一下文件比如上述的变量i的配置文件就是
<env-entry> <env-entry-name>asdf</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>30</env-entry-value> </env-entry>
然后运行就好了,不需要再写getXXX的代码获取xml定义的参数了,这样做的好处是更改默认参数的时候不需要重新编译文件,省了很多时间。
这个其实是使用了JNDI(Java Naming Directory Interface)用配置了资源,然后通过@Resource方式注入。
还有一种调用的方式:
Context tx=new InitialContext(); String message=(String)tx.lookup(“message”);
3.5.5注射数据源
还可以注射Java Bean的复杂对象以及数据源
@Resource(name="database") javax.sql.DataSource datasource; public void getConnection(){ Connection conn=dataSource.getConnection(); return conn; }
Servlet生命周期
Servlet只在服务器启动的时候开始生命周期,在服务器结束的时候结束生命周期,。无论请求多少次只会有一个Servlet实例,多个客户端请求时,服务器会启动多个线程执行service方法
1. init() 2. service() 3. doGet() //每次都先执行service()方法然后再执行doXXX()方法 4. service() 5. doPost() 6. destroy()
带@PostConstruct或@PreDestroy注解的生命周期
@PostConstruct在构造函数之后init()之前运行
@PreDestroy在destroy()之后,彻底销毁之前运行
注解
如果是支持注解的web服务器,在启动的时候会遍历WEB-INF/classes下的所有class文件和WEB-INF/lib下的所有jar文件,会影响启动速度,如果应用程序没有注解可以这样写
http://java.sum.som…” version=”2.5” metadata-complete=”true”>
Servlet跳转
利用servlet跳转可以很容易把任务按模块分开,一个servlet接受用户提交的数据,然后跳到另一个Servlet读取数据库操作,最后跳到另一个Servlet把处理结果显示出来,Servlet跳转可以实现程序模块化。
MVC就使用了Servlet跳转。
Forward
Forward代码如下
RequestDispatcher dispatcher = request.getRequestDispatcher(“/servlet/LifeCycleServlet”); Dispatcher.forward(request,response);
getRequestDispatcher()方法必须以’/’开始,‘/’表示web根目录,如果要跳转的页面是http://localhost:8080/servlet/servlet/LifeCycleServlet,则参数应该是“/servlet/LifeCycleServlet”
Redirect
使用
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); response.setHeader(“Location”, “http://www.helloweenvsfei.com”); 或者 sendRedirect(String location);
Refresh
自动刷新不仅可以实现自动跳转到另一个页面,还可以实现一段时间之后自动刷新本页面。
response.setHeader(“Refresh”, “1000; URL=http://localhost:8080/servlet/example.htm”);
其中1000为时间,单位毫秒,URL参数指定的网址就是1秒钟之后跳转的页面。当URL设置的路径为Servlet自己的路径时,就会每隔1秒钟自动刷新本页面一次;
Servlet与线程安全
多线程并发读写Servlet类属性会导致数据不同步,两个线程都去写name这个变量,如果这个name是公有变量,那么可能name会不同步。因为,Servlet只有一个实例,所以变量是共用的。
相关文章推荐
- Java for Web学习笔记(十):Servlet(8)下发文件
- JavaWeb 学习笔记(二)Servlet生命周期
- Java for Web学习笔记(六二):Controller替代Servlet(4)方法返回值
- Java for Web学习笔记(六一):Controller替代Servlet(3)body映射到参数
- Java Web学习笔记——Servlet
- Servlet学习笔记(一)javaWeb应用基本
- Java Web 学习笔记3——Model 2. Servlet的引入
- JavaWEB.Servlet(学习笔记)
- Java for Web学习笔记(五九):Controller替代Servlet(1)请求匹配
- Java for Web学习笔记(八):Servlet(6)doGet()和doPost()是线程还是队列
- 【JAVA WEB】学习笔记——Servlet入门
- JavaWeb 学习笔记(三)GenericServlet和HttpServlet介绍
- java_web学习笔记之Servlet
- java for Web学习笔记之Servlet的使用及注意事项
- Java for Web学习笔记(六三):Controller替代Servlet(5)Model和View
- Java for Web学习笔记(六十):Controller替代Servlet(2)方法中的参数
- Java Web 学习笔记(二)servlet
- Java for Web学习笔记(九):Servlet(7)上传文件
- 学习笔记--javaWeb-servlet学习1
- Java for Web学习笔记(六四):Controller替代Servlet(6)Spring Form Tag