web框架-Struts开始
问题:
为什么有structs
作为一种框架(frameset)可以与传统的mvc进行比较?
MVC是一种模式数据处理、显示和数据输入分开,来规范开发,但是却又并不规范。可以这样想:有三家公司,他们对于MVC有自己的理解和编写方式所以编写的方式却又并不相同,这样structs应运而生。
Structs是一种基于MVC的规范来进行开发。这样再编程的过程中可以发现:
1.程序规范化了
2.程序编写效率高
3.程序同时可维护性提高且可读性增强。
但我们可以根据任何事物不能完全的原则,所以这样的方法也有缺陷,这里就不细说了。
简单的提以下几点供读者考虑:
下面是struts的关键点:
struts如果仅仅只是会用工具然后点击生成,那样只能叫“点”过,不能叫学过。
任何程序开发需要明白流程,只有真正的原理才能在使用工具时明白底层的调用关系,在后续的遇到一些需要“真功夫”时才能拿得出手。
整个用structs进行测试的开发步骤(注:整个程序考虑是struts1.3.10 struts2在此基础上改进):
1.建立工程
2.引入jar包
3.建立登录login.jsp提交相应的数据表单
4.编写actionform和action(关于login)
5.编写struct-config.xml 用于配置actionform对应关系和跳转的位置
6.编写跳转成功页面wel.jsp和失败页面error.jsp
7.配置web.xml进行配置关键的actionservlet
8.进行测试
核心代码:
1.跳转到主界面:index.jsp (这样具有更好的保密性)
2.登录界面login.jsp
3.增加表单actionform
package com.ly.forms; //用户表单,用于填充数据
import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm { //属性定义(规范与jsp中的控件名一样)
private String username;
private String passwd; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
} }
4.表单对应的action
package com.ly.actions;
//这是一个action 需要继承action
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import com.ly.forms.UserForm; public class LoginAction extends Action { //execute可被自动调用 类似servlet dopost()方法 public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub //把form强转成对应的userform类
UserForm userform=(UserForm)form; System.out.println("用户名="+userform.getUsername()+"密码="+userform.getPasswd());
//return super.execute(mapping, form, request, response); //简单验证
if(userform.getPasswd().equals("123"))
{
//把用户名放到request 对象域中
request.setAttribute("username", userform.getUsername()); //密码123是合法用户mapping 是直接返回actionServlet
return mapping.findForward("ok");
}
else
{
return mapping.findForward("err");
}
} //需要重写一个方法 }
5.添加struts配置文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置表单 -->
<form-beans>
<!-- name 表单名字随意 (小写) -->
<!-- type是表单的全路径 -->
<!-- 配置struts 中action 与actionForm的关系 -->
<form-bean name="userForm" type="com.ly.forms.UserForm"/>
</form-beans> <action-mappings>
<!-- 配置具体 action 其path:表示将来访问url -->
<!--name: action与对应 actionForm的对应-->
<!-- path:action全路径 -->
<action path="/login" name="userForm" type="com.ly.actions.LoginAction">
<!-- 这里配置跳转关系 --> <!-- name是结果名称 path是转发页面 -->
<forward name="ok" path="/WEB-INF/wel.jsp"/>
<forward name="err" path="/WEB-INF/error.jsp"/>
</action>
</action-mappings>
</struts-config>
6.(省略wel.jsp 和error.jsp 只需简单写写就行必要时再添加)
进行web配置 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置structs -->
<!-- 用actionServlet控制 -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 指明 配置文件 strcts-config路径 -->
<init-param> <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts配置细节
一个简单的登陆测试
下面是流程的截图(仅供参考):
actionServlet进行了实例化对象(反射机制),这样才能对表单进行添加数据(actionform)
注意 表单中的set和get方法
通过actionservlet来明细整个流程会对整个流程更加清晰
考虑:在此基础上增加在成功界面显示登录者的用户名
但是会出现中文乱码问题(在wel.jsp中添加语句并不会有太多的用 考虑:整个流程在actionservlet中已然已经把数据添加到表单了)
(考虑使用过滤器)--记得在web.xml配置过滤器
主要代码:
package com.ly.filters; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyFilter1 extends HttpServlet implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub //过滤方法
arg0.setCharacterEncoding("utf-8"); //设置接收编码 arg2.doFilter(arg0, arg1); //必须(否则停止前进) arg1.setContentType("/text/html;charset=utf-8");
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }
在web.xml中添加
效果:
以上仅是一个小的demo 仅供学习。
日进一小步,月过一大步~~加油!!
web框架-Struts开始的更多相关文章
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- Spring 4 官方文档学习(十三)集成其他web框架
重点是通用配置,非常建议看一下!有助于理解Spring的ApplicationContext与Servlet Container的关系! 1.介绍 Spring Web Flow SWF目标是成为we ...
- Spring与其他Web框架集成
Spring与多种流行Web应用框架(Struts.JSF和DWR)集成的方法. Spring强大的IoC容器和企业支持特性使其十分适于实现Java EE应用的服务和持续层. 对于表现层,可以在许多不 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- 调查:Java程序员最亲睐的Web框架
这是关于Java的第二个调查,第一个调查请点这里查看. 这一次,我们要讨论的是web框架. 只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据.下面是其他开发者所使用w ...
- 自己动手写web框架----1
本文可作为<<自己动手写struts–构建基于MVC的Web开发框架>>一书的读书笔记. 一个符合Model 2规范的web框架的架构图应该如下: Controller层的Se ...
- 十三、MVC的WEB框架(Structs2)
一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...
- java web框架发展的新趋势--跨界轻型App
“跨界(cross over)在汽车界已然成风,将轿车.SUV.跑车和MPV等多种不同元素融为一体的混搭跨界车型,正在成为汽车设计领域的新趋势.从个人而言,当包容.多元的审美要求和物质要求越来越强烈时 ...
- Java Web学习总结(32)——Java程序员最亲睐的Web框架
这一次,我们要讨论的是web框架. 只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据.下面是其他开发者所使用web框架列表: spring MVC/Spring Bo ...
随机推荐
- Python接口自动化--requests 1
# _*_ encoding:utf-8 _*_ import requests #请求博客园首页,无参数的get请求 r = requests.get('http://www.cnblogs.com ...
- Tarjan-割点&桥&双连通
$Tarjan$求割点 感觉图论是个好神奇的东西啊,有各种奇奇怪怪的算法,而且非常巧妙. 周末之前说好回来之后进行一下学术交流,于是wzx就教了$Tarjan$,在这里我一定要说: wzx AK ...
- [Luogu 3707] SDOI2017 相关分析
[Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...
- 【转】Tomcat连接器:Coyote框架
不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个http服务器,需要从socket中获得HTTP数据流:另一方面,容器只能处理封装好的org.apache.coyote.Request ...
- [luogu3198] 玩具装箱
题面 最近在搞dp, 发现自己的dp还是太弱了, 做的题比较少, 也有一些东西没学, 这道题算是我独立做的第一道斜率优化dp, 写篇题解纪念一下吧. dp式比较简单, 就是一个线性的dp, 设 ...
- Pyspider抓取静态页面
近期,我想爬一批新闻资讯的内容.新闻类型的网址很多,我想看看有没有一个网页上能包罗尽可能多的新闻网站呢,于是就发现了下面这个网页 http://news.hao123.com/wangzhi 这个页面 ...
- [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)
有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...
- HDU - 4118 Holiday's Accommodation
Problem Description Nowadays, people have many ways to save money on accommodation when they are on ...
- Git与TortoiseGit基本操作
Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...
- 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令
在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...