
前置学习:
(1)在IDEA中创建Java Web项目(详细图文),地址:网页链接
(2)在IDEA中利用JSP+Servlet实现计算器(图文),地址:网页链接
下面的重点在于利用简单工厂模式重构JSP+Servlet开发的计算器。
1、新建一个项目
项目名:SW_Experiment2_FactoryPatternServletJSP






工厂模式详细过程参考实验课上的讲解,部分代码如下:
package com.jiangwei;
public interface Calculator {
String calculate(int num1,int num2);
}
package com.jiangwei;
public class Add implements Calculator {
@Override
public String calculate(int num1, int num2) {
return String.valueOf(num1+num2);
}
}
package com.jiangwei;
public class CalculateFactory {
public String getCalculatorResult(String op,int num1,int num2) {
switch(op){
case "+":
return new Add().calculate(num1,num2);
case "-":
return new Minus().calculate(num1,num2);
case "*":
return new Multiple().calculate(num1,num2);
case "/":
return new Divide().calculate(num1,num2);
default:
return "输入有误,请重新选择需要的运算";
}
}
}
也可以参考前面的项目复制过来稍作修改,代码如下:
package com.jiangwei;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class CalculServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doGet(req, resp); int num1 = Integer.parseInt(req.getParameter("num1")); int num2 = Integer.parseInt(req.getParameter("num2")); String op = req.getParameter("op"); System.out.println(num1); System.out.println(num2); System.out.println(op); CalculateFactory cal = new CalculateFactory(); String result = cal.getCalculatorResult(op, num1, num2); System.out.println("运算结果:"+result); //业务逻辑跳转 req.setAttribute("result","结果:"+result); req.getRequestDispatcher("/calcu_servlet.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } } 注意:如果找不到servlet父类,也可以把tomcat里的两个jar包放到web下新建一个文件夹lib里,然后在Project Structure /Libraries点击加号添加,把web下的lib加进去,如下图。

添加后如下所示

添加如下内容:
<servlet>
<servlet-name>calculServlet</servlet-name> <servlet-class>com.jiangwei.CalculServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>calculServlet</servlet-name> <url-pattern>/calculServlet</url-pattern> </servlet-mapping>

8.2、除法

整个项目截图
