| | 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 測試 == |