JavaWeb servlet的使用"/>
JavaWeb servlet的使用
在jsp文件中没有java代码我们才算是学完啦,从EL表达式和JSTL标签,在减少在login.jsp和index.jsp中的java代码,而今天的学习是让在jsp中彻底没有java代码,原本写在doLogin.jsp做登录判断的java代码,我们不在写在jsp文件中了,而是将java代码写在java文件中,今天开始我们的新的知识啦,servlet的使用。
目录
一.servlet是什么?
二.servlet的作用
三.使用servlet接收用户发来的请求
1.实现servlet接口
2.配置路径
3.继承servlet
一.servlet是什么?
servlet是java编写的服务器端的程序,运行在web服务器中。
二.servlet的作用
1.接收用户端发来的请求
2.调用其他java程序来处理请求
3.将处理结果,返回到服务器中
三.使用servlet接收用户发来的请求
- 首先我们不在需要doLogin.jsp文件,在java文件下方创建一个包名为com.xxx.servlet,该下方的类为LoginSerblet。
1.实现servlet接口
实现servlet接口的话,我们需要把servlet中的方法重写,会得到五个方法。
初始化:当请求第一次进入servlet就会调用该方法。
@Override
public void init(ServletConfig arg0) throws ServletException {//第一次进来:当请求第一次进入servlet就会调用该方法System.out.println("我初始化啦");
}
服务: 代码都是写在该方法中
/*** 服务*/@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
销毁:销毁的情况分为:
1.服务器关闭
2.这个类被修改啦
@Overridepublic void destroy() {//销毁的情况分为:1.服务器关闭// 2.这个类被修改啦System.out.println("我销毁啦");}
得到配置:
/*** 得到配置*/@Overridepublic ServletConfig getServletConfig() {return null;}
得到信息:
@Overridepublic String getServletInfo() {return null;}
- 实现servlet的运用:该代码是替代了原本的login.jsp文件,在该类中和doLogin.jsp的接收用户发来的请求一样。
代码如下,代码详细讲解
package com.yjx.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.http.HttpRequest;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class LoginServlet implements Servlet{//第一步实现servlet接口/*** 初始化*/@Override
public void init(ServletConfig arg0) throws ServletException {//第一次进来:当请求第一次进入servlet就会调用该方法System.out.println("我初始化啦");
}/*** 服务*/@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {//代码都是写在该方法中//ServletRequest:其实就是request 请求//ServletResponse:就是response 响应//强转响应和请求,为响应和请求的子类HttpServletRequest request=(HttpServletRequest)req;HttpServletResponse response=(HttpServletResponse)res;req.setCharacterEncoding("utf-8");//防止乱码的代码//先获取到传过来的数据String name=req.getParameter("username");String pwd=req.getParameter("pwd");//将数据打印在页面上,在原先jsp文件中我们直接out.print//但是在该java文件中我们需要通过响应对象获取了输出对象PrintWriter out=response.getWriter();//out设置的变量名,可以随意设置,但是我们经常都是用out.print所有将变量名设置为out更好//当获取到数据后,判断该用户是否登录成功if("zking".equals(name)&&"zking123".equals("pwd")) {out.print("登录成功");}else {out.print("登录失败");}}//以上步骤过后,我们需要进行配置,不然登录请求发送时不知道进入那个java文件中,所以我们要配置servlet的访问路径//配置路径去到web.xml文件中配置/*** 销毁*/@Overridepublic void destroy() {//销毁的情况分为:1.服务器关闭// 2.这个类被修改啦System.out.println("我销毁啦");}/*** 得到配置*/@Overridepublic ServletConfig getServletConfig() {return null;}/*** 得到信息*/@Overridepublic String getServletInfo() {return null;}}
2.配置路径
我们配置路径在web.xml中配置servlet的访问路径,通过配置的路径访问,代码如下。
注:配置以后记得重启服务器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="" xmlns="" xsi:schemaLocation=" .xsd" id="WebApp_ID" version="4.0"><display-name>JavaWeb20</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><!--如果修改了这个 一定要重启服务器--><!--1.配置servlet--><servlet><!--给它取一个名字--><servlet-name>one</servlet-name><!--servlet-class需要填上类的全路径--><servlet-class>com.yjx.servlet.LoginServlet</servlet-class></servlet><!--2.配置servlet的访问路径--><!--mapping映射--><servlet-mapping><!--对应的servlet的名字--><servlet-name>one</servlet-name><!--给它配置一个访问的路径--><url-pattern>/login.do</url-pattern></servlet-mapping>
</web-app>
3.继承servlet
大家可以看到实现servlet的写法会更加复杂,而我们去继承servlet会更简单,也是比较推荐大家使用继承来写。
- 当我们继承了servlet要将doGet和doPost两个方法重写。
- doGet方法中专门处理get请求,doPost方法中专门处理post请求。我们可以在doGet方法中调用doPost方法,这样字就不需要写两遍了,就算是get请求也很进入到doPost方法中。
- 在这里我们不在需要像实现一样那么麻烦的去配置路径,只需要@WebServlet("/test.do") 这样一串代码,然后通过该路径访问,在该里面需要加斜杠,在表单提交时在action输入给servlet配置的路径的名字,但是去掉斜杠。
代码如下:
package com.yjx.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@SuppressWarnings("all")
@WebServlet("/test.do") //直接填访问路径
public class MyServlet extends HttpServlet{//使用继承会更加简便一些//doGet:专门处理get请求//doPost:专门处理post请求//我们目前给大家讲过的只有表单有post请求//一般默认为get请求但是我们可以设置@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//在该方法中调用doPost方法,当进入到get请求时,直接到doPost方法中doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//获取到值String name=req.getParameter("username");String pwd=req.getParameter("pwd");resp.setCharacterEncoding("gb2312");PrintWriter out=resp.getWriter();//进行匹配if("zking".equals(name)&&"zking123".equals(pwd)) {out.print("登陆成功"); }else {out.print("登录失败");}}
}
login.jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!-- 这里输入给servlet配置的路径的名字 --><form action="test.do"><p><input name="username"></p><p><input name="pwd"></p><button>登录</button></form>
</body>
</html>
今天的学习就到这路啦,大家看下代码,代码中都有详细注解。
更多推荐
JavaWeb servlet的使用
发布评论