前言
通过前面两个章节的铺垫,本章正式迈入Servlet的学习
方法
1.概念
我们知道,有了http协议,规定了web交互的基本规范。有了服务器,用户的请求能够实时的得到响应。那么现在有个问题,就是用户发送一个请求给服务器,我服务器怎么才能知道该调用后台的哪些代码呢?Servlet应运而生了!
实际上它就是帮助处理用户请求到服务器,服务器调用相应的方法。
2.第一个Servlet程序
在讲解这个之前呢,推荐大家下载一款Java集成开发工具IntelliJ IDEA,有同学疑问了?我们之前不是有eclipse吗?为什么要用新的开发工具啊?原因是eclipse简单,功能不齐全!!!还有人说了,那用MyEclipse啊。这我也能理解,博主之前一直再用MyEclipse,公司里用eclipse、MyEclipse、IntellJ IDEA的比率大概在2:4:4,也就是说MyEclipse和IntellJ IDEA你选一个就行了!因为我之前一直在用MyEclipse,所以这次尝试一下IntelliJ IDEA。
我们拿之前的SMS项目的代码作为讲解! JAVA串烧(二)SMS编写之后台
1)打开IDE,在web文件夹下新增两个jsp文件login.jsp和success.jsp,前者是用户登录的表单,后者是登录成功的跳转页面。目前你可以不需要理会JSP文件的含义,只是把它当作一个普通的html文件来看待就行了!
目前的工程结构如下所示:
login.jsp源码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form action="/login.do" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
success.jsp源码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<h1>用户登录成功</h1>
</body>
</html>
注意:这是一个相当简单的登录表单,没有加入任何的CSS以及JS的修饰,不影响功能!
前提条件:将web项目部署到tomcat服务器中(每种工具的具体部署方法不同,读者可自行百度)
我这里将SMS工程部署到了之前下载好的tomcat中。以IntellJ为例:
这里用户点击登录的话就触发了一次请求,请求的url为 login.do
那么服务器如何知道这个请求应该调用什么代码呢,下面让我们来写Servlet告诉他吧!
2)编写Servlet文件(它也是一个Java文件,继承了HttpServlet)\com\jwang\student\servlet\UserServlet.java
package com.jwang.student.servlet;
import com.jwang.student.bo.User;
import com.jwang.student.service.UserService;
import com.jwang.student.service.impl.UserServiceImpl;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
UserService userService = new UserServiceImpl();
User user = new User("01",username,password);
if (userService.login(user)) {
request.getSession().setAttribute("username", username);
request.getRequestDispatcher("/success.jsp").forward(request, response);
} else {
request.setAttribute("errorMsg", "用户名或密码错误,请重新输入!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response){
this.doGet(request, response);
}
}
以上代码的含义就是接收用户发出的请求,做登录验证!大家可以看到我调用了userService的login()方法,大家应该还没忘吧!
到这里我们的login.do请求应该是要访问这段代码的。
3)配置请求路径login.do指向UserServlet
\web\WEB-INF\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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.jwang.student.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
</web-app>
好了,经过了以上的准备工作,你的第一个Servlet就算是配置好了!
启动程序,进入登录表单输入用户名与密码,点击登录
- 成功:系统跳转到success.jsp,显示登录成功
- 失败:系统返回至login.jsp,用户需要重新输入用户名和密码进行登录
登录的用户名与密码在数据库中Users表:博主的是admin和admin
附录:
1.开发中启动web应用的时候一定要是debug模式,方便调试
IntellJ IDEA中请点击这个小虫子!
在代码中左侧点击鼠标打上断点即可实现代码调试!
常用的快捷键是: F8下一步 、F9下一个断点
不使用快捷键的话,debug窗口如下:
2.乱码问题
大家有没有发现,表单中写入了中文后,传递到后台就发生了乱码!!!这种很烦!
因为我的工程是utf-8编码的,所以添加如下代码即可解决乱码问题!