【前言】
这次的javaweb课后练习,帮助了我去将前面所学的jsp、javabean和javaservlet 三种知识联系起来,拥有了更深一步的理解
【不多说,先上代码】
一、inpuNumber.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action = "/MyJspProject/handleComputer" method = "post">
第一个数<input type = "text" name = "first"> <br>
第二个数<input type = "text" name = "second"> <br>
选择一种运算符<br>
<select name = "sign">
<option value = "+" >+</option>
<option value = "-" >-</option>
<option value = "*" >*</option>
<option value = "/" >/</option>
</select>
<br>
<input type = "submit" value = "提交"/>
<input type = "reset" value = "重置"/>
</form>
</body>
</html>
二、ShowResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id = "computer" type = "No_5.cat.Computer" scope = "request"/>
计算结果为 :<jsp:getProperty property = "sum" name = "computer"/>
</body>
</html>
三、Computer.java
package No_5.cat;
public class Computer {
private int first;
private int second;
private String sign;
private int sum;
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
}
四、CalculateBean.java
package No_5.cat;
import No_5.cat.Computer;
public class CalculateBean {
public boolean calculate(Computer computer) {
if(computer.getSign() == "/" && computer.getSecond() == 0) {
return false;
}
switch(computer.getSign()) {
case "*":
computer.setSum(computer.getFirst()*computer.getSecond());
break;
case "+":
computer.setSum(computer.getFirst()+computer.getSecond());
break;
case "-":
computer.setSum(computer.getFirst()-computer.getSecond());
break;
case "/":
computer.setSum(computer.getFirst()/computer.getSecond());
break;
}
return true;
}
}
五、HandleComputer.java
注意:我使用的是eclipse而不是idea,在webServlet的写法上也有一点点区别,小心复制,
idea 的应该改为 @WebServlet(name = "handleComputer")
package No_5.cat;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import No_5.cat.CalculateBean;
import No_5.cat.Computer;
@WebServlet("/handleComputer")
public class HandleComputer extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
public HandleComputer() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("GBK");
String first = request.getParameter("first");
String second = request.getParameter("second");
String sign = request.getParameter("sign");
Computer computer = new Computer();
computer.setFirst(Integer.parseInt(first));
computer.setSecond(Integer.parseInt(second));
computer.setSign(sign);
CalculateBean cal = new CalculateBean();
if(cal.calculate(computer)) {
request.setAttribute("computer", computer);
//获取请求转发器对象
RequestDispatcher dis = request.getRequestDispatcher("/Part6_Project/ShowResult.jsp");
//调用请求转发器对象完成请求
dis.forward(request, response);
}
else {
System.out.print("被除数不能为0,请重新输入\n 三秒后自动跳转到输入界面");
response.setHeader("refresh","3,url = /Part6_Project/inputNumber.jsp");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
【遇到的困难】
遇到的最大困难就是路径问题,绝对路径或者相对路径,查阅了很多资料。在src 目录 或者 WebContent目录下。默认在自己目录下找文件,所以,.jsp 跳转 .java 。很多时候是直接404的,跳转到其他的目录,要使用绝对路径,而不能用相对路径。具体的表述我会在文章的最后,附上大佬们更详细的解答,需要进一步探索的可以通过传送门去查看
1. jsp “转” servlet
在inputNumber.jsp中 form 中的 action 路径,按照课本上的是 action = "handleComputer",但是,访问之后会报错404,要改成给出的代码上的那种方式
2.servlet 转 jsp
在HandleComputer.java中的跳转到ShowResult.jsp,inouterComputer.jsp中,也同样使用的绝对路径的表示方法,课本使用的相对路径
传送门
jsp跳转到servlet 出现 404 路径错误的问题解决办法_jsp跳转不到servlet__DreamCatcher_的博客-CSDN博客