ไม่รอช้าครับ ผมโหลดมาติดตั้งเรียบร้อย
เปิด IDE คู่ใจขึ้นมาลองเลยครับ ถ้าใช้ Eclipse Galileo แล้วเกิดปัญหาไม่สามารถเพิ่ม application server adapter ใหม่ที่เป็น GlassFish v.3 เข้าไปได้ ให้ แก้ตามนี้ ส่วน Netbean ไม่ต้องลีลาเยอะสามารถใช้งานได้เลย
ในเวอร์ชั่นนี้ค่อนข้างให้ความสำคัญกับเรื่องของ annotation ที่จะนำมาเป็นทางเลือกหนึ่งในการ configuration web application ได้ค่อนข้างลงตัวทีเดียว ซึ่งในบทความนี้ผมจะละ deployment description (web.xml) ออกไปแล้วหันมาใช้ annotation แทน
เริ่มกันที่ตัวแรก @WebServlet ใช้เพื่อลงทะเบียน Servlet เพื่อบอกกับ servlet container ว่า class นี้เป็น Servlet class เพื่อให้ servlet container จัดการกับ class ตาม servlet lifecycle ข้างในมี attribute ดังนี้
- name
- description
- value
- urlPatterns
- initParams
- loadOnStartup
- asyncSupported
- smalIcon
- largeIcon
ซึ่งความหมายทุกตัวค่อนข้างชัดเจนอยู่แล้ว ถ้าใครเคยเขียน Servlet v.2 มาก่อนมั่นใจว่าเข้าใจได้โดยไม่ต้องอธิบาย ยกเว้นจะมีแต่ asyncSupported ที่เพิ่งเพิ่มเข้ามาใน Servlet v.3 ในตัวอย่างใช้ urlPatterns เพื่อ mapping กับ url โดยมันเก็บค่าที่เป็น array จึงสามารถ mapping url ได้มากกว่า 1
ถ้าต้องการส่ง init parameter ให้กับ servlet หรือ filter ใช้ @WebInitParam ซึ่งมี attribute
@WebServlet(urlPatterns="/hello")
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
res.setContentType("text/html");
res.getOutputStream().print("context path: " + req.getContextPath() + "
");
res.getOutputStream().print("hello world!
");
}
}
- name
- value
- description
ตัวอย่างการใช้งาน
@WebListener ใช้เพื่อลงทะเบียน listener ตามประเภทของ listener ดังนี้
@WebServlet (name="SimpleServlet",
urlPatterns={"/simple"},
initParams={
@WebInitParam(name="name", value="Phamonyut"),
@WebInitParam(name="penname", value="tofu")})
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
PrintWriter out = res.getWriter();
out.println("name parameter: " + getInitParameter("name"));
out.println("penname parameter: " + getInitParameter("penname"));
}
}
- Context Listener (javax.servlet.ServletContextListener)
- Context Attribute Listener (javax.servlet.ServletContextAttributeListener)
- Servlet Request Listener (javax.servlet.ServletRequestListener)
- Servlet Request Attribute Listener (javax.servlet.ServletRequestAttributeListener)
- Http Session Listener (javax.servlet.http.HttpSessionListener)
- Http Session Attribute Listener (javax.servlet.http.HttpSessionAttributeListener)
ใน @WebListener มี attribute ดังนี้
- filterName
- description
- displayName
- initParams
- servletNames
- value
- urlPatterns
- dispatcherTypes
- asyncSupported
การใช้งาน WebListener (ถ้าไม่ implement listener interface มาจะเกิดข้อผิดพลาดได้)
@WebFilter ไว้ลงทะเบียน filter ซึ่งมี attribute ดังนี้
@WebListener
public class FooApplication implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
System.out.println("inti context");
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("destory context");
}
}
- filterName
- description
- displayName
- initParams
- servletNames
- value
- urlPatterns
- dispatcherTypes
- asyncSupported
@WebFilter(value="/hello",
initParams={
@WebInitParam(name="message", value="Servlet says:")
})
public class TestFilter implements Filter {
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
PrintWriter out = res.getWriter();
out.print(filterConfig.getInitParameter("message"));
System.out.println("call request -> filter");
chain.doFilter(req, res);
System.out.println("call filter <- response");
}
public void destroy() {}
}
@WebServlet(value="/hello")
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
System.out.println("call hello servlet");
PrintWriter out = res.getWriter();
out.println("Hello world!");
}
}
No comments:
Post a Comment