Java Web之Servlet学习

35 篇文章 1 订阅
34 篇文章 0 订阅

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>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值