Servlet 是在 java 中嵌套 html 的一项技术,这点与 JSP 刚好相反,JSP 是在 html 中嵌套 java 的一项技术。
一、Servlet
(一)前言
1、Servlet 事实上也是一个类,其添加方式与类的添加方式一样;
2、Servlet 类下有两个方法,分别是 doGet() 和 doPost(),具体的业务代码写在 doGet() 方法中即可,两个方法的调用在前端 html 中进行确定;
3、调用 Servlet 技术需要 servlet-api.jar 包,对于 web 项目,将该包直接放在 WebContent → WEB-INF → lib 文件夹即可,无需右键 Build Path → Add to Build Path。
4、在 WEB-INF 文件夹下的 web.xml 配置文件中,需要做出以下配置:
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>com.example.servlet.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/Servlet1</url-pattern>
</servlet-mapping>
(二)响应 html
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrinterWriter pw=response.getWriter();
pw.println("<h1>这是一个响应</h1>");
}
}
如果要连接前端的请求内容,需要在前端的 html 中做出如下配置:
<form action="192.168.10.105:8080/example/Servlet1">
account:<input type="text" name="account"><br>
password:<input type="text" name="password"><br>
<input type="submit">
</form>
对应地,需要在 Servlet 中做出如下编写:
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String x=request.getParameter("account");
// x 的值就是前端 name 为 account 的文本框输入的内容;
String y=request.getParameter("password");
// y 的值就是前端 name 为 password 的文本框输入的内容;
}
}
(三)上传文件
1、在 WebContent 文件夹下创建一个用于存放文件的文件夹,取名“upload”;
2、前端 html 需要做如下配置:
<form action="http://192.168.10.105:8080/example/Servlet2" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" >
<input type="submit">
</form>
//method 方法不能用get,只能用post;
//需要添加 enctype="multipart/form-data"
3、Servlet 中 request 需要调用 .getPart() 方法,并添加 @MultipartConfig 注解:
@MultipartConfig
public class Servlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part part=request.getPart("myfile");
//呼应前端的<input type="file">
String formerName=part.getSubmittedFileName();
//获取文件名;
String suffix=formerName.substring(formerName.lastIndexOf("."), formerName.length());
//获取文件后缀;
String uploadPath=request.getServletContext().getRealPath("upload");
//获取upload的文件路径;
String newName=UUID.randomUUID()+suffix;
//生成新的文件名;
String newPath=uploadPath+"/"+newName;
//生成新的文件路径;
System.out.println("the formerName is: "+formerName);
System.out.println("the suffix is: "+suffix);
System.out.println("the uploadPath is: "+uploadPath);
System.out.println("the newName is: "+newName);
System.out.println("the newPath is: "+newPath);
FileOutputStream fos=new FileOutputStream(newPath);
InputStream is=part.getInputStream();
int length=0;
byte[] b=new byte[1024];
while((length=is.read(b))!=-1) {
fos.write(b,0,length);
}
is.close();
fos.flush();
fos.close();
PrintWriter pw=response.getWriter();
pw.println("succeed");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}