目标:要写一个HTML表单、一个servlet控制器、一个模型(普通的Java类)、一个XML部署描述⽂文件,以及 ⼀个JSP视图。完成一个小的、完整的Java Web应用。(实现一个根据啤酒颜色,返回相应啤酒品牌的小Java web应用)
创建环境,写源代码、配置文件等等。
目录结构如下:
创建form.html
<html>
<body>
<h1 align="center">Beer Selection Page</h1>
<form method="POST" action="BeerSelect.do">
Select beer characteristics<p>
Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="brown">brown</option>
<option value="dark">dark</option>
</select>
<br><br>
<center>
<input type="SUBMIT">
</center>
</form>
</body>
</html>
创建BeerSelect.java
package com.example.web;//包路径确保与创建的开发环境?录匹配
import com.example.model.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BeerSelect extends HttpServlet{
//我们使?doPost来处理html请求,因为html表单指出: method=post
public void doPost(HttpServletRequest reque,HttpServletResponse response)throws IOException{
response.setContentType("text/html;charset=UTF-8;pageEncoding=UTF-8");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice<br>");
//这个?法来?ServletRequest接?。注意这个参数与HTML<select>标记中"name"属性的值匹配
String c = reque.getParameter("color");
BeerExpert beerExpert = new BeerExpert();
out.println("<br>Got beer type:" + beerExpert.getBrands(c));
}
}
创建BeerExpert.java
package com.example.model;
import java.util.*;
public class BeerExpert{
public String getBrands(String color){
if(color.equals("light"))
return "雪花啤酒";
return "青岛啤酒";
}
}
配置web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<welcome-file-list>
<welcome-file>
form.html
</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>BeerSelect</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BeerSelect</servlet-name>
<url-pattern>/BeerSelect.do</url-pattern>
</servlet-mapping>
</web-app>
编译
javac -classpath C:\tomcat\lib\servlet-api.jar C:\tomcat\webapps\beer-v1\WEB-INF\classes\com\example\model\BeerExpert.java C:\tomcat\webapps\beer-v1\WEB-INF\classes\com\example\web\BeerSelect.java
由于BeerSelect中引用BeerExpert且BeerSelect和BeerExpert不在同一个包内,所以只编译BeerSelect时会遇到找不到BeerExpert的包的情况。解决方法:一起编译,如上。