【Java】通过原始Servlet写最基本的Web应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/o0DarkNessYY0o/article/details/52491572

      之前做项目都是一股脑的做SpringMVC的SSH项目,而且还是半路出家的那种。。。感觉好多前后台交互的东西实现起来很困难,而后才真正懂了什么叫JSP。。。很尴尬,所以现在重新补JAVA-JSP-Web知识,记录一下,方便需要的童鞋,也方便自己的理解!

      好的,我们正式开始!

基本Servlet用法

      首先我们创建一个Dynamic Web project项目,我这儿就叫ServletTest了,下面是项目结构图:

项目结构

      好的,我们写最关键的Servlet文件继承自HttpServlet,不过在这之前,先创建包,这个很基础的了。

      复写一下doGet和doPost方法,基础的咱就写简单点儿:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 获取页面HTML标签写入流,我习惯用PrintWriter,println感觉用起来舒服点儿~
    PrintWriter pw = resp.getWriter();
    pw.println("<html><head>");
    pw.println("<title>My first servlet project</title>");
    pw.println("</head><body>");
    pw.println("<h1>Show my first servlet project success!</h1><br/>");
    pw.println("</body></html>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
}

      然后我们在web.xml里修改一下配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         id="WebApp_ID" 
         version="3.0">

    <!-- 对应cn.com.dnyy.Servlet01.ServletTest01.java的案例 -->
    <servlet>
        <servlet-name>ServletTest01</servlet-name>
        <servlet-class>cn.com.dnyy.Servlet.ServletTest01</servlet-class><!-- 对应加载的类 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletTest01</servlet-name><!-- 两个servlet-name一定要统一 -->
        <url-pattern>/ServletTest01</url-pattern><!-- 访问URL -->
    </servlet-mapping>   
</web-app>

      好了,开启服务器,访问localhost:8080/ServletTest/ServletTest01就能看到我们写的HTML了,其中ServletTest是我的项目名哈,注意一下。

获取参数

      既然弄清楚了这么原始的基本Servlet用法,肯定是不够的,因此,我们最先想到的就是如何获取参数了。

      返回java文件,我们添加点儿东西,注释一下你就能看懂了!

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
    pw.println("<html><head>");
    pw.println("<title>My first servlet project</title>");
    pw.println("</head><body>");
    pw.println("<h1>Show my first servlet project success!</h1><br/>");

    // 获取参数并输出其值
    String parameter = null;// 参数值存放数组
    try {
        parameter = req.getParameter("parameter");// 获取的参数名

        // 如果参数值不为空,则输出
        if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
    } catch (NullPointerException e) {
        // 如果没有参数输入,则捕获异常后不输出
        e.printStackTrace();
    }

    pw.println("</body></html>");
}

      有注释就是容易理解哈,现在我们刷新一下页面,还是什么都没有,一旦加入了参数就不一样了,加入参数的URL如下:localhost:8080/ServletTest/ServletTest01?parameter=111

      加入参数回车访问一下,就能看到屏幕多输出了我们要添加的内容了!

简单介绍其他常用用法

      纯纯的干货,代码加注释的干货!

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
    pw.println("<html><head>");
    pw.println("<title>My first servlet project</title>");
    pw.println("</head><body>");
    pw.println("<h1>Show my first servlet project success!</h1><br/>");

    // 上下文根目录路径
    pw.println("<h2>root:" + req.getContextPath() + "</h2>");

    // 真实路径
    pw.println("<h3>real path:" + req.getSession().getServletContext().getRealPath("/") + "</h3>");

    // 循环输出URL上的所有参数名
    Enumeration<String> enu = req.getParameterNames();
    pw.println("<h3>you must input a parameter in url, and now, you put the parameter:</h3>");
    while(enu.hasMoreElements()){// 如果还能遍历
        String element = enu.nextElement();// 下一个Element
        pw.println("<h4>[" + element + "] and it's value is [" + req.getParameter(element) + "]</h4><br/>");
    }

    // 获取并输出数值
    String parameter = null;// 参数值存放数组
    try {
        parameter = req.getParameter("parameter");// 获取的参数名

        // 如果参数值不为空,则输出
        if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
    } catch (NullPointerException e) {
        // 如果没有参数输入,则捕获异常后不输出
        e.printStackTrace();
    }

    pw.println("</body></html>");
}

      堪称极品!要是能够通过其它页面跳转到这个页面并传递参数的形式就更好了!

HTML页面跳转到Servlet

      说做就做!赶紧的,我们创建一个html页面index.html,给大家看看我的目录结构:

目录结构

      好的,然后我们填充一下这个html内容:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>ServletTest01</title>
    </head>
    <body>
        <h1>You can input this parameter to visit ServletTest01.java</h1>

        <!-- 访问URL为web.xml中设置的servlet,没有../则是URL加上/01,将会提示找不到页面,可以设置为post方法 -->
        <form action="../ServletTest01" method="get">
            parameter:<input name="parameter" type="text" value=""/>(必填!)<br/>
            parameter1:<input name="parameter01" type="text" value=""/><br/>
            parameter2:<input name="parameter02" type="text" value=""/><br/>
            parameter3:<input name="parameter03" type="text" value=""/><br/>
            parameter4:<input name="parameter04" type="text" value=""/><br/>
            <input type="submit" value="sendTo"/>
        </form>
    </body>
</html>

      这下就基本没问题了,不过为了处理一下编码问题,在java文件doGet方法处加上两行UTF-8。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("UTF-8");// GET请求URIEncoding设置为UTF-8
    resp.setContentType("text/html;charset=UTF-8");// POST请求URIEncoding设置为UTF-8
    PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
    pw.println("<html><head>");
    pw.println("<title>My first servlet project</title>");
    pw.println("</head><body>");
    后面代码略...

      如果访问页面后编码还有问题的话,可以移步自我浅淡编码的博文《【Java】SpringMVC Post&Get编码问题》来解决一下,大概就是修改下Tomcat的server.xml就行了的,如果还有什么不清楚的话,可以在下方留言,我会进我所能给大家解答的!

      下面就是我的工程源码,移步–>链接

猜你喜欢

转载自blog.csdn.net/o0DarkNessYY0o/article/details/52491572