您的位置:首页 > 编程语言 > Java开发

Java.Web学习笔记 Servlet

2016-08-05 12:26 381 查看
3.5.3@Resource注入

可以使用

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只有一个实例,所以变量是共用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet string web.xml J2EE