JavaWeb.servlet的基本使用方法详解
作者:失格LXY
前言:
我们在前几篇文章里的web项目都是用jsp文件完成的,那么什么时候jsp算是学完了呢?——在jsp文件中没有java代码。
在原来的doxxx.jsp文件里写的都是处理登陆或者主页面功能的java代码,现在我们需要servlet来代替doxxx.jsp文件。
一.实现servlet
我们可以一个登陆来当例子。
建一个com.xxx.servlet包,在写一个LoginServlet类
package com.zking.servlet; import java.io.IOException; import java.io.PrintWriter; 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; /** * * @author zjjt *用来实现登陆请求的处理 */ public class LoginServlet implements Servlet{ //生命周期 @Override//初始化 public void init(ServletConfig arg0) throws ServletException { //当请求来到这个servlet就会调用init方法 System.out.println("开始初始化"); } @Override//服务 public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { // 所有的代码写在这个方法中 //强转响应 HttpServletResponse response = (HttpServletResponse) resp; //强转请求 HttpServletRequest request = (HttpServletRequest) req; //如果用户名是中文 req.setCharacterEncoding("utf-8"); //取到用户数据 String username = req.getParameter("username"); String password = req.getParameter("password"); //通过响应对象获得输出对象 PrintWriter out = response.getWriter(); //通过请求对象取session,需要强转请求 HttpSession session = request.getSession(); //取application通过请求对象 ServletContext application = request.getServletContext(); //与数据库数据做对比 if("root".equals(username)&&"root123".equals(password)) { //登陆成功 //转发:req.getRequestDispatcher("/xx").forward(req, resp); //重定向:需要强转响应 //response.sendRedirect("/xx"); out.println("登陆成功"); }else { //登陆失败 out.println("登陆失败"); } } @Override//销毁 public void destroy() { //什么时候销毁 //1.服务关闭时 //2.这个类被修改时 System.out.println("我销毁了"); } @Override//得到配置 public ServletConfig getServletConfig() { // TODO Auto-generated method stub return null; } @Override//得到信息 public String getServletInfo() { // TODO Auto-generated method stub return null; } }
家人们注意了在代码里我使用了强转,是因为ServletRequest 和 ServletResponse 没有重定向功能,所有request(请求)和response(响应)取不到值。但是ServletRequest 和 ServletResponse的子类有重定向功能所有,我们要进行强转。
提供访问路径【web.xml】
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Web20</display-name> <!-- web.xml是整个项目的配置文件 --> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> <!-- 1.配置servlet --> <servlet> <!-- 给取个名字 --> <servlet-name>one</servlet-name> <!-- servlet-class需要填上类的全路径 --> <servlet-class>com.zking.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>
切记修改了web.xml的代码一定要重启服务器
访问路径一定要加/,否则运行会报错
登陆界面代码:
<%@ 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> <!-- action里填配置的路径不需要加/ --> <form action="login.do" method="post"> <p><input type="text" name="username"></p> <p><input type="text" name="password"></p> <p><button>登陆</button></p> </form> </body> </html>
这样我们的登陆就完成了,但是这样大家会不会觉得代码有点多,没关系,还有其他方法。
二.开发模式
我们的开发模式有两种,一种是(传统的开发模式)配置式开发,另一种是注解式开发。我们上面所讲的就是配置式开发,接下来我们来讲一讲注解式开发~( ̄▽ ̄)~*。
注解式开发使用的是@注解,在代码中@WebServlet就等于web.xml里的
在@WebServlet后面加上(),在里面直接填入路径,例如@WebServlet("/xxx")就等于web.xml里的
三.继承Servlet
使用注解式开发的方法我们就可以不用修改web.xml代码了,是不是简单多了(●'◡'●)。接下来我们写一个MyServlet文件,写Servlet有两种方法,一种式实现,另一种是继承。实现的方法我们已经写过了,接下来我们使用继承的方法
package com.zking.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; 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 javax.servlet.http.HttpSession; /** * * @author zjjt * */ @WebServlet("/test.do")//直接填访问路径 public class MyServlet extends HttpServlet{ //不同的请求方式: //doGet 专门处理get请求 //doPost 专门处理post请求 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //登陆功能 doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //登陆功能 //如果用户名是中文 req.setCharacterEncoding("utf-8"); //取到用户数据 String username = req.getParameter("username"); String password = req.getParameter("password"); //支持中文的编码【utf-8】【gb2312】【big5】 req.setCharacterEncoding("gb2312"); //通过响应对象获得输出对象 PrintWriter out = resp.getWriter(); //通过请求对象取session,需要强转请求 HttpSession session = req.getSession(); //取application通过请求对象 ServletContext application = req.getServletContext(); //与数据库数据做对比 if("root".equals(username)&&"root123".equals(password)) { //登陆成功 //转发:req.getRequestDispatcher("/xx").forward(req, resp); //重定向:需要强转响应 //response.sendRedirect("/xx"); out.println("登陆成功"); }else { //登陆失败 out.println("登陆失败"); } } }
家人们有发现实现和继承servlet有什么区别了吗
我相信细心的家人们应该已经发现了我这里继承的是HttpServlet而不是Servlet。这是因为HttpServlet是它的子类,具有重定向功能,这下我们又可以省去强转的部分了。所有我推荐大家使用注解式开发模式和继承Servlet的方式来写Servlet哟~
总结
到此这篇关于JavaWeb.servlet基本使用的文章就介绍到这了,更多相关JavaWeb.servlet使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!