文档库

最新最全的文档下载
当前位置:文档库 > ms10

ms10

模式1示例

们可以在JSP 中直接写代码,比如数据库的操作语句,把接收到的数据保存在数据库中,这样做的缺点是在JSP 页面中会有很多的Java 代码,看上去十分混乱,不便于维护和修改,对于大项目来说,这个缺点会更明显。为了解决问题,我们

可以把业务代码封装在javaBean 内,可以减少JSP 的Java 代码。这样的一种模式叫做:模式1。它分离了业务层[JavaBean]和表示层[JSP]。

任务:完成数据库表的数据的插入

步骤:

1.建立一个数据库表team 。[id:int,key,autoincrement;name:varchar:slogan:varcha]。安装MySql=>打开Navicat=>在test 数据库中建立team 表,任意输入几个记录。

2.安装Tomcat7=>打开Eclipse->建立动态Web 工程=>在Eclipse 内部配置Tomcat7=>试验一个jsp 以证明开发环境正常。

3.由于网站要用到Mysql,所以要将MySql 的Java 驱动放到Tomcat 的Lib 目录中。

4.做一个数据库的连接类database.DataSource ,它的功能是连接到数据库,返回连接对象。以后要使用连接数据库只需调用下面的getConnection 即可。

package database;

import java.sql.Connection; import java.sql.DriverManager; public class DataSource { public static Connection getConnection() throws Exception{ Class.forName ("com.mysql.jdbc.Driver");

String

浏览器

JSP

JavaBean

1.请求

3.应答

2.调用

url="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";

String user="root";

String password="11";

Connection cn=DriverManager.getConnection(url,user,password);

return cn;

}

}

5.做一个JavaBean:Team用来对应数据库表team的每一条记录。放在bean.Team中。package bean;

public class Team {

private int id;

private String name;

private String slogan;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

http://www.wendangku.net/doc/dd8af343a5e9856a5712601f.html = name;

}

public String getSlogan() {

return slogan;

}

public void setSlogan(String slogan) {

this.slogan = slogan;

}

}

6.建立一个业务类business.TeamBusiness,里面封装了插入数据库表的具体代码。public class TeamBusiness {

public static void addTeam(Team team)throws Exception{

Connection cn=null;

Statement stmt=null;

try{

cn=DataSource.getConnection();

stmt=cn.createStatement();

stmt.executeUpdate("insert into team(name,slogan) values('"+team.getName()+"','"+team.getSlogan()+"')");

}catch(Exception e){

throw e;

}

}

}

7.后台的基础工作完成了,下面来完成前台工作。先做一个表单,用于填写名字和口号。

Insert title here

组名:

口号:

8.处理表单的jsp要:将表单数据取出,然后将表单数据装配成Team对象,最后调用业务类TeamBusiness的业务方法addTeam插入了数据。

<%

request.setCharacterEncoding("GBK");

String nm=request.getParameter("name");

String slg=request.getParameter("slogan");

//out.print(nm+":"+slg+"
");

Team team=new Team();

team.setName(nm);

team.setSlogan(slg);

try{

TeamBusiness.addTeam(team);

out.print("插入成功.
");

}catch(Exception e){

e.printStackTrace();

}

%>

9.用jsp:javaBean指令读取表单,建立Team的实例

<%@page language="java"contentType="text/html; charset=GBK"

pageEncoding="GBK"%>

<%@page import="business.TeamBusiness"%>

Insert title here

<%

request.setCharacterEncoding("GBK");

try{

TeamBusiness.addTeam(team);

out.print("插入成功.
");

}catch(Exception e){

e.printStackTrace();

}

%>

模式2示例

ms10

模式1把业务代码从JSP页面中分离了出去,减少了JSP的Java代码量,但在JSP页面中还有一些处理控制的Java代码。如果项目规模大,业务复杂,可能JSP中的处理控制的Java 代码就会很杂乱。为了解决这个问题,可以把Servlet和JSP结合起来,用Servlet接收用户提交的请求,调用业务方法,再转发给JSP页面显示结果。以上所说的结构称为模式2。模式2是一种MVC模式。MVC模式分为3层:业务层(Model)是进行业务处理的,表示层(View)

是用来与用户交互的,控制层(Control)是进行流程控制的。

任务:查询一个表的数据

1,建立一个数据库表team。[id:int,key,autoincrement;name:varchar:slogan:varcha]。安装MySql=>打开Navicat=>在test数据库中建立team表,任意输入几个记录。

2.安装Tomcat7=>打开Eclipse->建立动态Web工程=>在Eclipse内部配置Tomcat7=>试验一个jsp以证明开发环境正常。

3.由于网站要用到Mysql,所以要将MySql的Java驱动放到Tomcat的Lib目录中,还要导入servlet-api.jar包到开发环境中。

4.做一个数据库的连接类database.DataSource,它的功能是连接到数据库,返回连接对象。以后要使用连接数据库只需调用下面的getConnection即可。

package database;

import java.sql.Connection;

import java.sql.DriverManager;

public class DataSource {

public static Connection getConnection() throws Exception{ Class.forName("com.mysql.jdbc.Driver");

String

url="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";

String user="root";

String password="11";

Connection cn=DriverManager.getConnection(url,user,password);

return cn;

}

}

4.做一个JavaBean:Team用来对应数据库表team的每一条记录。放在bean.Team中。package bean;

public class Team {

private int id;

private String name;

private String slogan;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

http://www.wendangku.net/doc/dd8af343a5e9856a5712601f.html = name;

}

public String getSlogan() {

return slogan;

}

public void setSlogan(String slogan) {

this.slogan = slogan;

}

}

5,完成业务类business.TeamBusiness,其中写一个查询功能。public static Collection allTeams() throws Exception{

//泛型,返回的是一个元素类型为Team的集合

ArrayList teams=new ArrayList();

Connection cn=null;

Statement stmt=null;

ResultSet rs=null;

try{

cn=DataSource.getConnection();

stmt=cn.createStatement();

rs=stmt.executeQuery("select * from team");

while(rs.next()){

Team team=new Team();

team.setName(rs.getString("name"));

team.setSlogan(rs.getString("slogan"));

teams.add(team);

}

}catch(Exception e){

e.printStackTrace();

}

return teams;

}

6,建立并调试Servlet。ViewTeam。

package servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class ViewTeam

*/

@WebServlet("/ViewTeam")

public class ViewTeam extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public ViewTeam() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

}

在web.xml中的配置为:

ViewTeam

servlet.ViewTeam

ViewTeam

/servlet/viewTeam

7,修改ViewTeam类,完成调度和转发工作:

try{

Collection teams=TeamBusiness.allTeams();

request.setAttribute("teams", teams);

RequestDispatcher

rd=request.getRequestDispatcher("../mod2ViewTeams.jsp");

// RequestDispatcher 是javax.servlet 的转发处理对象 rd.forward(request, response); }catch (Exception e){ e.printStackTrace();

}

8,完成jsp 显示: Collection

teams=(Collection)request.getAttribute("teams"); Iterator it=teams.iterator(); while (it.hasNext()){ Team team=it.next(); %>

<%=team.getName() %>:<%=team.getSlogan() %>

<%

}

过滤器是可插入的Web 组件,拦截请求和响应,对请求和响应进行过滤。 任务:限制ip 访问给定资源

(1) 安装Tomcat7=>打开Eclipse->建立动态Web 工程=>在Eclipse 内部配置Tomcat7=>

试验一个jsp 以证明开发环境正常。

(2)过滤器Filter ,它实质是一个接口。它有三个方法:init 初始化接口;destroy 销毁接口;doFilter 过滤动作。

(3)建立一个ft 包,建立一个名叫AddressFilter 的Filter 类。[要引入servlet-api.jar]。 (4)AddressFilter 的参考代码:

package ft;

import java.io.IOException; import java.io.PrintWriter;

import javax.servlet.Filter;

浏览器

过 滤 器

Servlet

Jsp

Html

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

/**

* Servlet Filter implementation class AddressFilter

*/

@WebFilter("/AddressFilter")

public class AddressFilter implements Filter {

private FilterConfig filterConfig=null;

private String addressProhibited=null;

/**

* Default constructor.

*/

public AddressFilter() {

// TODO Auto-generated constructor stub

}

/**

* @see Filter#destroy()

*/

public void destroy() {

// TODO Auto-generated method stub

this.filterConfig=null;

}

/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub

// place your code here

String address=request.getRemoteAddr();

if(address.equals(addressProhibited)){

response.setCharacterEncoding("GBK");

PrintWriter out=response.getWriter();

out.print("this addrss is prohibited!");

out.flush();

return;

}

// pass the request along the filter chain

chain.doFilter(request, response);

}

/**

* @see Filter#init(FilterConfig)

*/

public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub

this.filterConfig=fConfig;

addressProhibited=filterConfig.getInitParameter("addressProhibite d");

}

}

(5)web.xml的Filter的配置:

AddressFilter

ft.AddressFilter

addressProhibited

127.0.0.1

AddressFilter

/jsp_abc.html

1请求浏览器过

Action

Jsp 业务类

应答

转发调用调用

Structs2是一个典型的MVC架构,给软件开发带来很大的方便。在Structs2中,M用Java 程序实现,V用Jsp实现,C用Action实现。浏览器的请求首先经过Structs过滤器,过滤器根据请求和Structs2的配置去调用相应的Action,Action调用执行业务类的方法,然后转发到jsp页面进行显示。

(1)将正确的jar包放到项目的lib目录中。

(2)在src下建立一个struts.xml,内容:

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://www.wendangku.net/doc/dd8af343a5e9856a5712601f.html/dtds/struts-2.3.dtd">

extends="struts-default">

/Hello.jsp

(3)在src下建立Action类MyHello

public class MyHello {

public String execute()throws Exception{

return"gohello";

}

}

(4)做jsp显示页面:

<%@page language="java"contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

"http://www.wendangku.net/doc/dd8af343a5e9856a5712601f.html/TR/html4/loose.dtd">

Insert title here

Hello Struts2

(4)在web.xml中加入Struts过滤器

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAn dExecuteFilter

struts2

/*

(5)访问方式:http://127.0.0.1:8080/项目名/myhello