| 201 | == 3.0 == |
| 202 | |
| 203 | * 專案目錄將呈現以下結構 |
| 204 | || /opt/tomcat/webapps/servlet3 || || || || || |
| 205 | || - || hello.jsp|| || || || |
| 206 | || + || WEB-INF/ || || || || |
| 207 | || || - || web.xml || || || |
| 208 | || || + || classes || || || |
| 209 | || || || - || HelloServlet.java || || |
| 210 | || || || - || Hello.java || || |
| 211 | |
| 212 | |
| 213 | == 3.1 建立control:HelloServlet.java == |
| 214 | |
| 215 | {{{ |
| 216 | cd /opt/tomcat/webapps/ |
| 217 | mkdir -p /opt/tomcat/webapps/servlet3/WEB-INF/classes |
| 218 | cd /opt/tomcat/webapps/servlet3/WEB-INF/classes |
| 219 | gedit HelloServlet.java |
| 220 | }}} |
| 221 | |
| 222 | {{{ |
| 223 | #!java |
| 224 | import java.io.IOException; |
| 225 | import javax.servlet.ServletException; |
| 226 | import javax.servlet.http.HttpServlet; |
| 227 | import javax.servlet.http.HttpServletRequest; |
| 228 | import javax.servlet.http.HttpServletResponse; |
| 229 | public class HelloServlet extends HttpServlet { |
| 230 | private Hello hello; |
| 231 | public HelloServlet() { |
| 232 | hello = new Hello(); |
| 233 | } |
| 234 | protected void doGet(HttpServletRequest request, |
| 235 | HttpServletResponse response) |
| 236 | throws ServletException, IOException { |
| 237 | String name = request.getParameter("user"); |
| 238 | String message = hello.doHello(name); |
| 239 | request.setAttribute("message", message); |
| 240 | request.getRequestDispatcher("hello.jsp").forward(request, response); |
| 241 | } |
| 242 | } |
| 243 | }}} |
| 244 | |
| 245 | == 3.2 建立model:Hello.java == |
| 246 | {{{ |
| 247 | gedit /opt/tomcat/webapps/servlet3/WEB-INF/classes/Hello.java |
| 248 | }}} |
| 249 | |
| 250 | {{{ |
| 251 | #!java |
| 252 | import java.util.*; |
| 253 | public class Hello { |
| 254 | private Map<String, String> messages; |
| 255 | public Hello() { |
| 256 | messages = new HashMap<String, String>(); |
| 257 | messages.put("caterpillar", "Hello"); |
| 258 | messages.put("Justin", "Welcome"); |
| 259 | messages.put("momor", "Hi"); |
| 260 | } |
| 261 | public String doHello(String user) { |
| 262 | String message = messages.get(user); |
| 263 | return message + ", " + user + "!"; |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | }}} |
| 268 | |
| 269 | |
| 270 | == 3.3 建立view:hello.jsp == |
| 271 | {{{ |
| 272 | gedit /opt/tomcat/webapps/servlet3/hello.jsp |
| 273 | }}} |
| 274 | |
| 275 | {{{ |
| 276 | #!java |
| 277 | <%@page contentType="text/html" pageEncoding="UTF-8"%> |
| 278 | <html> |
| 279 | <head> |
| 280 | <meta http-equiv="Content-Type" |
| 281 | content="text/html; charset=UTF-8"> |
| 282 | <title>${param.user}</title> |
| 283 | </head> |
| 284 | <body> |
| 285 | <h1>${message}</h1> |
| 286 | </body> |
| 287 | </html> |
| 288 | }}} |
| 289 | 這個jsp檔為servlet所respone的呈現頁 |
| 290 | |
| 291 | == 3.4 佈署web容器:web.xml == |
| 292 | {{{ |
| 293 | gedit /opt/tomcat/webapps/servlet3/WEB-INF/web.xml |
| 294 | }}} |
| 295 | |
| 296 | {{{ |
| 297 | #!xml |
| 298 | <?xml version="1.0" encoding="UTF-8"?> |
| 299 | <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" |
| 300 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 301 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee |
| 302 | http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> |
| 303 | <servlet> |
| 304 | <servlet-name>HelloServlet</servlet-name> |
| 305 | <servlet-class>HelloServlet</servlet-class> |
| 306 | </servlet> |
| 307 | <servlet-mapping> |
| 308 | <servlet-name>HelloServlet</servlet-name> |
| 309 | <url-pattern>/hello.do</url-pattern> |
| 310 | </servlet-mapping> |
| 311 | </web-app> |
| 312 | }}} |
| 313 | 注意,HelloServlet 的 url-pattern 可任意命名,但千萬不可命名成 '''''hello.jsp''''' |
| 314 | |
| 315 | == 3.5 編譯control與model == |
| 316 | {{{ |
| 317 | cd /opt/tomcat/webapps/servlet3/WEB-INF/classes |
| 318 | javac -cp /opt/tomcat/lib/servlet-api.jar ./Hello.java |
| 319 | javac -cp /opt/tomcat/lib/servlet-api.jar:. ./HelloServlet.java |
| 320 | |
| 321 | }}} |
| 322 | 上面的步驟順序很重要,並且在編譯HelloServlet 時,classpath 必須引入本身目錄,否則會出現錯誤訊息:找不到Hello這個symbol |
| 323 | |
| 324 | == 3.6 重新啟動tomcat == |
| 325 | {{{ |
| 326 | cd /opt/tomcat |
| 327 | bin/shutdown.sh |
| 328 | bin/startup.sh |
| 329 | }}} |
| 330 | |
| 331 | == 3.7 測試 == |