概述:
主要是作为JavaBean与JSP文件之间的中间层,负责调用JSP文件传出的数据,然后提供给Java Bean进行计算.主要在初始的传参数过程中起到用处,但是对于结果的传值就没啥大的作用了.
in MVC:
servlet对于结果传值的无力,在这个模式下尤其明显,这就要求JavaBean中对于结果值要进行一些初步的处理,最好直接返回字符串)
使用
准备
需要在java
文件夹下面,与bean
同级的文件夹下面新建一个controller
文件夹用于存储servlet文件,然后输出的.class
文件同JavaBean一样输出到WEB-INF/classes
中.
编写
与其他JavaBean文件不同的地方在于,其需要继承于HttpServlet
类,同时需要重写init()
方法与service()
方法.
不同于JSP文件需要使用<jsp:useBean.....>
语句来创建对象与定位类,其为java语言,直接导入需要调用的JavaBean包即可.
引入
需要使用.xml文件来辅助导入,通常为web.xml.
需要注意的是<url-pattern>
内的路径名,要和引用其的<jsp:forward page="....">
的page属性一模一样,否则会找不到servlet,当然在forwrd引用的时候,可以加入动态url的前缀,但是.xml里面则不能加上.
controller文件夹即为其的默认文件夹,不需要在url地址中额外写出,即使其上面还有文件夹,还是只需要把servlet文件名前面加个斜杠就行了.
servlet-name:设置引用名
servlet-class:设置servlet包路径
servlet-name:和上方的servlet-name保持一致
url-pattern:设置跳转时的servlet的url路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>ComputerSumServlet</servlet-name>
<servlet-class>controller.ComputerSumServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ComputerSumServlet</servlet-name>
<url-pattern>/ComputerSumServlet</url-pattern>
</servlet-mapping>
</web-app>
常用方法
init()
service()
和线程类似,代表一个serivlet对象被线程调用的方法,就是这个servlet对象的main函数,
举个例子
一个标准的Servlet
package controller;
import bean.learn.SeriesBean;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.ServletException;
import java.io.IOException;
/**
* @author 橙鼠鼠
*/
public class ComputerSumServlet extends HttpServlet {
final String HOME_LINK="learning/MVC/demo001/home.jsp";
@Override
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
SeriesBean seriesData=new SeriesBean();
request.setCharacterEncoding("utf-8");
request.setAttribute("dealer",seriesData);
//不大看重顺序
String[] received=new String[4];
String[] mark={"first","var","numOfItem","mission"};
for (int i = 0; i < received.length; i++) {
mark[i]=request.getParameter(mark[i]);
if(null==mark[i]||0==mark[i].length()){
response.sendRedirect(HOME_LINK);
return;
}
}
seriesData.initialization(Integer.parseInt(mark[0]),Integer.parseInt(mark[1]),Integer.parseInt(mark[2]));
switch (mark[3]){
case "g":
seriesData.calGrade();
seriesData.setP(false);
break;
case"p":
seriesData.calProportional();
seriesData.setP(true);
break;
default:
response.sendRedirect(HOME_LINK);
return;
}
RequestDispatcher requestDispatcher=request.getRequestDispatcher(HOME_LINK);
requestDispatcher.forward(request,response);
}
}