文档库 最新最全的文档下载
当前位置:文档库 › Struts2学习笔记

Struts2学习笔记

Struts2学习笔记
Struts2学习笔记

Struts2项目的构建与配置

1.配置struts.xml

(1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的

参考项目的struts.xml文件。

(2)主要的配置如下:

/hello.jsp

value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。

(3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。

(4)/hello.jsp action的name值与浏览器的访

问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。

2.配置web.xml

(1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的

参考项目的web.xml文件

(2)主要配置如下:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

3.配置Struts2的jar包

(1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的

WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。

Struts.xml的配置

1.package的属性与配置

(1)package的使用说明:类似于Java程序里的package,主要用于区分同名的action。在真

正的项目开发中package通常来区分不同的模块。例如:

(2)name属性:用于区分不同的package,此属性不能省略不写。

(3)extends属性:用于继承其他的package,继承了某个package就包含了某个package里

的所有配置,此属性可以省略不写,默认继承struts-default。

(4)namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性

为空时,该package里的action可以匹配浏览的任何请求的action。

(5)abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package

为抽象的。

2.action的属性与配置

(1)action的使用说明:action是配置在package里的,一个package可以配置多个action,

每一个action都可以处理一种请求,通常一个action就是一个含有public String execute()方法的Java类,根据execute方法的不同的返回值来返回相应的页面给用户。

例如:

(2)name属性:定义action的名称,也表示浏览器访问的路径。

(3)class属性:定义该action所对应的具体的Java类,其值是具体的Java类的路径。

(4)method属性:定义该action调用Java类的具体方法,调用的方法的返回类型必须是String

类型,如果用户没有定义该属性,则默认调用execute方法。

(5)method动态方法调用(BMI)

可以在浏览器地址栏里动态的指定调用action的那一个方法,如:

http://localhost:8080/Struts2/hello/hello!add。

调用格式为:http://…/action名!方法名

(6)使用通配符动态调用action及其方法并动态的返回页面

例如:

/hello_{1}.jsp

/{1}_{2}.jsp

第一个action所对应的Java类已确定是:com.lzw.HelloAction。但是对于不同的请求会调用该Java类里的不同的方法,并返回不同的页面,如:http://…/hello/hello_add,会调用add()方法,并返回hello_add.jsp页面;若想调用execute()方法,就会返回hello_execute.jsp页面,对应的请求就是:http://…/hello/hello_execute。

第二个action所对应的Java类并未确定,此action更为灵活,会根据不同的请求调用不同的action(即:Java类)以及其不同的方法,并返回不同的页面。如在浏览器的地址栏输入:http://…/hello/User_add,就会调用https://www.wendangku.net/doc/0317203158.html,erAction类里的add()方法,并返回User_add.jsp页面。

注意:在项目开发的时候一定要谨记“约定优于配置”原则,要约定好各个文件、方法以及类的起名规则!!!

(7)请求向action传递参数

例如:action里含有两个属性name与age,并且含有相应的get与set方法,则请求:http://…/hello/hello_add?name=lizhiwei&age=12,会把“lizhiwei”与“12”通过set方法赋值给name与age。当action里还有一个属性u而且这个属性不是基本类型,而是User类型(用户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值,则请求如下:

http:// …/hello/hello_add?name=lizhiwei&age=12&https://www.wendangku.net/doc/0317203158.html,=li&u.age=13,该请求会使得u的name属性值为li,age值为13。

注意:通过这种方法一定要定义好相应的set与get方法,否则无法传值!!!

(8)action实现ModelDriven接口,进行参数传递

例如:当一个action里含有一个属性u而且这个属性不是基本类型,而是User类型(用

户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值;由于action实现了ModelDriven接口,就会重写getModel()方法,此时在action里就不需要写属性u的set与get方法,但是需要用new来创建u 对象(而不是Struts2自动创建)。请求:http://…/hello/hello_add?name=li&age=13,会把u的name属性赋值为li,age属性赋值为13。重写getModel()方法的代码如下:public User getModel()

{

return u;

}

(9)参数传递的乱码简单解决方式:在struts.xml配置如下代码:

根据配置value的值来配置编码,但是请求方式应尽量使用post,避免使用get。

注意:此方式在某些Struts2版本中使用时并不能解决问题,是因为那些版本存在bug。

本次实验使用的是struts-2.3.14.1版本,能够成功解决乱码问题!

(10)action的简单数据验证

如果action需要对接收到的参数进行验证,而要把验证到的信息返回给页面显示,常用且简单的做法是让此action继承ActionSupport,并在方法里增加相应验证代码,例如:

public String add()

{

if(name==null || "".equals(name))

{

this.addFieldError("name", "参数不能为空!");

}

return"hello";

}

其中的this.addFieldError("name", "参数不能为空!")就是向Value Stack Contents里添加错误信息(也可以向一个参数名添加多个错误信息),添加的信息可以在页面里取出来。

在页面里取出错误信息的代码如下:

当错误信息不为空时,错误信息就会显示出来,但是要想使用这些标签必须还要在页面里添加以下代码: <%@taglib uri="/struts-tags"prefix="s"%>

(11)在action里访问Web元素(request、response、session、application等)

a)例如:用户登录后action把用户名放到session里,在action里的主要代码如下:

private Map session;

public String add()

{

session=ActionContext.getContext().getSession();//得到session

session.put("name", name);//设置值到session里

return"hello";

}

在前台JSP页面里取的name值得代码如下:

<%String name=(String)session.getAttribute("name");%>

<%=name %>

也可也使用Struts2的标签取得name值,具体代码如下:

注意:上面action里得到的session对象并不是真正服务器里的session对象,且该session对象是Map类型的,它只是Struts2模拟的session,只是Struts2能够把开发对此session的操作映射到真正的session上去。所以操作此session是等效的。b)第二种在action里取得Web元素的方法,此时的action要实现SessionAware接口,

并重写里的setSession方法,具体实现如下:(此种方式最常用)

public void setSession(Map arg0)

{session=arg0;}

c)第三种在action里取得Web元素的方法,此方法并不常用,代码如下:

private HttpServletRequest request=ServletActionContext.getRequest();

private HttpSession session=request.getSession();

private ServletContext application=session.getServletContext();

d)第四种在action里取得Web元素的方法,此方法是action实现ServletRequestAware

接口,重写如下方法:(此方法也不常用)

public void setServletRequest(HttpServletRequest arg0)

{

HttpServletRequest request=arg0;

HttpSession session=request.getSession();

ServletContext application=session.getServletContext();

}

(12)默认action的配置

例如下面的配置:

/UnderConstruction.jsp

使用了default-action-ref定义了默认的action,定义默认action后,当用户访问此

namespace下的不存在的action时,这些请求都会交给默认的action处理。

3.result的属性与配置

(1)使用说明:result是配置在action里的,用来定义action的处理后返回给用户的页面。

例如:

/hello/Error.jsp

(2)name属性:action处理请求会返回一个字符串与此属性的值匹配,若匹配成功服务器

就会返回该result所映射的页面。此属性的常用值有:"success、none、error、input、login";默认值是success。

(3)type属性:此属性的值与页面的跳转方式有关,此属性值有:chain、dispatcher、freemarker、

httpheader、redirect、redirect-action、stream、velocity、xslt、plaintext,其中最常用的有:dispatcher、redirect、chain、redirect-action。其具体的含义如下:

dispatcher:是默认值,表示服务器跳转,只能跳转到页面,不能是action。

redirect:客户端跳转到页面,不能是action。

chain:表示服务器跳转到一个action。

redirect-action:客户端跳转到action。

(4)配置全局的result,例如:

/Error.jsp

/Error.jsp

Logon!input

配置了global-results在一个package内的所有的action里就都含有了这些result的配置,相当于这个package里所有的action共用这些result。

(5)利用result动态的返回结果集,配置如下:

${r}

使用“$”与“{}”来动态的得到跳转的页面路径,其中的参数“r”就是action里的

一个属性,此action对应的HelloAction.java文件的主要代码如下:

public String add()

{

r= "/index.jsp";

return SUCCESS;

}

其实当action执行add方法时使得r的值为“/index.jsp”,执行完毕后该action所有属性都保存到了Value Stack Contents之中,而result里的“${r}”会取到r的值,就会跳转到index.jsp页面了。

(6)带参数的结果集,类似于上例,配置如下:

/login.jsp?name=${r}

其实现的原理与上例相同,但是值得注意的是:只有当使用客户端跳转时才要传递参数。

4.超链接路径问题的说明

(1)问题的引出

action的配置如下:

/hello.jsp

helo.jsp页面的主要代码如下:

进入index.jsp

与hello.jsp文件同一位置的index.jsp文件的主要代码如下:

index

在浏览器地址栏输入“http://localhost:8080/Struts2/hello/hello”访问hello.jsp 效果如下:

点击超链接,效果如下:(注意浏览器的地址栏)

出现了404错误!由于namespace="/hello"把hello.jsp的路径映射成…/hello/hello,从而导致hello.jsp中的超链接路径也成了…/hello/index.jsp,也就出现404地址错误了。(2)解决此路径问题的方法

只要使用了绝对路径便可解决该问题,具体做法是在hello.jsp文件中添加如下代码:<%

String path = request.getContextPath();

String basePath =

request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

此时的basePath的值就是当前的文件路径,在使用超链接时只需要把该值加到前面即可,例如:

">进入index.jsp

还可以使用base标签更为方便的解决问题,只需要在head标签里加入如下代码:

此时超链接的写法不变还是进入index.jsp

5.include的属性与配置

(1)使用说明:使用include可以把struts.xml文件模块化,每个模块都可以是一个xml

配置文件,使用include把其中的每个模块导入到struts.xml文件里,便于项目开发时的模块的划分与分配。例如:

(2)file属性:其值是需要导入的配置文件地址。

6.声明式的异常处理

(1)使用说明:使用exception-mapping配置action的异常处理页面。

/Login.action

/DataAccess.jsp

(2)exception属性:配置异常的类型,此类型应该和action程序抛出的异常类型相对应。

(3)result属性:此类型的值表示出异常后的返回页面位置,与相应的result的配置对应。

(4)在配置时为每个action都配置异常实在太繁琐,这时就可以使用全局的异常处理,如

下(该配置应放在package里):

7.i18n国际化

(1)action级别的国际化

使用action级别的国际化,该action必须继承ActionSupport,而且国际化资源文件必须与该action在同一目录下,文件名也必须是该action的类名加后缀(如:LoginAction_en_US.properties);取得该资源文件的方式是在JSP页面里使用以下语句:,其实该代码是调用了当前action的getText方法。

(2)包(package)级别的国际化

使用包级别的国际化,国际化资源文件必须在该包的目录下,文件名也必须是类似package_en_US.properties的形式,前缀必须是package。

(3)APP级别的国际化

使用APP级别的国际化,国际化资源文件必须与struts.xml配置文件在同一目录下,文件名可以任意,但必须在struts.xml文件里配置,例如:国际化资源文件名为lzwAPP_en_US.properties,则配置如下:

value="lzwAPP"/>,其value值就是国际化资源文件名的前缀。取得该资源文件的方式是在JSP页面里使用以下语句:

(4)向国际化文件里传参数

例如:国际化资源文件里有“welcome.msg=欢迎{0}登录,{1}”,则可以向{0}{1}里传参数,代码如下:

上午好!

若user的值为“李志伟”,则前台的显示效果:欢迎李志伟登录,上午好!

(5)动态的语言切换

实现方法:在页面地址后传递一个参数就可以实现语言的切换。

例如:http://…/login?request_locale=en_US(切换到英语)

8.拦截器

(1)说明:拦截器就是在请求交给action前的拦截处理。

(2)自定义拦截器

自定义拦截器时可以继承Interceptor类,实例程序如下:

public class ApplicationInterceptor implements Interceptor

{

public String intercept(ActionInvocation invocation) throws Exception

{

//编写自己的拦截处理代码

return invocation.invoke();

}

public void destroy()

{

}

public void init()

{

}

}

(3)拦截器的配置

在package里配置拦截器,代码如下:

在action里使用拦截器时,代码如:

system/log_list.jsp

注意:在action中要使用自定义的拦截器,必须加上以下代码,否则只使用了自定义的拦截器,未使用系统的拦截器。 9.类型转换

(1)说明:类型转换是http请求向action里的属性(成员变量)传值时,其值的类型的转

换过程。

(2)默认转换

a)若action里有一个int型的age成员变量,则http请求是:

http://…/action名?age=20

b)若action里有一个Date型的d成员变量,则http请求是:

http://…/action名?d=2013-08-04 16:12:33,

或者是http://…/action名?d=2013-08-04

在JSP页面里格式化显示如下:

c)若action里有一个List型的interests成员变量,则http请求是:

http://…/action名?interests=english&interests=math

d)若action里有一个Map型的m成员变量,则http请求是:

http://…/action名?m['a']=aaa&m['b']=bbb

(3)自定义转换器(很少用)

a)当action里的成员变量是用户自定义的类型时,则用户要相应的编写转换器。

b)编写自定义转换器需要继承DefaultTypeConverter或StrutsTypeConverter类,

示例程序如下:

继承DefaultTypeConverter:

public class MyPointConverter extends DefaultTypeConverter

{

@Override

public Object convertValue(Object value, Class toType)

{

if(toType == Point.class)

{

Point p = new Point();

String[] strs = (String[])value;

String[] xy = strs[0].split(",");

p.x = Integer.parseInt(xy[0]);

p.y = Integer.parseInt(xy[1]);

return p;

}

if(toType == String.class)

{

return value.toString();

}

return super.convertValue(value, toType);

}

}

继承StrutsTypeConverter:

public class MyPointConverter extends StrutsTypeConverter

{

@Override

public Object convertFromString(Map context, String[] values, Class toClass)

{

Point p = new Point();

String[] strs = (String[])values;

String[] xy = strs[0].split(",");

p.x = Integer.parseInt(xy[0]);

p.y = Integer.parseInt(xy[1]);

return p;

}

@Override

public String convertToString(Map context, Object o)

{

return o.toString();

}

}

c)编写自定义转换器后还要进行注册才能正常转换,注册方式有两种:局部注册、全

局注册(常用)。

局部注册的方法:创建局部注册文件,且该文件要与相应的action放在同一目录

下,文件名规定是:action名-conversion.properties。文件内容应是:action

里成员变量名=自定义转换器名(使用类点包名)。例p=com.lzw.MyPointConverter。

全局注册的方法:创建全局注册文件,且该文件要与struts.xml文件放在同一目

录下,文件名规定是:xwork-conversion.properties。文件内容应是:类型名=自

定义转换器名(使用类点包名)。例:com.lzw.Point=com.lzw.MyPointConverter。

OGNL表达式

1.访问值栈中action的属性

(1)OGNL表达式一般会与Struts的标签一起使用,且OGNL表达式一般会出现在标签的属性

值。例如:,中name就是OGNL表达式。

(2)访问action的普通属性,例如:,就是访问action的String

类型的name属性。

(3)访问action的对象属性,例如:,就是访问action的User

类型(用户自定义类型)的u属性中的name属性。例如:,就是访问action的User类型(用户自定义类型)的u属性中的cat属性中的name属性(cat是用户定义的Cat类型的)。

2.访问方法

(1)访问action的对象属性的方法,例如:,就是访

问action的User类型(用户自定义类型)的u属性中的name属性的length方法。(2)访问action的方法,例如:,就是访问action的sleep

方法,则在JSP页面里输出该方法的返回值。

(3)访问静态方法,例如:,就是访问

com.lzw.HelloAction类的静态eat()方法!

(4)访问静态属性,例如:,就是访问

com.lzw.HelloAction类的静态HELLO属性!

(5)访问Math类的静态方法,例如:,就是在访问Math类

的max方法。

(6)访问构造方法创建对象,例如:,就创建

了HelloAction对象,并在页面显示此对象的toString方法。

3.访问集合

(1)访问List,当action的某个属性是List类型时,访问该List类型的属性有如下访问

方式:

访问该List:

访问该List的某个元素:

访问该List的某个属性的集合:

访问该List的某个属性的集合中的特定值:

(2)访问Set,当action的某个属性是Set类型时,访问该Set类型的属性有如下访问方式:

访问该Set:

注意:与List不同不能用如下代码访问访问该Set的某个元素,因为Set是没有顺序的!代码:

(3)访问Map,当action的某个属性是Map类型时,访问该Map类型的属性有如下访问方式:

访问该Map:

访问Map中的某个元素key对应的value:

(“lizhiwei”是Map里的某个元素的key值,此操作可以取得对应的value)

访问Map中的所有key:

访问Map中的所有value:

访问Map容器的大小:

4.投影(过滤的作用)

(1)得到users中age等于1的User集合:

(2)得到users中age大于18的User集合的第一个元素:

(3)得到users中age大于18的User集合的最后一个元素:

(4)判断users中age大于30的User集合是否存在(存在返回true,否则返回false):

5.使用“[]”访问元素

(1)使用“[]”访问的是值栈(Value Stack Contents)里的类容,例如:

value="[0]"/>,此处的“0”表示值栈里的第0个位置的对象,该操作会取到该对象的值,但页面上显示的是该对象的toString方法的返回值。

(2)需要注意的是:值栈的第0个位置是存放当前的action的对象(有时不止一个),值栈

的最后一个位置就是栈底。

Struts2的标签

1.通用标签

(1)property标签

property标签是用来取值的,它有value、escape、default三个属性,其值类型分别是:Object、Boolean、String。其使用方法如下:

a)该代码会取得值栈里名为name的值,若

取不到则默认显示“李志伟”。

b)该代码会直接取得单引号里的“name”字符串。

c)该代码会直接取得单引号里的

“name


”字符串,并且会把“
”以HTML标签的形式显示。escape默认

值是true,表示不会把取到的字符串里的HTML元素以HTML的形式显示。

(2)set标签

set标签使用来设置变量用的,它有var、value、scope三个属性,其值类型分别是:Object、String、String。scope的取值有:application、session、 request、 page、和 action。使用方法如下:

a)该代码设置了一个名为name,值为“李志伟”

的变量,该值的默认范围是:request和ActionContext,也可以使用scope属性

来设置变量的范围。

b)该代码设置了一个名为name,值为

“李志伟”的变量,且该变量的有效范围是page。取值时可使用以下代码取得值:<%=pageContext.getAttribute("name") %>。

(3)bean标签

bean标签是用来在页面中创建对象的,它有var、name两个属性,其类型都是String。

使用方法如下:

以上代码创建了一个名为u,类型为User(用户自定义类型)的对象,并且设置的该对象的name属性值为“李志伟”,age属性值为“20”。

(4)include标签

include标签是用来倒入外部文件的,它只有value属性,该属性是String类型的。使用方法如下:

a)该代码倒入了in.html里的代码到当前位置了。

b) 该代码也倒入

了in.html里的代码到当前位置了,只不过这次是动态的倒入。因为“%{}”使得

此时value的值类型变成Object(即其值可以使用OGNL表达式),所以使用“#file”

可以取得变量file的值“in.html”,即动态的倒入文件。

(5)fielderror标签

fielderror标签是用来取得action里对数据验证时设置的验证结果信息的。使用方法如下:

该代码取得一个action设置的名为name的数据的验证结果信息,若action未设置该代码也不会有任何的显示效果。action的数据验证结果信息设置方式如:this.addFieldError("name", "参数不能为空!");。

2.控制标签

(1)if、elseif、else标签

if标签是判断分支语句,它有一个test属性是Boolean类型。它常于elseif、else 同时使用。使用方法如下:

年龄出错!

未成年!

已成年!

(2)iterator标签

iterator标签用于遍历集合,它有var、value、status、三个属性。value是表示要遍历的集合,var表示遍历集合的当前值,status表示当前遍历的状态。使用方法如下:

当前值:

遍历过的元素总数:

当前元素索引:

当前元素个数是奇数:

当前元素个数是偶数:

当前是第一个元素:

当前是最后一个元素:

3.$、#、%的区别

(1)$:用于i18n和struts配置文件

(2)#:用于取得ActionContext里的值。

(3)%:将原本的文本属性(即字符串)解析为ognl表达式,对原本就是ognl表达式的属

性不起作用。

struts1学习笔记

struts1开发学习笔记 使用一个简单的例子记录struts1开发过程。 0、 描述 主要功能描述: index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。 newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。 ProductAction.java 是处理逻辑的action 简单描述流程图: 1、 构建环境 在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add sruts capapibality ,弹出界面,选择struts1.2支持。如下图所示: 添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件: /WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。 2、 代码编写

2)创建工具类Util.java,从数据库连接池中获得连接。需要两个步骤 第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源, 第二步:在util类中读取配置获得连接,util.java如下:

3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml 配置中内容。EncodingFilter.java的内容如下:

4)修改web.xml,指定首页为index.jsp。文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。

达内学习心得:浅谈java学习方法和后期面试技巧

达内学习心得:浅谈java学习方法和后期面试技巧 获奖学员:尹灿 所获奖项:三等奖 内容: 浅谈java学习方法以及后期面试技巧. 时光飞逝,本人2月底份班级,现已毕业,现在此发表一些学习感受以及学习技巧,本篇文章纯手打,大家可以参考一下。 下面简单列举一下大家学习java的一个系统知识点的一些介绍(按照TTS6上面的顺序来的): 一:java基础部分:java基础的时候,有些知识点是非常重要的,比如循环系列。For,while,do-while.这方面只要大家用心点基本没什么难点。 二:面向对象:oop面向对象的时候,偏重理论,相信这方面的文章也很多,大家可以多看看,在这就不说了。重点掌握面向对象的三大特征和基本原理。 三:java核心一:这方面主要偏重API,所以在学习了这章的时候,一定要对照API去学习,多看API,主要就是方法多,string和集合的方法最为重要。后面将为大家提供本人整理的部分笔记。 四:java核心二:主要讲解了异常,线程和IO流,其实个人认为重点掌握线程就行,对于流和异常多写就行,线程偏重理论也最为重要。 五:oracle数据库方面:建议学习数据库的时候大家一定要端正态度,数据库极为重要,本人当时在学习这个的时候,一直以为数据库只是为了增删改查,故没有认真学习,后期面试的时候吃了不少亏,因为现在软件公司对数据库的要求跟java一样重要,基本都会单独一张笔试题笔试数据库。 六:JDBC/XML系列:JDBC主要是3个核心接口(Connection) (Statement) (ResultSet)的使用,大家在学习的时候,熟练运用3接口,jdbc的原理也相当重要,虽然后期学习了HIbernate 之后,JDBC不需要再用,但其底层原理还是JDBC,而且现在很多软件公司不一定会用到Hibernate框架,所以建议大家还是把“本”学好,XML:重点掌握解析互换的2个核心接口方法。 七:HTML/CSS/JS:对于这个,本人相当纠结,因为这个有点偏向于美工的意思,所以后期想从事后台开发的同学一般不会太重视,但是现在都是web项目,而且很多软件公司并不是把许多这方面的事情交给美工(除非是那种有很高要求的静态页面),而且现在html代码都是在jsp里面写,所以建议还是好好学学,因为公司不会让一个美工去专门为你写一些简单的html代码,包括js!这章其实不难,就是属性方法知识点比较多,大家多记记,多写写,重在多练! 八:Servlet/Jsp:如果想从事web和b/s开发(现在基本都是web和b/s开发),这章极为重要,服务器的访问以及配置。tomcat的使用都在这一章,虽然后期struts框架的学习简化了servlet

Struts2学习笔记

Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下: /hello.jsp value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。 (3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。 (4)/hello.jsp action的name值与浏览器的访 问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。 2.配置web.xml (1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的web.xml文件 (2)主要配置如下: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 3.配置Struts2的jar包 (1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的 WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。 Struts.xml的配置 1.package的属性与配置 (1)package的使用说明:类似于Java程序里的package,主要用于区分同名的action。在真 正的项目开发中package通常来区分不同的模块。例如: (2)name属性:用于区分不同的package,此属性不能省略不写。 (3)extends属性:用于继承其他的package,继承了某个package就包含了某个package里 的所有配置,此属性可以省略不写,默认继承struts-default。 (4)namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性 为空时,该package里的action可以匹配浏览的任何请求的action。 (5)abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package

Struts2+Hibernate开发笔记

Struts2 + Hibernate开发笔记(一) 由于开发任务紧张,因为这里的开发笔记,仅用于记录遇到的几个struts2和hibernate结合开发的现象.不对其做分析. 1. 在使用struts2时,页面和action之间的传值 这是struts2和struts1最大的区别. Struts2中,action和jsp页面之间的信息交互,是通过action中定义的成员变量来实现的. 例如,我在一个名为EstateAction的类中有如下定义 public class CityAction extends BaseAction { private MthCity mthCity ; private String cityName; private Long cityId private int couter; public String loadCity() throws DataAccessException, BaseException{ counter ++; return "city"; } } 然后,这里上面的类中的成员类MthCity的定义如下 public class MthCity implements java.io.Serializable { private Long cityId private String cityName; public MthCity() { public Long getCityId() { return this.cityId; } public void setCityId(Long cityId) { this.cityId = cityId; public String getCityName() { return this.cityName; } public void setCityName(String cityName) { this.cityName = cityName; } } 这是一个Hibatenate使用的数据对象POJO类. 有了这两个类后,我们来看看Struts2的Action和JSP页面之间是如何交互的 一. JSP -> Action Jsp页面 以下是一个jsp页面submit.jsp.这个页面只有一个功能,就是向struts提交申请 <%@ page language="java" contentType="text/html; charset=gbk"%> <%@ include file="/common/taglibs.jsp"%>

JavaEE课堂笔记f

1.Struts2在jsp页面中使用标签实现对集合的迭代,其中var属性表示要迭代的集合对象。标签实现下拉列表的功能,其中listKey属性表示其生成的HTML代码option 标签的value,listValue属性表示用作字面显示的值。标签会定义一个新的Bean,而scope属性指定将这个Bean放到相应的作用域。 2.MVC设计模式包括Model(模型)、View(视图)和Controller(控制器)三个层。Model 层一般是指Java Bean,View层一般是用jsp页面实现,Controller是控制跳转的,一般用Servlet 或相似功能的组件实现。而Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter过滤器。 3.Hibernate配置文件中包括了数据库连接信息、数据库方言、其他属性等信息,不包括数据库表和实体类的ORM信息。在众多属性中,show_sql属性可以设置是否在控制台显示最终生成的SQL语句。 4.Struts2全局国际化,在创建资源文件后需要在struts.xml配置文件中添加对这些资源文件基本名的引用。 5.Spring的面向方面编程可以让我们将程序中涉及的分散的公用问题集中解决。 6.Http协议是一种无状态的协议,它不能记录用户的状态。我们可以通过get和post方法发送数据,其中get方法对请求参数有长度的限制,而post方法没有。 7.j sp中的EL可以访问JavaBean中存储的数据,EL表达式包括requestScope、sessionScope、applicationScope、param、pageContext等隐式对象。在Struts2中,EL表达式可以直接访问Action Bean中属性的值。 8.HQL和SQL语法相似,但HQL是面向对象的,而SQL是面向关系型数据库的。HQL的关键字不区别大小写,而语句中的实体类名、对象名、属性名等都是区别大小写的,这一点和Java语言类似。 9.Servlet在加载后的生命周期分为实例化、初始化、服务和销毁四个过程。 10.JSP的标准动作能实现页面转发的功能。 11.Servlet中的PrintWriter对象可以输出信息,该类型的对象可以通过response.getWriter()方法取得。 12.DWR一个能帮助我们简化Ajax开发的开源框架,在使用时,需要在dwr.xml配置文件中为JavaScript脚本暴露相应的Java类。 13.在struts.xml配置文件中标签用于配置要转向的下一个目标页面。 14.Hibernate将JDBC作了轻量级封装,使得Java程序员可以随心所欲的使用面向对象的编程思想来操纵数据库,但其本质上还是使用JDBC去和数据库进行交互。 15.SSH是JavaEE开发的经典搭配,Spring框架可以对其他框架进行整合,持久化层更可以有多种选择,除了Hibernate外,像MyBatis这样的开源框架也很受欢迎。 16在软件设计上Struts2没有跟Servlet API或struts有着紧密的耦合,因此在Struts2中可以不必使用Servlet API所提供的类和接口,但如果要使用,也可以通过多种方式实现(ServletActionContext类或实现相应接口)。同时Struts2的Action类也不用必须继承或实现struts框架提供的任何类或接口。 17Servlet API中,HttpServletResponse接口的sendRedirect()方法可以将浏览器重定向到另一个URL。而HttpServletRequest接口的getSession()方法可以取得本次会话的HttpSession类型的对象,HttpServletRequest接口的getParameter()方法可以获取客户端请求参数的数据。18依赖注入(DI)是一种开发模式,可以解除或减轻各组件之间相互依赖,相互制约的关系。

jfinal学习笔记

项目:ht为了防止tp:/和谐/yun.baidu.co请去掉m/share/汉字link?shareid=446316952&uk=672642110 2014年12月9日星期二(jfinal) 今天是第一天入职,学习jfinal 从表中可以看出,JFinal访问一个确切的Action(Action定义见 3.2节)需要使用controllerKey与method 来精确定位,当method 省略时默认值为index。urlPara 是为了能在url 中携带参数值,urlPara 可以在一次请求中同时携带多个值,JFinal 默认使用减号“-”来分隔多个值(可通过constants. setUrlParaSeparator(String)设置分隔符),在Controller 中可以通过getPara(int index)分别取出这些值。controllerKey、method、urlPara这三部分必须使用正斜杠“/”分隔。 注意,controllerKey 自身也可以包含正斜杠“/”,如“/admin/article”,这样实质上实现了struts2的namespace功能。 记忆技巧:第一个参数为String 类型的将获取表单或url 中问号挂参的域值。第一个参数为int 或无参数的将获取urlPara 中的参数值。

2014年12月10日星期三 1.注意打字质量,几次打错字而出错! 2.理清逻辑思路,居然出现没有配置web.xml 3.对陌生的质疑使我畏葸不前,要自信! 1.关于add

1.首先,页面是添加

姓名:${studentnameMsg!}${studentnameLMsg!}
2.到web.xml jfinal com.jfinal.core.JFinalFilter configClass com.demo.config.DemonConfig jfinal /* 3.到demonconfig /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", StudentController.class); me.add("/student", StudentController.class); //me.add("/classes", StudentController.class); } 4.到StudentController的save方法 @Before(StudentValidator.class) public void save() { Student student = getModel(Student.class); student.save(); forwardAction("/student"); } 5.被StudentValidator拦截 protected void validate(Controller c) { // 验证表单域name,返回信息key,返回信息value validateRequiredString("student.studentname", "studentnameMsg", "请输入学生名册"); 这里也可以用正则验证!validateRegex(field, regExpression, errorKey, errorMessage) }

MyEclipse开发Struts2过程

MyEclipse开发Struts2过程 Struts2是Struts1.x的升级换代产品,但是并没有继承Struts1.x的思想和操作模式,而是一个完全不同的实现方式,所以即使学会了Struts1.x还是得从头学习Struts2,但是当你学会了Struts2后会发现这个产品对编程及配置有了很大的简化,使得程序员将更多的精力集中到业务逻辑编程方面,下面就在MyEclipse8.5M1平台下如何开发基于Struts2的Web应用系统的MVC模式中的VC部分作以简要的描述,M部分还是可以采用其他框架实现,例如Spring+Hibernate等。 (一)创建基于Struts2的Web项目 从MyEclipse的菜单中一次选择File\New\Web Project,在弹窗中填写该项目的名称信息,并且选择J2EE的版本,如图:

(二)添加Struts2支持 将鼠标定位到Package Explorer视窗的该项目名称上,单击右键,在弹出的菜单上依次选择MyEclipse\Add Struts Capabilities,在弹窗中选择Struts的版本为Struts2.x,单击“Next”按钮进入下一个窗口,选择要加入的支持类库,库的选择视项目需求而定,可以在后续开发过程中陆续加入,这里只选择Struts2 Core Libraries。完成这些操作后发现系统在src目录下添加了一个配置文件struts.xml,这个文件就是Struts2的核心配置文件,后续的操作都在此文件中进行。 (三)编写JSP页面代码 这里注意尽量使用Struts2的标签来编写JSP代码,所以要在页面代码开始部分引入标签库,即添加该行代码<%@ taglib prefix="html" uri="/struts-tags"%>,MyEclipse8.5M1目前还不支持基于Struts2的JSP模板,所以在新建JSP页面代码的时候,先选择基于Struts1.x模板,然后再手动修改,也就是把该页面代码中

JAVA基础学习心得

java基础学习心得 第一篇:java学习需要什么基础第二篇:java 基础要点总结学习java必看第三篇:java学习心得笔记第四篇:java学习心得第五篇:关于java学习的一点心得体会更多相关范文 java学习需要什么基础 随着java这种语言的广泛运用,越来越多从事开发的人员开始学习接触这门课程,那么,java学习需要什么基础?java刚刚入门应该接触哪些知识呢?java入门应该学习什么内容呢? 首先要说明的,java有三个大的方向(j2se,j2me,j2ee),走不同的方向可能学的技术和要花费的时间可能有所不同。我是搞web方向的(j2ee),我学java除了以前一些简单的c语言语法外,没有太多的编程基础,我以前一直认为编程要有很强的数学和英语功底,现在看来这也不是必需,只要有一定的逻辑思维能力和掌握一些常见的计算机词汇,还需要具备一定的自学能力,因为软件开发工作是需要不断学习的。 其次,我想说下我的学习过程,我在网上下载了java教学视频,将java基础从头到尾看了一遍,将上面的代码基本上跟着敲了一遍,然后我把java基础的书看了一遍,一本书看完包括上面的习题大概做一遍差不多一个月。这时你对java的语法和基本知识应该都有比较充分的认识和了解了。 然后,再做一些小项目,跟着视频上的步骤做,最好能自己独立再写写,能写多少是多少。一般网上比较新的的项目库很不好找,因

为项目库是需要实时更新以保证适合市场需要的,而它的升级和更新是需要钱的,所以去报一个培训中心利用它强大的项目库进行实战操作是个很好的选择。 操作一段时间之后,你对java已经有了一定的感觉,就要开始选择你的发展方向了。我选择了j2ee,如果你也是想走这条路,你可以接着看关于j2ee的视频,先是html+js+css,然后jsp+serverlet,再看struts+spring+hibernate等一些框架。同时可以看一些大的培训机构的关于设计模式的视频,最好是it牛人录制的,当然数据库也得学下,然后加上做项目的经验累积,半年就差不多可以出去工作了。 如果你做其他方向的话我不是很了解。再说下我个人的看法,j2me 和j2se好像前景没j2ee好,不过我有同事是做android平台开发的,这个不需要j2ee的知识,你可以去买本android的看看,这个方向貌似很有前途,你应该也常听说android平台的手机,如果走这方向可以再学一下linux知识和c的知识,因为这个平台底层是这些,这也不是必要。 说了这么多希望对大家能有所帮助。最后再说一句,学东西,最重要的是动手,只有动手做了才能深深的理解,牢牢的记住。 java基础 1.java程序是由1个或者n个class组成的程序 2.编写---javac进行编译------java进行执行

java的学习计划

java的学习计划 篇一:最新java学习计划 java笔记-从菜鸟到j2se 精通j2ee的高手之路(对初学java的人有用) 进来的所有人,不管你是不是懂点java皮毛,还是一窍不通的,如果你选择看完我下面的话和每天下载我的笔记代码观看学习。那相信08年底既是属于我的成功也是属于你的成功。对了,不屑一顾的到此可以离开了。先说下我的学习的东西和我准备如何学习的计划。目前手里购买了几套视频教程,删减下来最后定为两套必学的材料。(马士兵的所有教程和 MLDN所有教程) 12月份买了 些盗版光盘,细读之后安排了如下计划。 08年学习计划方案 07年9月底到08年2月初,通过各类途径,以完成对j2ee各类知识的初步了解. 现开始制定最终冲刺方案,该方案开始时间2月中旬,结束时间9月初.较去年vc最终方案多了 2月. 具体定制如下: 一:4个月基础方案 用1个半月时间,对11章节基础和基础相关视频一个一

个复习并完成里面知识代码.同时对大量的知识点做好相应的笔记,包括本子上和电脑上的笔记.务必达到每个知识点说道就能知道,不知 道也能立刻找到.注意配合中文帮助使用. 利用半个月时间,对在线聊天系统视频复习,做到每一个章节都能很快想到以前的知识点.如果不 熟悉一定要回头复习11章节内容. 坦克大战包括3部分,合理安排复习时间,以求完全精通代码流程.时间不得超过1个半月,此部分 必须建立在前面两项学习稳固之后方可学习. 最后半个月结合以前对图形游戏的理解,完成自我设计的,自我所能掌握的知识内的一款在线图 形游戏. 注:4个月时间务必做到对java 基础的全面运用,对eclipse的熟练操作,对java正式规格书写 完美. 二:2个半月web学习方案 3到5天时间,对oracle MySQL数据库的复习,做到对简单的命令直接背下来,繁琐的命令找到帮 助手册或自己写下来,以供日后使用时直接查找. 10天时间,复习jsp_servlet视频,结束对eclipse使用. 半个月时间学习lomboz,针对JDBC_MySQL_BBS项目.务

Struts2_day03笔记

Struts2_day03 前一天内容 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面和局部结果页面 (2)result标签type属性 - type属性值: -- 默认值是dispatcher做转发 -- redirect做重定向 -- chain转发到action -- redirectAction重定向到action 3 struts2提供获取表单数据方式 (1)属性封装 (2)模型驱动封装 (3)表达式封装 4 struts2获取数据封装到集合中 5 使用模型驱动和属性封装注意问题: (1)不能同时使用对同一个表单进行数据操作 6 表达式封装和模型驱动比较 (1)相同点:可以把数据封装到实体类对象里面 (2)不同的:表达式封装可以封装到多个实体类对象里面今天内容 1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别

(2)值栈存储位置 - 每个action对象里面有一个值栈对象 - 值栈对象里面有action引用 4 如何获取值栈对象 5 值栈内部结构 (1)root:list集合 (2)context:map集合 6 向值栈放数据 (1)s:debug标签 (2)向值栈放字符串 (3)向值栈放对象 (4)向值栈放list集合 - set方法 - push方法 - 定义变量,get方法 7 从值栈获取数据 (1)从值栈获取字符串 (2)从值栈获取对象 (3)从值栈获取list集合 - s:iterator标签使用 8 EL表达式获取值栈数据 (1)增强request里面getAttribute方法 9 ognl表达式#、%使用 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取域对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大, (1)在struts2里面操作值栈数据 (2)一般把ognl在struts2操作:和struts2标签一起使用操作值栈 3 OGNL不是struts2的一部分,单独的项目,经常和struts2一起使用 (1)使用ognl时候首先导入jar包,struts2提供jar包

struts2_day03笔记

Struts2 框架第三天 今天重点内容安排: 第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型 第二天:获取请求参数,请求数据校验机制,拦截器 1、V alueStack 值栈的存储原理和相关操作 2、Ognl 表达式语言语法 3、struts2 页面控制标签 4、struts2 form表单相关标签 重点难点:值栈和Ognl 1.值栈和Ognl表达式 1.1.什么是Ognl Ognl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库 EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据 pageContext、request、session、application )

Ognl 主要用法: 1、访问OGNL上下文值栈对象获取数据(最重要) 2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口! 值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的 Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口! 前端控制器每一次请求都会创建一个值栈对象源码:

一次请求对应一个值栈对象值栈生命周期= request 生命周期的!! 值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例 值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构 1:采用标签查看值栈结构图:

自学笔记

2008年8月18日自学笔记 (1)虚拟对象系统(VOS)net跨语言集成的的特性来源于VOS的支持,即支持过程性语言也支持对象性语言,解决了不同语言系统间的相容性问题。 (2)元数据:对VOS中类型描述代码的称呼。元数据携带了原代码中类型信息的描述。(3)虚拟执行系统(Visual Executive System VES)是VOS的实现用来驱动运行环境,元数据的生成和使用、公共语言规范(Common Language Specification CLS)的满足性检查以及应用程序执行过程中的内存管理都由他完成。 (4)公共语言运行时CLR: 管理着代码的执行,是一种可操控的执行环境。 (5)公共语言规范(Common Language Spec ification CLS):是CLS定义的语言特性集合,主要用来解决互操作性问题。 (6)静态域(static): 无论建立多少个类的实例,内存中只存在一个静态数据的拷贝。非静态域在类的每次实例话时,每个实例都拥有一份单独的拷贝。 (7)只读域(readonly )与const区别:只能在域的定义中和它所属类的构造函数中进行修改,在其他情况下是“只读”的,只读域的值只有到程序运行时才形成;const型表达式的值在编译时形成。 (8)事件(Event):为类和类的实例提供了向外界发送通知的能力,形象地说,Event 就是类或对象用来“发送通知”的成员。索引指示器:可以想数组那样对对象进行索引访问。 (9)委托是引用方法的一种引用类型,类似于函数指针,二者的主要区别在于委托包括调用其方法的对象。委托是引用在另一个对象中定义的方法的一种类型安全而又可靠的方式。可以引用静态方法、虚拟方法或实例方法。委托广泛用于时间处理。 2008年8月21日C# Sytex (1)代码显示格式设置TextEditort->C# -> Formating->wrapping 解决方案显示设置tools->options->project and solutions->always show solutions (2)客户端状态管理:ViewState 存储要回传到自身的少量信息

solr完整快速搭建版(学习笔记)

Solr学习笔记 由于公司一个网站需要实现搜索功能的更新换代,在和编辑和领导沟通了一段时间之后,我们决定不再使用之前的通过JDBC发送sql语句进行搜索的方法。一番比较,我们决定选用Lucene来搭建我们全文搜索的框架。后来由于开发时间有限,Solr对lucene的集成非常好,我们决定使用Struts+Spring+Solr+IKAnalyzer的一个开发模式来快速搭建一个企业级搜索平台。自己之前没有接触过这方面的东西,从不断看网上的帮助文档,逛论坛,逛wiki,终于一点一点的开发出一个有自己风格并又适合公司搜索要求的这么一个全文搜索功能。网上对于lucene,solr的资料并不是那么多,而且大多是拷贝再拷贝,开发起来难度是有的,项目缺陷也是有的,但是毕竟自己积累了这么一个搭建小型搜索引擎的经验,很有收获,所以准备写个笔记记录下来,方便自己以后回忆,而且可以帮助一下其他学者快速搭建一个企业级搜索。 主要思想: 此企业级搜索分2块,一块是Solr项目:仅关于Solr一系列配置,索引,建立/更新索引配置。另一块是网站项目:Action中通过httpclient通信,类似webService一个交互实现,访问配置完善并运行中的Solr,发送查询请求,得到返回的结果hits(solrJ查询,下面详解),传递给jsp页面。 1.下载包 Lucene3.5 Solr3.5 IKAnalyzer3.2.8中文分词器(本文也仅在此分词器配置的基础上) 开发时段:2011.12中旬至1月中旬 (请自己下载…) 都是最新版,个人偏好新东西,稳定不稳定暂不做评论。 2.搭建Solr项目: 1.apache-solr-3.5.0\dist下得apache-solr-3.5.0.war复制到tomcat下webapps目录, 并更改名字为solr.war,运行生成目录. 2.将IKAnalyzer的jar包导入刚生成的项目中lib目录下。 3.Solr项目配置中文分词: 在solr/conf/schema.xml中节点下添加个类型(可直接拷贝下段代码)

Struts1学习笔记总结

Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity

---------------Struts控制文件的路径 TLD(标签) 1) 2):显示信息 3):逻辑标签 struts-config.xml

韩顺平Spring笔记

①spring是什么? struts 是 web 框架 (jsp/action/actionfrom) hibernate 是 orm框架,处于持久层. spring 是容器框架,用于配置bean,并维护bean之间关系的框架 ?spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入) ?画一个框架图 快速入门 开发一个spring项目. 1.引入spring的开发包(最小配置该包把常用的jar都包括, 还要写日志包 2.创建spring的一个核心文件 , [hibernate有核心 struts核心文件 ], 该文件一般 放在src目录下,该文件中引入 xsd文件: 可以从给出的案例中拷贝一份. 3.配置bean

韩顺平 4.在中,我们怎么使用 到spring 的applicationContext对象(容器对象) ApplicationContext ac=new ClassPathXmlApplicationContext(""); UserService us=(UserService) ("userService"); (); 5.细节讨论? 传统的方法和使用spring的方法 5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架 5.2spring的运行原理图: 我们再看spring 对上面案例总结: spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可. ioc是什么? 答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器,而程序本身不再维护. DI是什么? 答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术

JAVAWEB学习笔记

IDEA的使用 一、创建HTML页面 先创建一个项目 选择static web然后next确定文件名和文件地址 右击项目下的idea,new选择HTML file确定文件名和样式

出现HTML界面鼠标移到右边可选择浏览器查看效果 二tomcat的配置和安装 https://www.wendangku.net/doc/0317203158.html,/article/0a52e3f43d9f69bf62ed72f9.html 安装版和解压版的区别: tomcat exe是可执行的安装程序,只需要双击这个文件,就可以开始安装Tomcat 了。在安装过程中,安装程序会自动搜寻JDK和JRE的位置(或手动输入JRE路径,如C:\jdk1.4_0_11\jre)。安装完成后,在Windows系统的“开始”->“程序”菜单下会添加Apache Tomcat5.5菜单组。 tomcat zip是一个压缩包,只需要将它解压到硬盘上就可以了。还是建议下载tomcat 压缩包,通过解压缩的方式安装Tomcat,解压缩的方式也适用于其他的操作系统. 安装与配置: 1、安装版: 下载安装版,点击后,一路next,就直接安装成功。 配置环境变量为TOMCAT_HOME你的安装目录CATALINA_HOME你的安装目录。 这是最简单的安装方法,只要不出错就直接OK,然后你再去官网下载Administration Web Application,直接解压到你的安装目录,就可以直接使用了。 2、解压版: 下载解压版的,解压在你认为的适合的地方。 2.1、修改bin\startup.bat文件: 在第一行前面加入如下两行: SET JAVA_HOME=(JDK目录) SET CATALINA_HOME=(前面解压后Tomcat的目录) 如果需要使用shutdown.bat关闭服务器的话,也按照上面加入两行。

spring笔记

struts:web层,比较简单(ValueStack值栈,拦截器) hibernate:dao层,知识点杂 spring:service层,重要,讲多少用多少--> 【了解】 spring day01:基础(IoC控制反转、DI依赖注入)、整合Junit、整合web spring day02:AOP切面编程、JdbcTemplate spring day03:事务管理、SSH整合 1spring框架概述 1.1 什么是spring ●Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。 ●轻量级:与EJB对比,依赖资源少,销毁的资源少。 ●分层:一站式,每一个层都提供的解决方案 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis ,jdbcTemplate --> spring-data

相关文档