概述:
主要是作为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";@Overridepublic void init(ServletConfig config) throws ServletException{super.init(config);}@Overridepublic 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);}}
