`

java web验证码生成总结(包括servlet、jsp和struts2实现)

阅读更多

一、使用纯Servlet实现验证码

(1)在web.xml配置:
view plaincopy to clipboardprint?
<servlet>     
    <servlet-name>image</servlet-name>     
    <servlet-class>org.test.web.AuthImage</servlet-class>     
</servlet>     
    
<servlet-mapping>     
    <servlet-name>image</servlet-name>     
 <url-pattern>/authImage</url-pattern>     
</servlet-mapping>   
<servlet>  
    <servlet-name>image</servlet-name>  
    <servlet-class>org.test.web.AuthImage</servlet-class>  
</servlet>  
 
<servlet-mapping>  
    <servlet-name>image</servlet-name>  
 <url-pattern>/authImage</url-pattern>  
</servlet-mapping>  

(2)servlet源码

view plaincopy to clipboardprint?
public class AuthImage extends HttpServlet     
{     
    
    private static final String CONTENT_TYPE = "text/html; charset=gb2312";     
    //设置字母的大小,大小     
    private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);     
    public void init() throws ServletException     
    {     
        super.init();     
    }     
    Color getRandColor(int fc,int bc)     
    {     
        Random random = new Random();     
        if(fc>255) fc=255;     
        if(bc>255) bc=255;     
        int r=fc+random.nextInt(bc-fc);     
        int g=fc+random.nextInt(bc-fc);     
        int b=fc+random.nextInt(bc-fc);     
        return new Color(r,g,b);     
    }     
    
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException     
    {     
        response.setHeader("Pragma","No-cache");     
        response.setHeader("Cache-Control","no-cache");     
        response.setDateHeader("Expires", 0);     
        //表明生成的响应是图片     
        response.setContentType("image/jpeg");     
             
        int width=100, height=18;     
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);     
             
        Graphics g = image.getGraphics();     
        Random random = new Random();     
        g.setColor(getRandColor(200,250));     
        g.fillRect(1, 1, width-1, height-1);     
        g.setColor(new Color(102,102,102));     
        g.drawRect(0, 0, width-1, height-1);     
        g.setFont(mFont);     
    
        g.setColor(getRandColor(160,200));     
    
        //画随机线     
        for (int i=0;i<155;i++)     
        {     
            int x = random.nextInt(width - 1);     
            int y = random.nextInt(height - 1);     
            int xl = random.nextInt(6) + 1;     
            int yl = random.nextInt(12) + 1;     
            g.drawLine(x,y,x + xl,y + yl);     
        }     
    
        //从另一方向画随机线     
        for (int i = 0;i < 70;i++)     
        {     
            int x = random.nextInt(width - 1);     
            int y = random.nextInt(height - 1);     
            int xl = random.nextInt(12) + 1;     
            int yl = random.nextInt(6) + 1;     
            g.drawLine(x,y,x - xl,y - yl);     
        }     
    
        //生成随机数,并将随机数字转换为字母     
        String sRand="";     
        for (int i=0;i<6;i++)     
        {     
            int itmp = random.nextInt(26) + 65;     
            char ctmp = (char)itmp;     
            sRand += String.valueOf(ctmp);     
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));     
            g.drawString(String.valueOf(ctmp),15*i+10,16);     
        }     
    
        HttpSession session = request.getSession(true);     
        session.setAttribute("rand",sRand);     
        g.dispose();     
        ImageIO.write(image, "JPEG", response.getOutputStream());     
    }     
    public void destroy()     
    {     
    }     
}   
public class AuthImage extends HttpServlet  
{  
 
    private static final String CONTENT_TYPE = "text/html; charset=gb2312";  
    //设置字母的大小,大小  
    private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);  
    public void init() throws ServletException  
    {  
        super.init();  
    }  
    Color getRandColor(int fc,int bc)  
    {  
        Random random = new Random();  
        if(fc>255) fc=255;  
        if(bc>255) bc=255;  
        int r=fc+random.nextInt(bc-fc);  
        int g=fc+random.nextInt(bc-fc);  
        int b=fc+random.nextInt(bc-fc);  
        return new Color(r,g,b);  
    }  
 
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
    {  
        response.setHeader("Pragma","No-cache");  
        response.setHeader("Cache-Control","no-cache");  
        response.setDateHeader("Expires", 0);  
        //表明生成的响应是图片  
        response.setContentType("image/jpeg");  
          
        int width=100, height=18;  
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
          
        Graphics g = image.getGraphics();  
        Random random = new Random();  
        g.setColor(getRandColor(200,250));  
        g.fillRect(1, 1, width-1, height-1);  
        g.setColor(new Color(102,102,102));  
        g.drawRect(0, 0, width-1, height-1);  
        g.setFont(mFont);  
 
        g.setColor(getRandColor(160,200));  
 
        //画随机线  
        for (int i=0;i<155;i++)  
        {  
            int x = random.nextInt(width - 1);  
            int y = random.nextInt(height - 1);  
            int xl = random.nextInt(6) + 1;  
            int yl = random.nextInt(12) + 1;  
            g.drawLine(x,y,x + xl,y + yl);  
        }  
 
        //从另一方向画随机线  
        for (int i = 0;i < 70;i++)  
        {  
            int x = random.nextInt(width - 1);  
            int y = random.nextInt(height - 1);  
            int xl = random.nextInt(12) + 1;  
            int yl = random.nextInt(6) + 1;  
            g.drawLine(x,y,x - xl,y - yl);  
        }  
 
        //生成随机数,并将随机数字转换为字母  
        String sRand="";  
        for (int i=0;i<6;i++)  
        {  
            int itmp = random.nextInt(26) + 65;  
            char ctmp = (char)itmp;  
            sRand += String.valueOf(ctmp);  
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));  
            g.drawString(String.valueOf(ctmp),15*i+10,16);  
        }  
 
        HttpSession session = request.getSession(true);  
        session.setAttribute("rand",sRand);  
        g.dispose();  
        ImageIO.write(image, "JPEG", response.getOutputStream());  
    }  
    public void destroy()  
    {  
    }  
}  

(3)页面显示

view plaincopy to clipboardprint?
<img src="authImage"/>  
<img src="authImage"/> 

二、使用纯jsp实现验证码

view plaincopy to clipboardprint?
<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"   
     contentType="image/jpeg" pageEncoding="UTF-8"%>  
 
 
<%  //设置页面不缓存  
   response.setHeader("Pragma","No-cache");  
   response.setHeader("Cahce-Control","no-cache");  
   response.setDateHeader("Expires",0);  
   //在内存中创建图片  
   int width=60,height=20;  
   BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);  
   //获取图形上下文  
   Graphics g= image.getGraphics();  
   //生成随机类  
   Random random= new Random();  
   //设置背景颜色  
   g.setColor(new Color(160,200,100));  
   g.fillRect(0,0,width,height);  
   //设置字体  
   g.setFont(new Font("Times New Roman",Font.PLAIN,18));  
   //随机产生50条干扰线,使图形中的验证码不易被其他的程序探测到  
    g.setColor(new Color(160,200,200));  
   for(int i=0;i<50;i++)  
   {  
     int x=random.nextInt(width);  
     int y=random.nextInt(height);  
     int x1=random.nextInt(width);  
     int y1=random.nextInt(height);  
     g.drawLine(x,y,x+x1,y+y1);  
   }  
   //随机产生验证码(6位数字)  
   String sRand="";  
   for(int i=0;i<6;i++)  
   {  
     String rand=String.valueOf(random.nextInt(10));  
     sRand+=rand;  
     //将验证码显示到图象  
     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));  
     g.drawString(rand,13*i+6,16);  
   }  
   session.setAttribute("rand",sRand);  //////将产生的验证码存储到sesson中  
   g.dispose();  
   ImageIO.write(image,"JPEG",response.getOutputStream());  
   out.clear(); //***********  
   out=pageContext.pushBody();//**********  
 %> 
<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
     contentType="image/jpeg" pageEncoding="UTF-8"%>


<%  //设置页面不缓存
   response.setHeader("Pragma","No-cache");
   response.setHeader("Cahce-Control","no-cache");
   response.setDateHeader("Expires",0);
   //在内存中创建图片
   int width=60,height=20;
   BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
   //获取图形上下文
   Graphics g= image.getGraphics();
   //生成随机类
   Random random= new Random();
   //设置背景颜色
   g.setColor(new Color(160,200,100));
   g.fillRect(0,0,width,height);
   //设置字体
   g.setFont(new Font("Times New Roman",Font.PLAIN,18));
   //随机产生50条干扰线,使图形中的验证码不易被其他的程序探测到
    g.setColor(new Color(160,200,200));
   for(int i=0;i<50;i++)
   {
     int x=random.nextInt(width);
     int y=random.nextInt(height);
     int x1=random.nextInt(width);
     int y1=random.nextInt(height);
     g.drawLine(x,y,x+x1,y+y1);
   }
   //随机产生验证码(6位数字)
   String sRand="";
   for(int i=0;i<6;i++)
   {
     String rand=String.valueOf(random.nextInt(10));
     sRand+=rand;
     //将验证码显示到图象
     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
     g.drawString(rand,13*i+6,16);
   }
   session.setAttribute("rand",sRand);  //////将产生的验证码存储到sesson中
   g.dispose();
   ImageIO.write(image,"JPEG",response.getOutputStream());
   out.clear(); //***********
   out=pageContext.pushBody();//**********
 %>
 

三、使用Struts2来实现验证码

(1)定义一个生成验证码的工具类

view plaincopy to clipboardprint?
package com.cn.hospital.util;  
 
import java.awt.Color;     
import java.awt.Font;     
import java.awt.Graphics;     
import java.awt.image.BufferedImage;     
import java.io.ByteArrayInputStream;     
import java.io.ByteArrayOutputStream;     
import java.util.Random;     
import javax.imageio.ImageIO;     
import javax.imageio.stream.ImageOutputStream;     
 
public class RandomNumUtil {  
 
    private ByteArrayInputStream image;//图像      
    private String str;//验证码      
        
    private RandomNumUtil(){      
    init();//初始化属性      
    }      
    /*    
    * 取得RandomNumUtil实例    
    */      
    public static RandomNumUtil Instance(){      
    return new RandomNumUtil();      
    }      
    /*    
    * 取得验证码图片    
    */      
    public ByteArrayInputStream getImage(){      
    return this.image;      
    }      
    /*    
    * 取得图片的验证码    
    */      
    public String getString(){      
    return this.str;      
    }      
        
    private void init() {      
    // 在内存中创建图象      
    int width=85, height=20;      
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);      
    // 获取图形上下文      
    Graphics g = image.getGraphics();      
    // 生成随机类      
    Random random = new Random();      
    // 设定背景色      
    g.setColor(getRandColor(200,250));      
    g.fillRect(0, 0, width, height);      
    // 设定字体      
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));      
    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到      
    g.setColor(getRandColor(160,200));      
    for (int i=0;i<155;i++)      
    {      
    int x = random.nextInt(width);      
    int y = random.nextInt(height);      
    int xl = random.nextInt(12);      
    int yl = random.nextInt(12);      
    g.drawLine(x,y,x+xl,y+yl);      
    }      
    // 取随机产生的认证码(6位数字)      
    String sRand="";      
    for (int i=0;i<6;i++){      
    String rand=String.valueOf(random.nextInt(10));      
    sRand+=rand;      
    // 将认证码显示到图象中      
    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));      
    // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成      
    g.drawString(rand,13*i+6,16);      
    }     
    //赋值验证码     
    this.str=sRand;      
        
    //图象生效      
    g.dispose();      
    ByteArrayInputStream input=null;      
    ByteArrayOutputStream output = new ByteArrayOutputStream();      
    try{      
    ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);      
    ImageIO.write(image, "JPEG", imageOut);      
    imageOut.close();      
    input = new ByteArrayInputStream(output.toByteArray());      
    }catch(Exception e){      
    System.out.println("验证码图片产生出现错误:"+e.toString());      
    }      
        
    this.image=input;/* 赋值图像 */      
    }      
    /*    
    * 给定范围获得随机颜色    
    */      
    private Color getRandColor(int fc,int bc){      
    Random random = new Random();      
    if(fc>255) fc=255;      
    if(bc>255) bc=255;      
    int r=fc+random.nextInt(bc-fc);      
    int g=fc+random.nextInt(bc-fc);      
    int b=fc+random.nextInt(bc-fc);      
    return new Color(r,g,b);      
    }     

package com.cn.hospital.util;

import java.awt.Color;  
import java.awt.Font;  
import java.awt.Graphics;  
import java.awt.image.BufferedImage;  
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.util.Random;  
import javax.imageio.ImageIO;  
import javax.imageio.stream.ImageOutputStream;  

public class RandomNumUtil {

 private ByteArrayInputStream image;//图像   
 private String str;//验证码   
  
 private RandomNumUtil(){   
 init();//初始化属性   
 }   
 /*  
 * 取得RandomNumUtil实例  
 */   
 public static RandomNumUtil Instance(){   
 return new RandomNumUtil();   
 }   
 /*  
 * 取得验证码图片  
 */   
 public ByteArrayInputStream getImage(){   
 return this.image;   
 }   
 /*  
 * 取得图片的验证码  
 */   
 public String getString(){   
 return this.str;   
 }   
  
 private void init() {   
 // 在内存中创建图象   
 int width=85, height=20;   
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
 // 获取图形上下文   
 Graphics g = image.getGraphics();   
 // 生成随机类   
 Random random = new Random();   
 // 设定背景色   
 g.setColor(getRandColor(200,250));   
 g.fillRect(0, 0, width, height);   
 // 设定字体   
 g.setFont(new Font("Times New Roman",Font.PLAIN,18));   
 // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到   
 g.setColor(getRandColor(160,200));   
 for (int i=0;i<155;i++)   
 {   
 int x = random.nextInt(width);   
 int y = random.nextInt(height);   
 int xl = random.nextInt(12);   
 int yl = random.nextInt(12);   
 g.drawLine(x,y,x+xl,y+yl);   
 }   
 // 取随机产生的认证码(6位数字)   
 String sRand="";   
 for (int i=0;i<6;i++){   
 String rand=String.valueOf(random.nextInt(10));   
 sRand+=rand;   
 // 将认证码显示到图象中   
 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));   
 // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成   
 g.drawString(rand,13*i+6,16);   
 }  
 //赋值验证码  
 this.str=sRand;   
  
 //图象生效   
 g.dispose();   
 ByteArrayInputStream input=null;   
 ByteArrayOutputStream output = new ByteArrayOutputStream();   
 try{   
 ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);   
 ImageIO.write(image, "JPEG", imageOut);   
 imageOut.close();   
 input = new ByteArrayInputStream(output.toByteArray());   
 }catch(Exception e){   
 System.out.println("验证码图片产生出现错误:"+e.toString());   
 }   
  
 this.image=input;/* 赋值图像 */   
 }   
 /*  
 * 给定范围获得随机颜色  
 */   
 private Color getRandColor(int fc,int bc){   
 Random random = new Random();   
 if(fc>255) fc=255;   
 if(bc>255) bc=255;   
 int r=fc+random.nextInt(bc-fc);   
 int g=fc+random.nextInt(bc-fc);   
 int b=fc+random.nextInt(bc-fc);   
 return new Color(r,g,b);   
 }  
}
 

(2)定义一个验证码输出的action

view plaincopy to clipboardprint?
package com.cn.hospital.action;  
 
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
 
import org.springframework.context.annotation.Scope;  
import org.springframework.stereotype.Controller;  
 
import com.cn.hospital.util.RandomCharUtil;  
import com.cn.hospital.util.RandomNumUtil;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionSupport;  
 
@Controller("utilAction")  
@Scope("prototype")  
public class UtilAction extends ActionSupport{  
      
    private static final long serialVersionUID = -7193209177116825032L;  
    private ByteArrayInputStream inputStream;   
      
    private int width;     
    private int height;     
    private int fontSize;     
    private int codeLength;   
    private int disturbType;  
      
    public String validNumGenerate() throws Exception{  
        RandomNumUtil rdnu=RandomNumUtil.Instance();      
        this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片      
        ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession      
        return SUCCESS;      
    }   
      
      
    public void setInputStream(ByteArrayInputStream inputStream) {      
        this.inputStream = inputStream;      
    }     
      
    public ByteArrayInputStream getInputStream() {      
        return inputStream;      
    }  
      
 

package com.cn.hospital.action;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.cn.hospital.util.RandomCharUtil;
import com.cn.hospital.util.RandomNumUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@Controller("utilAction")
@Scope("prototype")
public class UtilAction extends ActionSupport{
 
 private static final long serialVersionUID = -7193209177116825032L;
 private ByteArrayInputStream inputStream;
 
 private int width;  
    private int height;  
    private int fontSize;  
    private int codeLength;
    private int disturbType;
 
 public String validNumGenerate() throws Exception{
  RandomNumUtil rdnu=RandomNumUtil.Instance();   
  this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片   
  ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession   
  return SUCCESS;   
 }
 
 
 public void setInputStream(ByteArrayInputStream inputStream) {   
  this.inputStream = inputStream;   
 }  
 
 public ByteArrayInputStream getInputStream() {   
  return inputStream;   
 }
 

}
 

(3)struts.xml配置

view plaincopy to clipboardprint?
<!-- 产生随机验证码 -->  
        <action name="randNum" class="utilAction" method="validNumGenerate">        
           <result name="success" type="stream">        
                <param name="contentType">image/jpeg</param>        
                <param name="inputName">inputStream</param>        
           </result>     
        </action>  
<!-- 产生随机验证码 -->
  <action name="randNum" class="utilAction" method="validNumGenerate">     
        <result name="success" type="stream">     
             <param name="contentType">image/jpeg</param>     
             <param name="inputName">inputStream</param>     
        </result>  
     </action> 

四、小结

    对于java的web技术,归根究底还是在服务器端执行的servlet.从上面的三种不同实现中,我们很容易察觉到他们存在一个共同点,那就是返回浏览器端的contentType。

    servlet:使用response.setContentType(" ");方法来实现

    jsp:在<@ page contentType=" ">中来实现

    struts2:通过配置<param name="contentType"> </param>来实现

 

分享到:
评论

相关推荐

    servlet实现的图片验证码

    在实际应用中,你可能需要将这个Servlet集成到Spring Boot、Struts2或其他Java Web框架中,以适应项目的需求。同时,验证码的安全性也是一个重要的考虑因素,例如,可以考虑增加更复杂的字符集、增加字符数量、使用...

    Struts+jsp版的随机验证和servlet+jsp版的随机验证码

    在本项目中,我们讨论了两种实现方式:一种是基于Struts框架和JSP的验证码实现,另一种则是使用Servlet和JSP的解决方案。 首先,让我们来了解一下Struts+jsp版的随机验证码实现。Struts是一个开源的MVC(Model-View...

    3个java登录验证码的例子全网最全

    1. **Struts2拦截器**:自定义拦截器实现验证码的生成和验证。 2. **Action类**:处理登录请求的业务逻辑,包括校验验证码。 3. **Result类型**:可能使用了Struts2的FreeMarker模板引擎来渲染验证码图片。 4. **...

    JSP自动生成彩色验证码

    本项目重点在于使用JSP(Java Server Pages)技术自动生成彩色验证码,为用户提供一个视觉上更友好的验证体验。下面我们将深入探讨这个主题。 首先,验证码通常由一组随机字符组成,这些字符可以是数字、字母或其他...

    java验证码

    本主题主要围绕Java实现验证码的技术展开,包括基于Servlet和Struts2两种常见框架的实现方法。 首先,我们来看Servlet版的验证码实现。Servlet是Java EE中用于处理HTTP请求的服务器端组件。创建一个Servlet验证码,...

    java 教程包含(hibernate struts Spring Servlet JDBC 基础)

    Java教程涵盖了广泛的Web开发技术,包括Hibernate、Struts、Spring、Servlet和JDBC,以及JSP中的图片验证。这些技术都是构建高效、可扩展的企业级应用程序的基础。让我们逐一深入探讨这些知识点。 1. **JDBC(Java ...

    struts2+spring3验证码登录实例

    Struts2和Spring3是两种非常流行的Java Web开发框架,它们在企业级应用中被广泛使用。本实例结合这两种框架,构建了一个包含验证码功能的登录系统,旨在提供一个安全、可扩展的基础架构。 首先,Struts2是Apache...

    Java在线生成图像源码

    Java在线生成图像源码是一种常见的Web开发技术,它允许服务器动态创建并返回图像给客户端,例如用于验证码、数据图表或者自定义logo等场景。在Java中,我们可以利用Servlet或者Struts框架来实现这一功能。本项目是...

    随即数字验证码的生成(源码)

    3. **Struts**:是一个基于MVC设计模式的Web应用框架,简化了使用Java Servlet和JSP开发企业级Web应用的过程。 4. **Hibernate**:是一个对象关系映射(ORM)框架,它提供了数据库访问的便捷方式,将数据库操作转换...

    JSP使用验证码样例

    在IT行业中,Web开发是关键领域之一,而JavaServer Pages(JSP)是构建动态网站的常用技术。在这个“JSP使用验证码样例”中,我们聚焦于如何在登录过程中集成验证码来增强安全性,防止自动化的恶意登录尝试。验证码...

    java 用户注册登录验证码

    在Java编程语言中,用户注册和登录功能是任何应用程序的核心组成部分,而验证码的引入则可以增强...实际开发中,还需要结合具体的项目需求和框架,如Spring Boot、Struts或Spring MVC等,来进行更深入的设计和实现。

    Struts2注册源码

    可以使用第三方库如Servlet Filter或Struts2插件来生成和验证随机的验证码图片。在Action中,需要检查用户提交的验证码是否与服务器生成的验证码一致。 错误提示是用户体验的重要组成部分。Struts2提供了一套异常...

    仿CSDN样式(Struts2中文验证码源代码)

    总的来说,这个项目涵盖了Struts2框架的应用、Java Servlet的使用、图像处理、中文字符编码以及前端交互等多个技术领域,是学习和实践Web开发的好例子。通过这个项目,你可以深入理解Web应用的开发流程,提升你的...

    21天通学Java web开发 教程

    2. **Java Web入门**:Java Web开发基于Servlet和JSP技术,理解Servlet的生命周期和请求响应模型,以及JSP的脚本元素和指令是入门的关键。同时,会介绍如何在Tomcat服务器上部署和运行Java Web应用。 3. **Java ...

    Struts2+spring+hibernate(登录与注册模块)

    **Java Web** 是Java在Web领域的应用,包括Servlet和JSP等技术。在这个模块中: 1. **Servlet**:可以处理HTTP请求,配合Struts2或Spring MVC进行业务逻辑处理。 2. **JSP**:用于创建动态网页,显示用户界面,可以...

    Struts2.2.1关键jar包

    9. **Struts2的jar包**:压缩包中的jar文件可能包括Struts2的核心库(struts2-core.jar)、插件库(如struts2-spring-plugin.jar)、其他依赖库(如ognl.jar、freemarker.jar等)以及一些必要的Servlet容器相关的库...

    jsp+servlet实现最基本的注册登陆功能

    【标签】"jsp servlet"表明项目主要基于这两种技术,没有涉及其他高级框架,如Spring MVC或Struts,因此实现可能更为基础和直接。 【压缩包子文件的文件名称列表】中的"4c73409792164ec394677d4c8f41f47f"看起来像...

    JAVA WEB典型模块与项目实战大全

    3.4 实现spring、struts2.x和hibernate框架集成  3.5 小结  第2篇 典型模块开发  第4章 在线文本编辑器(fckeditor)  4.1 分析fckeditor在线文本编辑器  4.2 fckeditor在线文本编辑器初级应用  4.3 ...

    struts2讲义.doc

    随着时间的推移,Struts 1的一些设计和实现逐渐显得过时,尤其是在对动态网页的支持、性能优化以及灵活性方面。为了解决这些问题,Struts 2于2005年正式发布。Struts 2基于WebWork框架,并引入了拦截器(Interceptor...

    java web的相关知识

    Java Web相关知识涵盖了许多方面,它是开发Web应用程序的基础框架,主要涉及前端JavaScript、后端Java Servlet、JSP(JavaServer Pages)以及相关的服务器配置和框架技术。以下是对这些知识点的详细说明: 1. ...

Global site tag (gtag.js) - Google Analytics