Servlet是一种用于开发动态web资源的技术,在MVC涉及模式中作为控制端存在,主要是对页面传进来的请求做出相应
Servlet可以说是继承了HttpServlet类的特殊的类,它在页面加载的时候会调用其构造函数init进行装载,实例化一次以后会一直存在服务器中,对jsp页面做出的post和get请求会由Servlet()函数做出判断,来决定是调用其doPost方法还是doGet方法,在服务器关闭时会自动调用其销毁函数destroy()。
Servlet使用方法说明,我就拿idea编web程序来说,eclipse应该也差不多:
和普通创建web程序一样选择javaEE的web application建project,然后再src下创建一个包,假如叫serv,然后就点右键new一个Servlet,然后输入名字,假设就叫Servlet,然后一路默认设置走下去Servlet文件就建好了,idea会智能得给你创建好doPost和doGet函数,我们也是主要通过重写这两个函数来对页面做出回应,就把它当普通的java类来写得到一个request和response对象要怎么处理就好了
写好之后我们要配置一下web.xml文件(eclipse会自动配置我的idea没有自动配置)
写在<web-app></web-app>标签之间一些配置信息,表示页面加载时的动作:
<servlet>//这里面放你的servlet的信息,可以多个servlet标签
<servlet-name>Servlet</servlet-name>//这个表示你的Servlet名字,我取的是Servlet
<servlet-class>serv.Servlet</servlet-class>//这个表示你的Servlet类的具体地址,记得写上包名
这些是非必须参数:
<init-param>//表示Servlet初始化参数,只能在servlet的init()方法中取得,this.getInitParameter("xxx")
<param-name>listings</param-name>//参数名字
<param-value>false</param-value>//参数值
</init-param>
<load-on-startup>1</load-on-startup>//这个表示该Servlet的装载时候的优先级,数字越小越优先
非必须参数结束
</servlet>
<servlet-mapping>//这个表示在页面中Servlet对应url标签的情况,是映射
<servlet-name>Servlet</servlet-name>//这里填上面Servlet的名字,可以多个映射
<url-pattern>/serv/Servlet</url-pattern>//这里填你在页面中转向Servlet页面的地址,但是要多一个/表示根目录为当前工程包
</servlet-mapping>
然后我贴出我测试Servet的代码,我是和前面学的JDBC连起来顺便复习下。。。话说调错了很久,有几个地方很容易错:
首先是主页index.jsp:
<%--
Created by IntelliJ IDEA.
User: hjy
Date: 2018/1/3
Time: 19:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>ServletTest</title>
</head>
<body>
<h1>ServletTest</h1>
<a href="serv/Servlet">点我试试</a>//点击a标签就是调用了doGet方法,就写doGet方法试试就好了,这里的根目录默认为web下
</body>
</html>
然后是Servlet.java:
package serv;
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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
public class Servlet extends HttpServlet {
private static final String name="root";
private static final String password="root";
private static final String url="jdbc:mysql://localhost:3306/test";//我选择的是我的test数据库
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
try {//注意这里只能try一下不然报错
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, name, password);
PreparedStatement stam = con.prepareStatement("SELECT * FROM inf");//建议多用PrepareStatement效率更高
ResultSet rs = stam.executeQuery();
response.setContentType("text/html;charset=utf-8");//注意设置字符集
PrintWriter out = response.getWriter();//调用response的getWriter方法
while (rs.next()) {
out.println(rs.getString("name") + "," + rs.getInt("age") + "," + rs.getInt("tel")+"<br/>");//这些是我往数据库里加的东西
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
然后是web.xml:
<?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_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>serv.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/serv/Servlet</url-pattern>//特别注意这里和a标签的href对应,写斜杠表示在应用web包下
</servlet-mapping>
</web-app>