- 浏览: 107458 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gogole_09:
zyandu 写道怎么不见大名鼎鼎的MySQL数据库喃 这个跟 ...
J2EE学习中一些值得研究的开源项目(TURN) -
zyandu:
怎么不见大名鼎鼎的MySQL数据库喃
J2EE学习中一些值得研究的开源项目(TURN) -
zcq100:
qq ^[1-9]\d{4-10}$
常用正则表达式[收藏] -
optimism_best:
收藏了,有用
常用正则表达式[收藏] -
likeblood:
这里非原创的文章会被和谐的还是看看发帖规则的好
常用正则表达式[收藏]
一、使用纯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>来实现
发表评论
-
安全沙箱[TURN]
2010-07-26 14:02 1503掌握安全模型 安 ... -
J2EE学习中一些值得研究的开源项目(TURN)
2010-06-22 11:10 1032这篇文章写在我研究J ... -
实用代码大全
2009-08-21 13:37 940事件源对象 event.srcElement.tagName ... -
jsp输出静态的图片
2009-08-21 12:21 12092个方式,jsp中直接输出 ... -
java中相对路径和绝对路径问题总结
2009-08-06 13:51 9151.基本概念的理解 ... -
开发人员Unix基础
2009-08-03 13:41 728Unix系统永远只会越来越多,开发人员就没必要特意学 ... -
SpringSide 团队的编码规范
2009-08-03 11:28 1107前言 本文档反 ... -
网站注入与防范的方法总结
2009-07-31 16:49 6681.首先我会检查一下服务器配置,重新配置一次服务器安全,可以参 ... -
小技巧给网页减肥-让网站访问提速
2009-07-31 14:13 837对于网站设计师来讲,网站的访问速度甚至比内容还重要。就算网站内 ... -
静态html文件js读取url参数
2009-07-30 14:47 1643静态html文件js读取url参数 一、字符串分割分析法。 ... -
SQL查询语句的各类联接
2009-07-30 14:30 867inner join 内联接(左右不为Null ... -
分享:java经典题目
2009-07-30 10:40 836l JBS 1.列举出 ... -
Java 三种模型,四种策略
2009-07-29 10:14 1127混淆事务模型与事务策略是一个常见的错误。本系列关于 事务策略 ... -
提升JSP应用程序的七大绝招
2009-07-28 09:43 730本文讲述了调 ... -
如何解决Java语言的10大问题
2009-07-28 09:40 9791、缺少闭包(closure) ... -
如何有效防止Java源程序被人偷窥
2009-07-28 09:34 927Java程序的源代码很容易被别人偷看,只要有一个反编译 ... -
HTTP请求模型简介
2009-07-24 09:50 784一、连接至Web服务器一 ... -
测试用例的几种设计方法
2009-07-23 12:19 1101一、等价类划分 等价类划分主要适用于单个输入条件,输入 ... -
JAVA强大的基础功能-------Java Reflection
2009-07-23 10:13 793Java Reflection-JAVA反射 Reflect ... -
浅谈Java中的垃圾回收机制
2009-07-21 13:41 11341.垃圾回收是一种动态 ...
相关推荐
在实际应用中,你可能需要将这个Servlet集成到Spring Boot、Struts2或其他Java Web框架中,以适应项目的需求。同时,验证码的安全性也是一个重要的考虑因素,例如,可以考虑增加更复杂的字符集、增加字符数量、使用...
在本项目中,我们讨论了两种实现方式:一种是基于Struts框架和JSP的验证码实现,另一种则是使用Servlet和JSP的解决方案。 首先,让我们来了解一下Struts+jsp版的随机验证码实现。Struts是一个开源的MVC(Model-View...
1. **Struts2拦截器**:自定义拦截器实现验证码的生成和验证。 2. **Action类**:处理登录请求的业务逻辑,包括校验验证码。 3. **Result类型**:可能使用了Struts2的FreeMarker模板引擎来渲染验证码图片。 4. **...
本项目重点在于使用JSP(Java Server Pages)技术自动生成彩色验证码,为用户提供一个视觉上更友好的验证体验。下面我们将深入探讨这个主题。 首先,验证码通常由一组随机字符组成,这些字符可以是数字、字母或其他...
本主题主要围绕Java实现验证码的技术展开,包括基于Servlet和Struts2两种常见框架的实现方法。 首先,我们来看Servlet版的验证码实现。Servlet是Java EE中用于处理HTTP请求的服务器端组件。创建一个Servlet验证码,...
Java教程涵盖了广泛的Web开发技术,包括Hibernate、Struts、Spring、Servlet和JDBC,以及JSP中的图片验证。这些技术都是构建高效、可扩展的企业级应用程序的基础。让我们逐一深入探讨这些知识点。 1. **JDBC(Java ...
Struts2和Spring3是两种非常流行的Java Web开发框架,它们在企业级应用中被广泛使用。本实例结合这两种框架,构建了一个包含验证码功能的登录系统,旨在提供一个安全、可扩展的基础架构。 首先,Struts2是Apache...
Java在线生成图像源码是一种常见的Web开发技术,它允许服务器动态创建并返回图像给客户端,例如用于验证码、数据图表或者自定义logo等场景。在Java中,我们可以利用Servlet或者Struts框架来实现这一功能。本项目是...
3. **Struts**:是一个基于MVC设计模式的Web应用框架,简化了使用Java Servlet和JSP开发企业级Web应用的过程。 4. **Hibernate**:是一个对象关系映射(ORM)框架,它提供了数据库访问的便捷方式,将数据库操作转换...
在IT行业中,Web开发是关键领域之一,而JavaServer Pages(JSP)是构建动态网站的常用技术。在这个“JSP使用验证码样例”中,我们聚焦于如何在登录过程中集成验证码来增强安全性,防止自动化的恶意登录尝试。验证码...
在Java编程语言中,用户注册和登录功能是任何应用程序的核心组成部分,而验证码的引入则可以增强...实际开发中,还需要结合具体的项目需求和框架,如Spring Boot、Struts或Spring MVC等,来进行更深入的设计和实现。
可以使用第三方库如Servlet Filter或Struts2插件来生成和验证随机的验证码图片。在Action中,需要检查用户提交的验证码是否与服务器生成的验证码一致。 错误提示是用户体验的重要组成部分。Struts2提供了一套异常...
总的来说,这个项目涵盖了Struts2框架的应用、Java Servlet的使用、图像处理、中文字符编码以及前端交互等多个技术领域,是学习和实践Web开发的好例子。通过这个项目,你可以深入理解Web应用的开发流程,提升你的...
2. **Java Web入门**:Java Web开发基于Servlet和JSP技术,理解Servlet的生命周期和请求响应模型,以及JSP的脚本元素和指令是入门的关键。同时,会介绍如何在Tomcat服务器上部署和运行Java Web应用。 3. **Java ...
**Java Web** 是Java在Web领域的应用,包括Servlet和JSP等技术。在这个模块中: 1. **Servlet**:可以处理HTTP请求,配合Struts2或Spring MVC进行业务逻辑处理。 2. **JSP**:用于创建动态网页,显示用户界面,可以...
9. **Struts2的jar包**:压缩包中的jar文件可能包括Struts2的核心库(struts2-core.jar)、插件库(如struts2-spring-plugin.jar)、其他依赖库(如ognl.jar、freemarker.jar等)以及一些必要的Servlet容器相关的库...
【标签】"jsp servlet"表明项目主要基于这两种技术,没有涉及其他高级框架,如Spring MVC或Struts,因此实现可能更为基础和直接。 【压缩包子文件的文件名称列表】中的"4c73409792164ec394677d4c8f41f47f"看起来像...
3.4 实现spring、struts2.x和hibernate框架集成 3.5 小结 第2篇 典型模块开发 第4章 在线文本编辑器(fckeditor) 4.1 分析fckeditor在线文本编辑器 4.2 fckeditor在线文本编辑器初级应用 4.3 ...
随着时间的推移,Struts 1的一些设计和实现逐渐显得过时,尤其是在对动态网页的支持、性能优化以及灵活性方面。为了解决这些问题,Struts 2于2005年正式发布。Struts 2基于WebWork框架,并引入了拦截器(Interceptor...
Java Web相关知识涵盖了许多方面,它是开发Web应用程序的基础框架,主要涉及前端JavaScript、后端Java Servlet、JSP(JavaServer Pages)以及相关的服务器配置和框架技术。以下是对这些知识点的详细说明: 1. ...