Servlet文件创作举例
本篇博客我们一起来学习一下Javaee中Servlet文件的制作。
eclipse的下载以及相关配置
首先下载的话,建议下载eclipse-jee-photon-R-win32-x86_64这个版本,不要下载阉割版的eclipse-java,否则实现不了本功能。下载完后,会提示你创作一个workplace,个人选择放在了D盘。
之后大家打开文件,首先先建一个这样的文件。
在建立这个文件时,需要配置Tomcat服务器。输入名字后,点击:NEW RUNTIME 选择与自己版本相匹配的服务器,点击next就行。
之后就会生成这样的一个项目,如下图:
我给这个项目命名为gbook。
其中,WebContent是个极其重要的文件夹,里面存放着我们的HTML文件以及JSP文件,还有一些要在网页中使用的文件,比如要插入的图像的文件夹,JS文件夹,还有要使用的外部链接库。如下图所示:
我们要写的java文件和Servlet文件都放在下图的目录下:
(src下面那个叫做包(package)名字大家自己取。)
Servlet!!!
建立文件
介绍了一大堆准备工作,我们可以开始写Servlet文件了。
按照下图找到Servlet文件建立一个新的文件。
之后的选项大家默认就好。
生成文件后,大家能找到两个方法,分别是doPost和doGet方法,doGet方法是用于直接访问该Servlet时使用的,或者链接到该Servlet网页的网页使用的是get方式;dopost方法只能是由链接到该网页的前端网页使用post方法时才能调用。
比如下图,我在表单的属性里增加了method="post"语句,就声明将要使用Servlet网页中的doPost方法。如果不写,就默认是使用get。
下面是一段完整的servlet代码,不过里面只写了doPost方法。
package gbook;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class GBookServlet
*/
@WebServlet("/GBookServlet")
public class GBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");//以上两行代码是解决乱码问题的语句。
String nickname = request.getParameter("nickname");
if(nickname.trim().equals(""))//trim是剪刀函数,自动将字符串两端的空白截掉
{
response.getWriter().append("昵称不能为空!");
return;//此时return就是不在执行下面的语句
}
String gender = request.getParameter("gender");
String title = request.getParameter("title");
String content = request.getParameter("content");
String touxiang = request.getParameter("touxiang");
DBUtils db = new DBUtils();
String sql = "insert into gbook(nickname,gender,touxiang,gdate,title,content)"
+"values('"+nickname+"','"+gender+"','"+touxiang+"',current_timestamp,'"
+title+"','"+content+"')";
System.out.println(sql);//该行是将字符串sql打印到控制台上,方便观察是不是sql语句写错了,是一个好习惯。
db.executeUpdate(sql);
db.close();
response.sendRedirect("gbook.jsp");
}
}
doPost与doGet的区别
首先doPost与doGet是Servlet文件里面的两个方法,当客户端界面的一个请求,比如表单通过“get”方法跳转到此页面时,将会执行doGet方法;若是通过“post”跳转,则会调用doPost方法。当通过“get”跳转时,地址栏中会显示用户端所传参数的值,这就存在一些安全隐患(比如用户提交的是密码)。此时最好就采用post方式跳转。
代码讲解
通过上述方法建好文件之后,我们直接找到doPost方法,在这里面写就好。一些注释在代码里面已经有了,大家可以略作参考。下面讲一讲这个方法里面一些必要的知识。
1.response和request.
response是响应,也就是说是Servlet端向用户端发送信息的一个类。request是请求,就是用户端向服务端发送信息的一个类。
-
request.setCharacterEncoding();这个函数是设置从用户端到服务端信息的码制的。
-
response.setContentType();这个函数是设置从服务端到用户端信息的码制的。
-
request.getParameter();该函数是从用户端抓取信息的一个重要函数,里面可以只写一个字符串类型的参数。这个字符串是与用户端界面的表单内的变量名相匹配的。本代码里面的字符串有nickname,gender,title等,这些都是本人HTML中的一些变量名,详情请见https://blog.csdn.net/xydoo/article/details/96485241中的代码。
如果字符串对应的表单变量类型是文本域,那么得到的就是文本域里面的文本。
如果是单选框或者是复选框或者下拉列表,则得到的就是定义该选项时的value属性值。但返回值是字符串类型的。对应到MySQL里面也就是char或者是varchar类型。 -
response.getWriter().append();这个就是对用户端的打印函数,负责在这个界面打印字符串,括号里写字符串。
-
response.sendRedirect();这就是跳转语句,括号里写想要跳转的网页的路径。代码执行到此就会跳转到我们想给用户看的界面。
本代码中还有一个自己写的工具类DBUtils,是为了方便调用数据库而写的,在此不做详细介绍,后续文章中可能会有说明。