那么为了解决这个问题,现在比较方便的处理方法就是Struts2了。
冷知识:增删改查被很多人称作crud操作
web层中常见的框架:
Struts2SPRingMVC注意:这里使用的Struts版本是Struts2.5
下面具体代码你可以不用看明白意思,你只需要看效果,具体解释我会在文章结尾处讲到的。
public class pr01_he_action { public String execute(){ return "pr1"; }}但是要想访问我们的ation相关类我们还必须进行配置。配置的方法就是:首先创建struts2核心配置文件。
核心配置文件名称和位置都是固定的位置必须在src下面,名称为struts.xml注意,这里不是struts2.xml创建核心配置文件struts.xml后就是写内容了。注意我们写的是xml文件,所以这里会导入相关的约束。<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">这里的约束有一个专业名词叫做dtd约束。最后就是要配置我们的action这个处理类了。整体配置代码:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts> <package name="px" extends="struts-default" namespace="/"> <action name="lang" class="cn.domarvel.pr.pr01_he_action"> <result name="pr1">/pr1x.jsp</result> </action> </package></struts>剩下的就是让我们的项目跑起来了,对于访问浏览器的url地址方面,这里来个示例:http://localhost/项目名称/lang这样写在我们的标准浏览器能够完美访问,但是在其它的杂牌浏览器里面这样访问会出错的。所以我们这样改写我们的浏览器url访问地址:http://localhost/项目名称/lang.action但是哦,你会发现你在进行访问上面的路径的时候会出现404的错误,那就是你出现了最核心的错误。你想啊,Struts2是根据Filter来拦截用户请求实现的。你都没用进行拦截用户请求就直接让用户访问了,这样肯定会出现404啊。这个时候虽然Struts2已经帮我们写好了Filter,但是呢我们还没有进行配置Filter。配置Filter是固定的。<filter> <!-- 这里的filter-name不是固定的可以随便写,当然会写xml的人都知道 --> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping>我的pr1x.jsp页面是这样写的:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'pr1x.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keyWords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/CSS" href="styles.css"> --> </head> <body> <h4>It's Nice!! link successed!!</h4> </body></html>这里就能够正常进行相关的访问了。非常Nice!!!
值得回忆的是Servlet的创建:
在别人问我们怎么创建Servlet的时候,可能很多人都会说,右键new一个Servlet,这种回答是非常不正确的。我们应该说的是:写一个类继承一个类,我们一般继承的是HttpServlet,然后重写doGet()和doPost()方法。但是这样还没有完,我们必须还要让web容器找到我们写的这个Servlet功能。也就是配置web.xml。或者在Servlet的当前页面进行配置。上面我们已经成功进行访问了,但是具体过程我们还是不了解。
下面我们来进行讲解相关的访问执行过程。
首先用户在浏览器中输入url路径进行访问。Struts2中的过滤器拦截用户的访问请求。拦截用户请求后,Struts2就获取到访问路径,得到路径中的hello这个值,虽然我们这里访问的项目路径中的具体请求是hello.action,但是Struts2能够通过切割字符串来取得hello这个值。Struts2于是就到src目录下找到struts.xml这个文件,使用dom4j解析得到xml文件的内容。拿着hello这个值到xml文件中找到action标签,匹配name属性值是否一样。于是匹配成功后就在当前action标签中找另外一个属性的值,这个属性就是class,得到关于hello的处理类全路径。使用反射实现功能。下面是反射让action中的方法执行过程:Class clazz=Class.forName("action全路径");//得到名称是execute的方法Method m=clazz.getMethod("execute");//让方法跑起来。因为方法有返回值,所以要有个变量来接收。Object result=m.invoke();得到方法的返回值,找到当前action标签里面有result标签,匹配result标签里面的name属性值,匹配成功后,得到result标签里面的内容,然后根据内容跳转到相关页面。OK! 完毕!!
新闻热点
疑难解答